Redis常用场景:
缓存
常用String类型
例如:对热点数据进行缓存,全页查询缓存,可以提升热点数据的访问稳定性和访问速度
数据共享分布式
常用String类型
redis是分布式的独立服务,可以在多个应用之间共享数据
例如:分布式session
分布式锁
常用setnx方法进行设置,只有在不存在时才会添加成功
public static boolean getLock(String key) {Long flag = jedis.setnx(key, "1");if (flag == 1) {jedis.expire(key, 10);}return flag == 1;}public static void releaseLock(String key) {jedis.del(key);}
全局 ID
常用int类型,使用incrby,利用原子性
例如:分库分表的场景,一次取出一段
incrby userid 1000
计数器
常用int类型,使用incr方法
例如:文章的访问量,微博点赞量,允许一定时间的延迟,先写入redis,再延时同步到数据库
限流
常用int类型,incr方法
以访问者的ip和其他信息作为key,访问一次增加一次计数,超过次数则返回false
位统计
常用String类型,bitcount
字符是以8位二进制的形式进行存储
set k1 asetbit k1 6 1setbit k1 7 0get k1/* 6 7 代表的a的二进制位的修改a 对应的ASCII码是97,转换为二进制数据是01100001b 对应的ASCII码是98,转换为二进制数据是01100010因为 bit 非常节省空间(1 MB=8388608 bit),可以用来做大数据量的统计。*/
例如:在线用户的统计,留存用户的统计
setbit onlineusers 01setbit onlineusers 11setbit onlineusers 20
支持按位与,按位或等操作
BITOPANDdestkeykey[key...] ,对一个或多个 key 求逻辑并,并将结果保存到 destkey 。BITOPORdestkeykey[key...] ,对一个或多个 key 求逻辑或,并将结果保存到 destkey 。BITOPXORdestkeykey[key...] ,对一个或多个 key 求逻辑异或,并将结果保存到 destkey 。BITOPNOTdestkeykey ,对给定 key 求逻辑非,并将结果保存到 destkey 。
计算出7天在线的用户
BITOP "AND" "7_days_both_online_users" "day_1_online_users" "day_2_online_users" ... "day_7_online_users"
购物车
常用String或者hash,所有String能实现的功能hash都可以实现
对一个商品的属性进行指定编码格式例如:key:用户idfield:商品idvalue:商品数量hincr:+1hdecr:-1hdel:删除hgetall:全选hlen:商品数
用户消息时间线 timeline
消息队列
常用list,使用其中的两个阻塞的弹出操作:blpop和brpop,可以设置超时时间
- blpop:blpop key1 timeout 移除并获取列表的第一个元素,如果列表没有元素会阻塞直到超时或者发现可弹出元素为止
- brpop:brpop key2 timeout 移除并获取列表的最后一个元素,如果列表没有元素,会阻塞到超时或者发现可弹出元素为止
可以根据这两个方法实现两种Java的数据结构
栈和队列
- 栈:先进后出 rpush和brpop
- 队列:先进先出 rpush和blpop
抽奖
redis获得随机值spop myset
点赞、签到、打卡
常用string
点赞的操作为:点赞,取消点赞,是否点赞,查看点赞用户,查看点赞数
假如微博 ID 是 t1001,用户 ID 是 u3001。
用 like:t1001 来维护 t1001 这条微博的所有点赞用户
点赞了这条微博:sadd like:t1001 u3001
取消点赞:srem like:t1001 u3001
是否点赞:sismember like:t1001 u3001
点赞的所有用户:smembers like:t1001
点赞数:scard like:t1001
商品标签
常用list
直接存储即可
- sadd tags:i5001 画面清晰细腻
- sadd tags:i5001 真彩清晰显示屏
- sadd tags:i5001 流程至极
商品筛选
常用set
可以获取set集合的差集,交集,并集以进行筛选// 获取差集sdiff set1 set2// 获取交集(intersection )sinter set1 set2// 获取并集sunion set1 set2
用户关注、推荐模型
常用set,使用差集,交集,并集进行推荐查看 ```java follow 关注 fans 粉丝。
相互关注:
sadd 1:follow 2
sadd 2:fans 1
sadd 1:fans 2
sadd 2:follow 1
我关注的人也关注了他(取交集):
sinter 1:follow 2:fans 可能认识的人:
用户 1 可能认识的人(差集):sdiff 2:follow 1:follow
用户 2 可能认识的人:sdiff 1:follow 2:follow
<a name="JeX2H"></a>### 排行榜常用int或者bit运算```javaid 为 6001 的新闻点击数加 1:zincrby hotNews:20190926 1 n6001获取今天点击最多的 15 条:zrevrange hotNews:20190926 0 15 withscores
