redis常用命令

字符串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]
上一篇:基于SSM框架的网上服饰商城购物系统源码+毕业论文


下一篇:F5 api接口开发实战手册(二)