Redis数据结构&常用命令
2021-02-04 17:18:23 1 举报
AI智能生成
Redis数据结构&常用命令
作者其他创作
大纲/内容
字符串-string
命令
全局命令
选择数据库 select dbindex 默认16个数据库:0-15 默认是0库
清除数据库 flusdb 清除当前数据库/flushall清除所有数据库
重命名 rename key newkey renamenx key newkey 只有newkey不存在时才会被覆盖
检查键是否存在 exists key 存在返回1,不存在返回0
批量存入字符串键值对 mset key value key value [key value]
dbsize 查询键总数,直接获取redis内置的键总数变量
keys * 查询所有的键,会遍历所有的键值
原子加减常用命令
key中存储的数值+1 incr key
key中存储的数值-1 decr key
key中存储的数值加上一个值[数字] incrby key increment
key中存储的数值减去一个值[数字] decrby key increment
字符串常用操作命令
设置字符串键值对 set key value
获取键值对值 get key
删除键值对 del key
设置一个过期的时间 expire key seconds
批量存入字符串键值对 mset key value key value [key value]
设置一个不存在的键值对(已存在的键值对设置返回0-失败) setnx key value
批量获取字符串键值 (不存在的key返回nil )mget key[key]
应用场景
单值缓存
设置值:set key value 获取值:get key
对象缓存
设置值:set user:1001 value(json格式数据) 获取值:get key
设置值:mset user:1:name zhuge user:1:balance 1888 获取值:keys user:1*
分布式锁
setnx product:10001 true //返回1代表获取锁成功
setnx product:10001 true //返回0代表获取锁失败
TODO 执行业务操作
del product:10001 //执行完业务释放锁
set product:10001 true ex 10 nx //防止程序意外终止导致死锁
setnx product:10001 true //返回0代表获取锁失败
TODO 执行业务操作
del product:10001 //执行完业务释放锁
set product:10001 true ex 10 nx //防止程序意外终止导致死锁
计数器
文章阅读量 INCR article:readcount:{文章id} GET article:readcount:{文章id}
web集群session共享
spring session + redis实现session共享
分布式系统全局序列号-不推荐
哈希-hash
常用命令
存储一个哈希表key的键值 hset key field value
存储一个不存在的哈希表key的键值 hsetnx key field value
在一个哈希表key中存储多个键值对 hmset key field value [field value ...]
获取哈希表key对应的field键值 hget key field
批量获取哈希表key中多个field键值 hmget key field [field ...]
删除哈希表key中的field键值 hdel key field [field ...]
返回哈希表key中field的数量 hlen key
返回哈希表key中所有的键值 hgetall key
哈希表key中field键的值加上增量increment hincby key field increment
获取所有的field hkeys key
获取所有的value hvals key
获取所有的field&value hgetall key
应用场景
对象缓存
购物车
设计
以用户id为key
商品id为field
商品数量为value
具体操作
添加商品 hset cart:1001 10088 1
增加数量 hincrby cart:1001 10088 1
商品总数 hlen cart:1001
删除商品 hdel cart:1001 10088
获取购物车所有商品 hgetall cart:1001
优缺点
优点
同类数据归类整合储存,方便数据管理
相比string操作消耗内存与cpu更小
相比string储存更节省空间
缺点
过期功能不能使用在field上,只能用在key上
Redis集群架构下不适合大规模使用
列表-list
常用命令
将一个或多个值value插入到key列表的表头(最左边) LPUSH key value [value ...]
将一个或多个值value插入到key列表的表尾(最右边) RPUSH key value [value ...]
移除并返回key列表的头元素 LPOP key
移除并返回key列表的尾元素 RPOP key
返回列表key中指定区间内的元素,区间以偏移量start和stop指定 LRANGE key start stop
从key列表表头弹出一个元素,若列表中没有元素,阻塞等待 timeout秒,如果timeout=0,一直阻塞等待 BLPOP key [key ...] timeout
从key列表表尾弹出一个元素,若列表中没有元素,阻塞等待 timeout秒,如果timeout=0,一直阻塞等待 BRPOP key [key ...] timeout
应用场景
集合-set
常用命令
往集合key中存入元素,元素存在则忽略,若key不存在则新建 sadd key member [member ...]
从集合key中删除元素 srem key member [member ...]
获取集合key中所有元素 smembers key
获取集合key的元素个数 scard key
判断member元素是否存在于集合key中 sismember key menber
判断member元素是否存在于集合key中
从集合key中选出count个元素,元素不从key中删除 srandmember key [count]
从集合key中选出count个元素,元素从key中删除 spop key [count]
运算命令
交集运算SINTER key [key ...]
将交集结果存入新集合destination中 SINTERSTORE destination key [key ..]
并集运算 SUNION key [key ..]
将并集结果存入新集合destination中 SUNIONSTORE destination key [key ...]
差集运算 SDIFF key [key ...]
将差集结果存入新集合destination中 SDIFFSTORE destination key [key ...]
应用场景
微信抽奖小程序
点击参与抽奖加入集合 sadd key {userID}
查看参与抽奖所有用户 smenbers key
抽取count名中奖者 srandmember key [count]或者spop key [count]
微信微博点赞,收藏,标签
点赞 - SADD like:{消息ID} {用户ID}
取消点赞 - SREM like:{消息ID} {用户ID}
检查用户是否点过赞 - SISMEMBER like:{消息ID} {用户ID}
获取点赞的用户列表 - SMEMBERS like:{消息ID}
获取点赞用户数 - SCARD like:{消息ID}
集合操作实现微博微信关注模型
1) 诸葛老师关注的人:
zhugeSet-> {guojia, xushu}
2) 杨过老师关注的人:
yangguoSet--> {zhuge, baiqi, guojia, xushu}
3) 郭嘉老师关注的人:
guojiaSet-> {zhuge, yangguo, baiqi, xushu, xunyu)
4) 我和杨过老师共同关注:
SINTER zhugeSet yangguoSet--> {guojia, xushu}
5) 我关注的人也关注他(杨过老师):
SISMEMBER guojiaSet yangguo
SISMEMBER xushuSet yangguo
6) 我可能认识的人:
SDIFF yangguoSet zhugeSet->(zhuge, baiqi}
zhugeSet-> {guojia, xushu}
2) 杨过老师关注的人:
yangguoSet--> {zhuge, baiqi, guojia, xushu}
3) 郭嘉老师关注的人:
guojiaSet-> {zhuge, yangguo, baiqi, xushu, xunyu)
4) 我和杨过老师共同关注:
SINTER zhugeSet yangguoSet--> {guojia, xushu}
5) 我关注的人也关注他(杨过老师):
SISMEMBER guojiaSet yangguo
SISMEMBER xushuSet yangguo
6) 我可能认识的人:
SDIFF yangguoSet zhugeSet->(zhuge, baiqi}
集合操作实现电商商品筛选
SADD brand:huawei P40
SADD brand:xiaomi mi-10
SADD brand:iPhone iphone12
SADD os:android P40 mi-10
SADD cpu:brand:intel P40 mi-10
SADD ram:8G P40 mi-10 iphone12
SINTER os:android cpu:brand:intel ram:8G {P40,mi-10}
SADD brand:xiaomi mi-10
SADD brand:iPhone iphone12
SADD os:android P40 mi-10
SADD cpu:brand:intel P40 mi-10
SADD ram:8G P40 mi-10 iphone12
SINTER os:android cpu:brand:intel ram:8G {P40,mi-10}
有序集合-zset
常用命令
往有序集合key中加入带分值元素 ZADD key score member [[score member]…]
从有序集合key中删除元素 ZREM key member [member …]
返回有序集合key中元素member的分值 ZSCORE key member
为有序集合key中元素member的分值加上increment ZINCRBY key increment member
返回有序集合key中元素个数 ZCARD key
正序获取有序集合key从start下标到stop下标的元素 ZRANGE key start stop [WITHSCORES]
倒序获取有序集合key从start下标到stop下标的元素 ZREVRANGE key start stop [WITHSCORES]
并集计算 ZUNIONSTORE destkey numkeys key [key ...]
交集计算 ZINTERSTORE destkey numkeys key [key …]
应用场景
实现排行榜
1)点击新闻
ZINCRBY hotNews:20190819 1 守护香港
2)展示当日排行前十
ZREVRANGE hotNews:20190819 0 9 WITHSCORES
3)七日搜索榜单计算
ZUNIONSTORE hotNews:20190813-20190819 7
hotNews:20190813 hotNews:20190814... hotNews:20190819
4)展示七日排行前十
ZREVRANGE hotNews:20190813-20190819 0 9 WITHSCORES
ZINCRBY hotNews:20190819 1 守护香港
2)展示当日排行前十
ZREVRANGE hotNews:20190819 0 9 WITHSCORES
3)七日搜索榜单计算
ZUNIONSTORE hotNews:20190813-20190819 7
hotNews:20190813 hotNews:20190814... hotNews:20190819
4)展示七日排行前十
ZREVRANGE hotNews:20190813-20190819 0 9 WITHSCORES
收藏
0 条评论
下一页