Redis总结梳理-常见操作及复杂度
五种数据结构
| 字符串 | 哈希 | 列表 | 集合 | 有序集合 |
|---|---|---|---|---|
| string | hash | list | set | sortedset |
一、字符串string
redis中的字符串结构可以保存多种数据类型例如:简单的字符串、json、xml、二进制。但是其值的最大长度为512MB。
1. 基本操作
set
1. set key value [ex] [px] [nx|xx]
ex : 秒级过期时间
px : 毫秒级过期时间
nx : 键必须不存在,才可以set成功 (添加)
xx : 键必须存在,才可以set成功 (更新)
ps:setnx在多个客户端执行时,也只有一个能成功,所以可以作为分布式锁的一种解决方案
2. mset key1 value1 key2 value2 ... (批量设置)
get
1. get key
2. mget key1 key2 ...
del
del key
2. 其他操作
计数
1. incr key 自增(key对应的值必须要为整数,否则报错。如果键不存在,则自动创建该键,值从0开始自增,返回1。)
2. decr key 自减(同incr原则)
3. incrby key increment 指定步长自增
4. decrby key decrement 指定步长自减
5. incrbyfloat key increment 指定浮点数步长自增
6. ...
追加值
append key value (向字符串尾部追加值)
字符串长度
strlen key (单位:字节。一个中文字占3个字节,一个ascii字符占1个字节。)
设置并返回原值
getset key value
设置制定位置的字符
setrange key offset value
获取部分字符串
getrange key start end
二、哈希hash
redis中的hash类型也是键值对结构
1. 基本操作
hset
1. hset key field value
2. hmset key field1 value1 field2 value2 ...
hget
1. hget key field
2. hmget key field1 field2 ...
hdel
hdel key field1 [field2 field3 ...]
2. 其他操作
计算field个数
hlen key
判断field是否存在
hexists key field (存在返回1 否则0)
获取所有field
hkeys key
获取所有的value
hvals key
获取所有的field-value
hgetall key
计数
1. hincrby key field increment
2. hincrbyfloat key field increment
计算value的字符串长度
hstrlen key field
三、列表list
redis中的list是一个有序的、可重复元素的列表
1. 基本操作
添加
1. 从右边插入元素
rpush key value [value ...]
2. 从左边插入元素
lpush key value [value ...]
3. 向某个元素前或后插入元素
linsert key before|after pivot value
查找
1. 获取制定范围内的元素列表
lrange key start stop
ps: 索引下标从左到右为:0~n-1
索引下表从右到左为:-1 ~ -n
[start stop] 左闭右闭全包含
2. 根据索引获取value
lindex key index
删除
1.从列表左侧弹出元素
lpop key
2. 从列表右侧弹出元素
rpop key
3. 删除指定元素
lrem key count value
ps: count>0,从左往右删除count个元素
count<0,从右往左删除count个元素
count=0,删除所有元素
4. 修建列表
ltrim key start stop
保留[start,stop]之间的元素,之外的全都删掉
修改
1. 修改指定索引下表的元素
lset key index value
2. 其他操作
获取列表长度
llen key
阻塞操作
有blpop和brpop两种操作,暂不总结,知道有它就行。(TODO)
四、集合set
redis中的set是一个不可重复、无序、不同通过索引获取元素的数据结构
1. 基本操作
添加元素
sadd key member [member ...]
删除元素
srem key member [member ...]
集合交集
sinter key1 key2 ...
集合并集
sunion key1 key2 ...
集合差集
sdiff key1 key2 ...
将集合的交集、并集、差集结果保存
1. sinterstore dest key1 key2 key3 ...
2. sunionstore dest key1 key2 key3 ...
3. sdiffstore dest key1 key2 key3 ...
ps: 在redis中进行交并补操作比较耗时,将结果保存起来可以在需要的时候直接smembers获取。
2. 其他操作
计算元素个数
scard key
判断元素是否在集合中
sismember key member(返回1有,否则无)
随机从set中返回指定个数元素
srandmember key count
ps : count > 集合元素个数 , 返回set中的所有元素
count = 0 ,不返回任何数据
count < 0 ,随机返回count个元素
随机弹出元素
spop key [count]
ps : 弹出元素后set 中就没有这个元素啦。
获取所有元素
smembers key (返回元素的顺序与sadd的顺序不一定相同。无序!)
五、有序集合
redis中的有序集合是一种元素不可重复,以分数(scores)方式实现的数据结构
1. 基本操作
添加(更新)元素
1.zadd key [nx|xx] [ch] [incr] score member [score member ...]
nx : 元素必须不存在才可以添加成功
xx : 元素必须存在才可以设置成功
ch : 返回此命令执行完成后,有序集合元素和分数发生变化的个数
incr:对score做增加
删除元素
zrem key member [member ...]
计算成员个数
zcard key
交集
zinterstore dest numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM | MIN | MAX]
并集
zunionstore dest numkeys key [key ... ] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]
2. 其他操作
增加某个元素的分数
zincrby key increment member
返回某个元素的分数
zscore key member
返回元素的排名
1. zrank key member 分数由低到高排名
2. zrevrank key member 分数由高到低排名
返回指定排名范围的元素
1. zrange key start stop [withscores]
2. zrevrange key start stop [withscores]
ps : zrange从低到高排名,zrevrange从高到低排名。加了withscores则连同分数一并返回。
返回指定分数范围的元素
1. zrangebyscore key min max [withscores] [limit offset count]
2. zrevrangebyscore key max min [withscores] [limit offset count]
返回指定分数范围的元素的个数
zcount key min max
删除指定排名内的升序元素
zremrangebyrank key start stop
删除指定分数范围元素
zremrangebyscore key min max
六、复杂度总结
字符串

哈希

列表

集合

有序集合


浙公网安备 33010602011771号