伪应用场景
从redis 5种数据结构 及使用场景分析
中我看到一些redis的应用场景,在其他储存例如mysql中也能轻易做到
在这竟然可以拿出来当成最佳实践,这已经是redis滥用者能举出来的稍微体面一点的例子了
字符串
- 缓存:有过期时间
list
- 消息队列
- 朋友圈的点赞列表、评论列表、排行榜:lpush命令和lrange命令能实现最新列表的功能,每次通过lpush命令往列表里插入新的元素,然后通过lrange命令读取最新的元素列表。
hash
- 对象:例如用户信息、购物车
set
- 好友、关注、粉丝、感兴趣的人集合:
- sinter命令可以获得a和b两个用户的共同好友;
- sismember命令可以判断a是否是b的好友;
- scard命令可以获取好友数量;
- 关注时,smove命令可以将b从a的粉丝集合转移到a的好友集合
首页展示随机:美团首页有很多推荐商家,但是并不能全部展示,set类型适合存放所有需要展示的内容,而srandmember命令则可以从中随机获取几个。
存储某活动中中奖的用户id ,因为有去重功能,可以保证同一个用户不会中奖两次。
- 好友、关注、粉丝、感兴趣的人集合:
zset
- zset 可以用做排行榜,但是和list不同的是zset它能够实现动态的排序,例如: 可以用来存储粉丝列表,value 值是粉丝的用户 id,score 是关注时间,我们可以对粉丝列表按关注时间进行排序。
- zset 还可以用来存储学生的成绩, value 值是学生的 id, score 是他的考试成绩。 我们对成绩按分数进行排序就可以得到他的名次。
以上这些,一定不足以为系统引入一个额外的依赖,因为这些例子,要么mysql也可以实现,要么redis无法单独实现(无法可靠持久化)
在我看来,redis在php-fpm应用中,是不可或缺的一种在不同请求间共享变量的利器,其价值不可否认。
但是在没有这种需求的时候,为系统引入一个非必要的依赖,实在不是明智之举。