Redis五大数据类型
Redis五大数据类型
补充:常用命令
Ping ping下redis
Dbsize 查看当前数据库的key的数量
Select 1 切换到下标为1的数据库中
Flushdb 清空当前库key
Flushall 清空全部库key
Redis键的操作(常用):
查看当前数据库的所有key:
Keys *
判断当前key是否存在:
exists name
将当前key移动到2号库中:
Move name 2
设置key在6秒后过期:
expire name 6
查看当前key还有多久过期
ttl name
查看当前key是什么结构的类型
type name
String 类型(常用)
String是redis最基本的类型,可以理解成一个key对应一个value。
String类型是二进制安全带额,意思是redis的string可以包含任何数据,比如jpg图片或者序列化对象。
一个redis中字符串value最多可以是512M
操作:
set name oyr: 给键name设置值为oyr
get name: 获取键name的值
del name: 删除建为name值
append name 123: 在name对应的值后面追加123
strlen name: 得到当前name对应的值的长度
incr age:age+1 一定要是数字才能操作
incrby age 10:age+10
decr age:age-1 一定要是数字才能操作
decrby age 10: age-10
setex name 10 oyr:
(set with expire)
设置key为name,过期时间为10秒,值为oyr
sexnx name ooo:
(sex if not exist)
设置键位name,值为ooo,只有不存在的时候才会设置进去
mset k1 v1 k2 v2 k3 v3: 一次设置多个值
mget k1 k2 k3: 一次获取多个值
msetnx k1 v1 k2 v2 k3 v3: 一次设置多个值,如果有一个键是存在的那么全部失效。
Hash 类型(常用)
Redis hash 是一个键值对集合。
Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
类似Java里面的Map<String,Object>
K-V模式不变,但V是一个键值对
操作:
(1)hset
hset user name oyr 给键user的name属性设置值
(2)hget
hget user name 获取键user的name值
(3)hmset
hmset user age 18 sex nan 同时设置多个值
(4)hmget
hmget user name age sex 同时获取多个属性值
(5)hgetall
hgetall user 获取键user中的所有键和值
(6)hdel
hdel user name 删除键user中的name属性
(7)hlen
hlen user 获取键user下有几个属性
(8)hexists
hexists user nane 判断键user下是否有name属性
(9)hkeys
hkys user 获取键user下的所有属性
(10)hvals
hvals user 获取键user下的所有值
(11)hsetnx
hsetnx user name "oyr" 如果user对象里存在 name 属性,则不做操作,不存在,创建并赋值。
(12)hincrby
hincrby user age 10 给键user里的age 属性添加10
Lists 类型(双向链表)
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)。
它的底层实际是个链表,而且是双向链表。注意:先进后出,后进先出
操作:
lpush list1 a b c d 给list1链表添加数据a b c d,从头部添加
lrange list1 0 -1 获取list1链表所有数据
rpush list2 1 2 3 给链表list2尾部插入元素
lpop list1 出栈 mylist,出栈后,元素消失(从头部出)
rpop list1 出栈 mylist,出栈后,元素消失(从尾部出)
lindex list1 3 获取链表的3索引位置的值
list1 获取list1 链表的长度
lset list2 2 s 给链表索引2的位置设置值为 s
lrem list3 2 d 删除链表2个d元素
ltrim list2 2 5 从索引2截取到索引5,其他元素被遗弃
linsert list2 before/after s u 在链表f元素前面或者后面插入 h 元素
rpoplpush list1 list2 从list1链表中尾部出站,出栈元素添加给list2链表
lists性能总结:
它是一个字符串链表,left、right都可以插入添加;
如果键不存在,创建新的链表;
如果键已存在,新增内容;
如果值全移除,对应的键也就消失了。
链表的操作无论是头和尾效率都极高,但假如是对中间元素进行操作,效率就很惨淡了。
Set 类型(不能重复)
Redis的Set是string类型的无序集合。它是通过HashTable实现实现的,
操作:
sadd set1 a b c d 给set1集合添加元素
smembers set1 查看set1集合的所有元素
sismember set1 a 判断set1集合中是否有a元素
scard set1 获取集合set1 的元素个数
srem set1 a 删除集合set1中的元素(可以一次删除多个)
srandmember set2 3 在集合set2中随机出3个元素
diff set3 set4 差集,取set3中存在但是set4中不存在的元素
sinter set3 set4 交集,取set3和set4都存在的元素
sunion set3 set4 并集
Sortedsets 类型
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。
redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。
操作:
zadd zset1 60 a 70 b 80 c 90 d 100 f 给zset1 有序集合设置元素,同时设置元素分数。
zrange zset1 0 -1 withscores 查询集合所有元素,0:开始,-1:结束,withscores显示分数
zrange zset1 0 2 查询集合下标0到下标2的元素
zcount zset1 70 90 统计分数在 70 到 90 之间元素,闭区间。
zcount zset1 (70 90 统计分数在70到90之间元素,左边开区间,右边闭区间
zcount zset1 -inf +inf 统计所有元素 -inf:最小值 +inf:最大值
根据分数查询12到19集合,从坐标0开始。每页显示1条,12-19都是闭区间:
zrangebyscore mysset 12 19 withscores limit 0 1
zrem zset1 a b 集合删除元素a b
五大数据类型操作结束