redis实现朋友圈点赞
List类型
- 数据存储需求: 存储多个数据,并对数据进入存储空间的顺序进行区分
- 需要的存储结构:一个存储空间保存多个数据,且通过数据可以体现进入顺序
- list类型:保存多个数据,底层使用双向链表存储结构实现
基本操作
- 添加/修改数据
lpush key value1 [value2] ...
rpush key value1 [value2] ...
- 获取数据
lrange key start stop
# 获取所有
lrange key 0 -1
lindex key index
llen key
- 获取并移除数据
lpop key
rpop key
扩展操作
- 规定时间内获取并移除数据
blpop key1 [key2] timeout
brpop key1 [key2] timeout
业务场景
朋友圈点赞,要求按照点赞顺序显示点赞好友信息
如果取消点赞,移除对应好友信息
- 移除指定数据
lrem key count value
Trips 6:
- redis应用于具有操作先后顺序的数据控制
注意事项
- list中保存的数据都是string类型的,数据总容量是有限的,最多2^32-1个元素
- list具有索引的概念,但是操作数据时通常以队列的形式进行入队出队操作,或以栈的形式进行入栈出栈操作
- 获取全部数据操作结束索引设置为-1
- list可以对数据进行分页操作,通常第一页的信息来自于list,第二页及更多的信息通过数据库的形式加载
大概思路分析:
点赞用户列表可以用一个list里面按顺序存放着用户id,而用户的信息以json字符串的方式存在一个string中,当需要显示点赞用户名字列表,只需要读取id list 根据id找到用户名字,处理后即可获取.
当需要移除时可以将用户的id用lrem 去除, 至于如何避免重复点赞,可以增加一个set,set中存放点赞后的用户id,这样在进行rpush操作前先判断set中是否存在用户id,存在即以点赞过,否则未点赞.