Redis常用命令以及应用场景

标签:

本文出自jvm123.com-java技术分享站:http://jvm123.com/2020/04/redis-chang-yong.html

如果存储序已经列化的对象,可以使用如下格式的key

​ User::id::{id} 

缓存

1.可用来缓存对象,将对象序列化为字符串后,使用格式如User::id::{id}的key存储获取。可使用到命令:

SET key value [EX seconds] [PX milliseconds] [NX|XX]
GET key

例如:

SET User::id::0001 {"id": 0001, "name": "yawn", "age": 18}

2.如果不序列化对象,也可以使用redis的hash类型进行存储和获取:

HSET key field value
HGET key field

key 依然使用User::id::{id}的格式,如下:

HSET User::id::0001 id 0001;
HSET User::id::0001 name yawn;
HSET User::id::0001 age 18;

分布式锁

可使用如下命令实现分布式锁:

SETNX key value; # 获取锁
EXPIRE key seconds; # 设置持有锁的最大时间
DEL key; # 释放锁

SETNX 在key不存在时才能设置成功,可以用来实现分布式锁。

计数器

实现浏览量、点击量计数器,value时数值类型,可以进行增减运算。

SET key value
INCR key # 计数器加1
DECR key # 计数器减一
INCRBY key increment
DECRBY key decrement
GET key # 获取计数

INCR可使value自增1,并返回。

分布式全局序列

分布式全局序列,即产生多个应用中不重复的序列,例如uuid等,也可以用redis实现。

SET key value
INCR key # 获取一个序列
INCRBY key increment # 获取多个序列

可将value设置为数值型,然后每次获取时自增即可。

随机抽奖

随机抽奖可以使用set类型实现。

SPOP key [count] # 随机移除并返回集合中count个值
SRANDMEMBER key [count] # 同上,但不移除

用户点赞、签到

用户点赞、签到功能的实现,可将点赞的用户放到同一个set中。

SADD key number [member ...] # 点赞
SCARD key # 返回点赞的数量
SISMEMBER key member # 某用户是否点赞
SMEMBERS key # 返回所有成员

共同好友功能

共同好友功能,将A和B两个用户的好友分别使用两个set存储,则可以通过关系运算,计算出好友之间的关系。

SUNION key [key ...] # 多个集合的并集
SUNIONSTORE destination key [key ...] # 多个集合的并集并存储在destination中
SINTER key [key ...] # 交集
SINTERSTORE destination key [key ...]
SDIFF key [key ...] # 差集
SDIFFSTORE destionation key [key ...]

例如:

SUNION key [key ...] # 
SINTER key [key ...] # 共同好友
SDIFF key [key ...] # 可能认识的人

用户消息列表

用户消息列表,给每个用户维护一个未读消息的列表,阅读之后就移出去。

LPUSH key value [value ...] # 将多个值依次插入到表头
LRANGE key start stop # 返回start和stop之间的元素
LLEN key # 返回list的长度
RPUSH key value [value ...]
RPOP key

新闻热度排行

使用zset做新闻热度排行榜,score为某新闻关键词的热度。

zincrby key 1 # 热度增加1
zrevrange key 0 10 withscores # 获取索引区间内的元素(热度排行前十)
zrevrangebyscore key 999 100 withscores # 获取分数区间内的元素,格式是zrevrangebyscore zset的key 终止score 起始score

发表评论