redis常用命令

189 阅读5分钟

字符串

SET key value

image.png

MSET key value [key value...]

image.png

SETNX key value

返回1代表成功, 返回0代表失败

image.png

GET key

image.png

MGET key [key...]

image.png

DEL key [key...]

返回删除的key的个数

image.png

image.png

EXPIRE key seconds

为name延长了30秒的过期时间

image.png

原子加减

INCR key

初始设置为1, 每次增加1

image.png

DECR key

初始设置为-1, 每次减少1

image.png

INCRBY key increment

每次增加increment, 如果没有, 初始设置为increment

image.png

DECRBY key decrement

每次减少decrement, 如果没有, 初始设置为-decrement

image.png

对象缓存

SET user:1 value(json)

需要双引号

image.png

MSET user:1:name darkness user:1:age 28

image.png

MGET user:1:name user:1:age

image.png

分布式锁

SETNX product:10001

image.png

DEL product:10001

image.png

SET product:10001 true ex 10 nx

防止程序以外终止导致死锁

ex表示10秒过期, nx表示唯一key

image.png

计数器

INCR article:readcount:{文章id}

每次阅读增加一次

image.png

GET article:readcount:{文章id}

image.png

Web集群共享session

分布式系统全局序列号

INCRBY orderId 1000 批量生成序列号提升性能

Hash

HSET key field value

存储一个hash表key的键值对

image.png

HSETNX key field value

存储一个不存在的hash表key的键值对

分布式锁的重入次数

image.png

HMSET key field value [field value...]

在一个hash表key中存储多个键值对

image.png

HGET key field

获取hash表key对应键为field的值

HMGET key field [field...]

批量获取hash表key中多个键为field的值

image.png

HDEL key field [field...]

删除hash表key中的field键值对

image.png

HLEN key

返回hash表key中键的数量

image.png

HGETALL key

返回hash表key中所有的键值对

image.png

HINCRYBY key field increment

为hash表key中键为field的值加上增量increment

分布式锁的重入次数+1

image.png

对象缓存

HMSET user {userId}:name darkness {userId}:age 28

HMSET user 1:name darkness 1:age 28

HMGET user 1:name 1:age

优点

  1. 同类数据归类整合存储, 方便数据管理

  2. 相比string操作消耗内存与cpu更小

  3. 相比string存储更节省空间

缺点

  1. 过期功能不能使用在field上, 只能用在key上

  2. Redis集群架构下不适合大规模使用

List

LPUSH key value [value...]

将一个或多个值value插入到key列表的表头(最左边)

返回插入后, 列表的总元素个数

image.png

RPUSH key value [value...]

将一个或多个值value插入到key列表的表尾(最右边)

image.png

LLEN key

查看一个list有多少个元素

LINDEX key index

查看一个list的index下标的元素

LPOP key

移除并返回key列表的头元素

image.png

RPOP key

移除并返回key列表的尾元素

image.png

LRANGE key start stop

返回列表key中指定区间内的元素

image.png

BLPOP key [key...] timeout

从key列表表头弹出一个元素, 若列表中没有元素, 阻塞等待timeout秒, 如果timeout=0, 一直等待

image.png

BRPOP key [key...] timeout

从key列表表尾弹出一个元素, 若列表中没有元素, 阻塞等待timeout秒, 如果timeout=0, 一直等待

image.png

BRPOP/BLPOP元素不够阻塞

image.png

应用1

Stack = LPUSH + LPOP

队列

Queue = LPUSH + RPOP

阻塞队列

Blocking MQ = LPUSH + BRPOP

应用2: 消息推送

某用户订阅了某多个公众号, 公众号发消息, 该消息ID为123456, 遍历该公众号的关注者, 进行发消息:

遍历关注者发送消息: LPUSH msg:{darkness} 123456

image.png

每个关注者读取消息(最新5条): LRANGE msg:{darkness} 0 4

image.png

Set

SADD key member [member...]

向集合key中存入元素, 元素存在则忽略

存入后返回存入成功的个数

image.png

SREM key member [member...]

从集合key中删除元素

返回删除的元素个数

image.png

SMEMBERS key

获取集合key中所有元素

image.png

SCARD key

获取集合key中的元素个数

image.png

SISMEMBER key member

判断member元素是否存在于集合key中

存在返回1, 不存在返回0

image.png

SRANDMEMBER key [count]

从集合key中选出count个元素, 元素不从key中删除

image.png

SPOP key [count]

从集合key中选出count个元素, 元素从key中删除

image.png

SINTER key [key...]

交集运算

image.png

SINTERSTORE destination key [key...]

将交集结果存入新集合destination中

image.png

SUNION key [key...]

并集运算

image.png

SUNIONSTORE destination key [key...]

将并集结果存入新集合destination中

image.png

SDIFF key [key...]

差集运算

image.png

SDIFFSTORE destination key [key...]

将差集结果存入新集合destination中

image.png

应用1: 微信抽奖小程序

  1. 点击参与抽奖加入集合 SADD key darkness

image.png

  1. 查看参与抽奖所有用户 SMEMBERS key

image.png

  1. 抽取count名中奖者 SRANDMEMBER key [count] / SPOP key [count]

image.png

应用2: 微博点赞, 收藏, 标签

  1. 点赞 SADD like:{微博id} darkness

image.png

  1. 取消点赞 SREM like:{微博id} darkness

image.png

  1. 检查用户是否点过赞 SISMEMBER like:{微博id} darkness

image.png

  1. 获取点赞用户列表 SMEMBERS like:{微博id}

image.png

  1. 获取点赞用户数 SCARD like:{微博id}

image.png

应用3: 集合操作实现共同关注/好友

  1. darkness的关注 like:darkness => {lily, mike, nancy, john, bob}

  2. lily的关注 like:lily => {darkness, mike, bob, mary}

image.png

  1. darkness和lily的共同关注 SINTERSTORE like:darkness:lily like:darkness like:lily

image.png

Zset

ZADD key score member [[score member]...]

往有序集合key中加入带分值元素

image.png

ZREM key member [member...]

从有序集合key中删除元素

image.png

ZSCORE key member

返回有序集合key中元素member的分值

image.png

ZINCRBY key increment member

为有序集合key中元素member的分值加上increment

返回增加后的分值

image.png

ZCARD key

返回有序集合key中元素个数

image.png

ZRANGE key start stop [withscores]

正序获取有序集合key下标从start到stop的元素

image.png

ZREVRANGE key start stop [withscores]

倒序获取有序集合key下标从start到stop的元素

image.png

ZUNIONSTORE destkey numkeys key [key...]

并集计算

发现不仅取了并集, 还把相同成员的分值相加了

image.png

ZINTERSTORE destkey numkeys key [key...]

交集运算

发现不仅取了交集, 还把相同成员的分值相加了

image.png

应用: 实现排行榜

  1. 点击新闻 ZINCRBY hotNews:20220315 1 重庆新冠

  2. 展示今日排行前十 ZREVRANGE hotNews:20220315 0 9 WITHSCORES

  3. 七日搜索榜单计算 ZUNIONSTORE hotNews:20220309-20220315 7 hotNews:20220315 hotNews:20220314 ... hotNews:20220309

  4. 展示七日排行前十 ZREVRANGE hotNews:20220309-20220315 0 9 withscores