Try Redis
SET key value
GET key
SET user:1 value(json 个数数据)
MSET user:1:name zhangsan user:1:balance 123 ;
MGET user:1:name user:1:balance;
SETNX product:100 true // 返回1 代表获取锁成功
SETNX product:100 true // 返回0 代表获取锁失败
DEL product:100 // 执行万业务释放锁
SET product:100 true ex 10 nx // 防止程序意外终止导致死锁
INCR article:readcount:{文章id}
GET article:readcount:{文章id}
INCRBY orderId 100 // Redis 批量生成序列号 提升性能
HSET key field value // 存储一个哈希表key的键值
HSETNX key field value // 存储一个不存在的哈希表key的键值对
HMSET key field value [field value …] // 在一个哈希表key 中存储多个键值对
HGET key field // 获取哈希表 key 对应的field 键值
HMGET key field [field …] // 批量获取哈希表 key中多个field键值
HDEL key field [field …] // 删除哈希表key中的field 键值
HLEN key // 返回哈希表key中的field的数量
HGETALL key // 返回哈希表 key 中所有的键值
HINCRBY key field increment // 为哈希表 key 中field 键的值加上增量increment
HMSET user {userId}:name zhangsan {userId}:balace 1688
HMSET user 1:name zhangsan 1:balance 1688
HMGET user 1:name 1:balance
HMGET user 1:name 1:balance
1) "zhangsan"
2) "1688"
电商购物车
以用户id为key , 商品id 为 field , 商品数量 为 value
购物车操作:
添加商品: hset cart:100 1688 1
增加数量: hincrby cart:100 1688 1
商品总数: hlen cart:100
删除商品: hdel cart:100 1688
获取购物车所有商品 : hgetall cart:100
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GVSapf54-1681284837386)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230331215232436.png)]
LPUSH key value [value …] // 将一个或多个值value 插入到key 列表的标头 (最左边)
RPUSH key value [value …] // 将一个或多个值value 插入到key 列表的标头 (最右边)
LPOP key // 移除并返回 key 列表的头元素
RPOP key // 移除并返回 key列表的尾元素
LRANGE key start stop // 返回列表key 中指定区间的元素,区间以偏移量start 和 stop 指定
BLPOP key [key …] timeout // 从 key 列表表头弹出一个元素,若列表中没有元素,阻塞等待 timeout 秒,如果timeout=0, 一直阻塞等待
BRPOP key [key …] timeout // 从 key 列表表尾弹出一个元素,若列表中没有元素,阻塞等待 timeout 秒,如果timeout=0, 一直阻塞等待
常用数据结构
Stack(栈) = LPUSH + LPOP = FILO
Queue(队列) = LPUSH + RPOP
Blocking MQ(阻塞队列) = LPUSH + BRPOP
应用 : 微博 微信公众号消息流
张三关注了 嘟嘟 哈哈 等大V
嘟嘟发布公众号 ,消息ID 为 110
LPUSH msg:{张三-ID} 110
哈哈发布公众号,消息ID 为 120
LPUSH msg:{张三-ID} 120
查看最新公众号消息
LRANGE msg:{张三-ID} 0 4
> LPUSH msg:1 110
(integer) 1
> LPUSH msg:1 120
(integer) 2
> LRANGE msg:1 0 4
1) "120"
2) "110"
SADD key member [member …] // 往集合key中存入元素,元素存在则忽略,若key 不存在则新建
SREM key member [member …] // 从集合key中删除元素
SMEMBERS key // 获取集合key 中的所有元素
SCARD key // 获取集合key中所有元素个数
SISMEMBER key member // 判断member 元素是否存在于集合 key 中
SRANDMEMBER key [count] // 从集合key中选出count个元素,元素不从key中删除
STOP key [count] // 从集合key中选出count个元素,元素从key中删除
SET 运算操作
SINTER key [key …] // 交集运算
SINTERSTORE destination key [key …] // 将交集结果存入新集合 destination中
SUNION key [key …] // 并集运算
SUNIONSTORE destination key [key…] // 将并集结果存入新集合 destination中
SDIFF key [key…] // 差集运算
SDIFFSTORE destination key [key…] // 将差集结果存入新集合 destination中
SADD key {userId}
插卡参与抽奖所有用户
SMEMBERS key
抽取 count 命中中奖者
SRANDMEMBER key [count] // 可重复抽奖
SPOP key [count] // 只可以参与一次抽奖
> sadd act:100 1
(integer) 1
> sadd act:100 2
(integer) 1
> sadd act:100 3
(integer) 1
> sadd act:100 4
(integer) 1
> sadd act:100 5
(integer) 1
> SMEMBERS key
SMEMBERS act:100
SRANDMEMBER act:100 2
SRANDMEMBER act:100 2
1) “5”
SPOP act:100 2
SPOP act:100 2
1) “4”
SPOP act:100 2
#### 4. 微信点赞 收藏 标签
1. 点赞
SADD like:{消息ID} {用户ID}
2. 取消点赞
SREM like:{消息ID} {用户ID}
3. 检查用户是否点过赞
SISMEMBER like:{消息ID} {用户ID}
4. 获取点赞的用户列表
SMEMBERS like:{消息ID}
5. 获取点赞用户数
SCARD like:{消息ID}
~~~sql
SADD like:100 1
(integer) 1
SADD like:100 2
(integer) 1
SADD like:100 3
(integer) 1
SADD like:100 4
(integer) 1
SADD like:100 5
(integer) 1
SREM like:100 1
1
SISMEMBER like:100 1
(integer) 0
SISMEMBER like:100 2
(integer) 1
SMEMBERS like:100
SCARD like:100
4
#### 5. 集合操作实现微博微信关注模型
共同关注了 xxx
我关注的人也关注了 他 xxx
我可能认识的人:
~~~sql
# zhangsan 关注的人
> sadd zhangsanSet 1isi wangwu zhaoliu
(integer) 3
# lisi 关注的人
> sadd 1isiSet wangwu zhaoliu zhangsan
(integer) 3
# wangwu 关注的人
> sadd wangwuSet zhaoliu zhangsan dudu haha
(integer) 4
# zhangsan 和 lisi 共同关注
> SINTER zhangsanSet 1isiSet
1) "zhaoliu"
2) "wangwu"
# zhangsan 关注的人也关注他
> SISMEMBER zhangsanSet "1isi"
(integer) 1
> SISMEMBER wangwuSet "1isi"
(integer) 0
# 我可能认识的人
> SDIFF zhangsanSet wangwuSet
1) "1isi"
2) "wangwu"
> SDIFF zhangsanSet wangwuSet lisiSet
1) "1isi"
2) "wangwu"
ZSet 常用操作
ZADD key score member [[score member] …] // 往有序集合key中加入带分值元素
ZREM key member [member …] // 从有序集合key中删除元素
ZSCORE key member // 返回有序集合key中元素member的分值
ZINCRBY key increment member // 为有序集合key中元素member的分值加上 increment
ZCARD key // 返回有序集合key中元素个数
ZRANGE key start stop [WITHSCORES] // 正序获取有序集合key从start下标到stop下标的元素
ZREVRANGE key start start stop [WITHSCORES] // 倒序获取有序集合key从start下标到stop下标的元素
Zset 集合操作
ZUNIONSTORE destkey numkeys key [key …] // 并集计算
ZINTERSTORE destkey numkeys key [key …] // 交集计算
ZSet 集合操作实现排行榜
点击新闻
ZINCRBY hotNews:20230401 1 总理记者会
展示当日排行前十
ZREVRANGE hotNews:20230401 0 9 WITHSCORES
七日搜索排行榜单计算
ZUNIONSTORE hotNews:20230325-20230401 7 hotNews:20230325 hotNews:20230326 … 20230401
展示七日排行前十
ZREVRANGE hotNews:20230325-20230401 0 9 WITHSCORES
ZSet 集合操作实现排行榜
1. 点击新闻
ZINCRBY hotNews:20230401 1 总理记者会
2. 展示当日排行前十
ZREVRANGE hotNews:20230401 0 9 WITHSCORES
3. 七日搜索排行榜单计算
ZUNIONSTORE hotNews:20230325-20230401 7 hotNews:20230325 hotNews:20230326 ... 20230401
4. 展示七日排行前十
ZREVRANGE hotNews:20230325-20230401 0 9 WITHSCORES