字符串set
设置值[O(1)]
set key value [ex seconds] [px milliseconds] [nx|xx]
-
ex seconds:为键设置秒级过期时间。
-
px milliseconds:为键设置毫秒级过期时间。
-
nx:键必须不存在,才可以设置成功,用于添加。
-
xx:与nx相反,键必须存在,才可以设置成功,用于更新。
redis还提供了setex和setnx
setex key seconds value
setnx key value
demo证明 nx、xx
的区别
127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> setnx hello world
(integer) 0
127.0.0.1:6379> set hello jedis xx
OK
127.0.0.1:6379> get hello
"jedis"
127.0.0.1:6379> set hello word
OK
127.0.0.1:6379> get hello
"word"
127.0.0.1:6379> set hello2 jedis xx
(nil)
127.0.0.1:6379>
即 nx
仅当key不存在时才可set(应用于分布式锁),xx
仅当key存在才可set
获取值[O(1)]
get key
删除[O(1)]
del key [key...]
批量[O(k)]
k为key长度
mset key value [k v...]
mget key [key ...]
计数[O(1)]
incr key
从0自增,且为单线程无CAS开销
还提供decr(自减)、incrby(自增指定数字)、 decrby(自减指定数字)、incrbyfloat(自增浮点数)[O(1)]
decr key
incrby key increment
decrby key decrement
incrbyfloat key increment
追加值[O(1)]
append key value
向字符串尾部追加值
字符串长度[O(1)]
strlen key
redis中每个中文占用3个字节
设置并返回原值[O(1)]
getset key value
设置指定位置字符[O(1)]
setrange key offeset value
获取部分字符串[O(n)]
n为字符串长度
getrange key start end
查看key编码
object encoding key
哈希h
设置值[O(1)]
hset key field value
hsetnx key fiedl value
获取值[O(1)]
hget key field
删除field[O(k)]
k为field总数
hdel key field [field ...]
返回结果为成功删除field的个数
计算field个数[O(1)]
hlen key
批量[O(k)]
k为field总数
hmget key field [field ...]hmset key field value [field value ...]
判断field是否存在[O(1)]
hexists key field
获取所有field[O(n)]
n为field总数
hkeys key
获取所有value[O(n)]
n为field总数
hvals key
获取所有的field-value[O(n)]
n为field总数
hgetall key
自增[O(1)]
hincrby key field
hincrbyfloat key field
计算字符串长度(v3.2+)[O(1)]
hstrlen key field
列表L
添加
右插[O(k)]
k是元素个数
rpush key value [value ...]
左插[O(k)]
k是元素个数
lpush key value [value ...]
在某个元素前或后插入[O(n)]
n是target_val距离列表头或尾的距离
linsert key before|after target_val value
查找
列出元素(L -> R)[O(s+n)]
s是start的偏移量,n是start到end的范围
lrange key start endlrange key 0 -1
- 索引下标从左到右分别是0到N-1,但是从右到左分别是-1到-N。
- lrange中的end选项包含了自身
获取指定下标的元素[O(n)]
n是索引偏移量
lindex key index
获取列表长度[O(1)]
llen key
删除
左弹[O(1)]
lpop key
右弹[O(1)]
rpop key
删除指定元素[O(1)]
lrem key count value
-
count>0,从左到右,删除最多count个元素。
-
count<0,从右到左,删除最多count绝对值个元素。
-
count=0,删除所有。
按照索引范围保存列表[O(n)]
n是要保存元素的个数,即 end - start + 1
ltrim key start end
修改指定索引下标的元素[O(n)]
n是索引偏移量
lset key index newValue
阻塞操作[O(1)]
blpop key [key ...] timeout
timeout:阻塞时间(单位:秒)
- 列表为空
- 如果为0,则一直阻塞。
- 如果此期间添加了数据,客户端立即返回
- 列表不为空
- 客户端会立即返回。
brpop key [key ...] timeout
- 如果是多个键,那么brpop会从左至右遍历键,一旦有一个键能弹出元素,客户端立即返回
- 如果多个客户端对同一个键执行brpop,那么最先执行brpop命 令的客户端可以获取到弹出的值。
- (此特性可用于发布订阅)
集合s
集合内操作
添加
sadd key element [element ...]
返回结果为添加成功的元素个数
删除
srem key element [element ...]
返回结果为成功删除元素个数
计算元素个数[O(1)]
直接用 Redis内部的变量,不会遍历集合所有元素
scard key
判断元素是否在集合中[O(1)]
sismember key element
随机返回指定个元素[O(count)]
srandmember key [count]
随机弹出元素[O(1)]
spop key
获取所有元素
smembers key
smembers和lrange、hgetall都属于比较重的命令,如果元素过多存在阻 塞Redis的可能性,这时候可以使用sscan来完成
集合间操作
多个集合的交集
sinter key [key ...]
多个集合的并集
suinon key [key ...]
多个集合的差集
sdiff key [key ...]
交集、并集、差集的结果保存
sinterstore destination key [key ...]
suionstore destination key [key ...]
sdiffstore destination key [key ...]
有序集合z
集合内
添加成员
zadd key score member [score member...]
Redis3.2为zadd命令添加了nx、xx、ch、incr四个选项:
-
nx:member必须不存在,才可以设置成功,用于添加。
-
xx:member必须存在,才可以设置成功,用于更新。
-
ch:返回此次操作后,有序集合元素和分数发生变化的个数
-
incr:对score做增加,相当于后面介绍的zincrby。
-
有序集合相比集合提供了排序字段,但是也产生了代价,zadd的时间 复杂度为O(log(n)),sadd的时间复杂度为O(1)
计算成员个数[O(1)]
zcard key
计算某个成员的分数[O(1)]
zscore key member
计算成员的排名
zrank key member # 从低到高
zrevrank key member
删除成员
zrem key member [member ...]
增加成员的分数
zincrby key increment member
返回指定排名范围的成员
zrange key start end [withscores]
zrevrange key start end [withscores]
返回指定分数范围的成员
zrangebyscore key min max [withscores] [limit offset count]
zrevrangebyscore key max min [withscores] [limit offset count]
min和max还支持开区间(小括号)和闭区间(中括号),-inf和 +inf分别代表无限小和无限大
返回指定分数范围成员个数
zcount key min max
删除指定排名内的升序元素
zremrangebyrank key start end
删除指定分数范围的成员
zremrangebyscore key min max
集合间
交集
zinterstore destination numkeys key [key ...] [weights weight [weight ...]]
[aggregate sum|min|max]
-
destination:交集计算结果保存到这个键。
-
numkeys:需要做交集计算键的个数。
-
key[key...]:需要做交集计算的键。
-
weights weight[weight...]:每个键的权重,在做交集计算时,每个键中 的每个member会将自己分数乘以这个权重,每个键的权重默认是1。
-
aggregate sum|min|max:计算成员交集后,分值可以按照sum(和)、 min(最小值)、max(最大值)做汇总,默认值是sum。
并集
zunionstore destination numkeys key [key ...] [weights weight [weight ...]] [aggregate sum|min|max]