时间:2021-07-01 10:21:17 帮助过:4人阅读
1.将redis的List用作队列,这个很轻量级,不用引入别的队列服务器,缺点是可能会丢失数据,因为其持久化方案是redis通用的aof或者rdb方式 2.将排好序的实体id放到LIST中,然后以prefix 实体id为key,用hashtable存储具体的实体信息 3.用ZSET存储排名和带有权
1.将redis的List用作队列,这个很轻量级,不用引入别的队列服务器,缺点是可能会丢失数据,因为其持久化方案是redis通用的aof或者rdb方式
2.将排好序的实体id放到LIST中,然后以prefix 实体id为key,用hashtable存储具体的实体信息
3.用ZSET存储排名和带有权重信息的一些实体id,缺点是内存占用太厉害了。
4.用hashtable做一些映射,例如username=>user_id等
5.set可以支持一些逻辑操作,但是排序的时间复杂度不佳,所以我选择了用list
6.set用来做唯一性验证,如果验证某个用户是否已经对某篇文章进行了赞的操作
7.使用redis用来优化内存hash-max-zipmap-entries等参数减少内存使用量
8.排序好的id也可以用string的getRange和setRange命令来实现顺序访问
用LIST不好的是其顺序已经确定,其删除操作耗时O(n),顺序查找并删除,而且不支持union inter等操作,这些操作可以模拟and 和or这两种关系操作。
暂时能想起的也就这么多了
主要的关注点是要自己建立索引,索引是对key的索引,然后通过key访问到value。这样就把访问简化为k=>v操作。复杂的sql都可以分解为redis的一些操作。
我能想到的应用场景:
高级缓存
计数器
布隆过滤器/简单权限(bit操作类型)
栈/队列/有优先权队列
锁/id generator缓存/短url缓存
SNS关系
mapreduce/漂流瓶/去重
timeline
索引/排行榜/最近N个
超时(比如验证)
聊天/订阅/notify
Session
通信中间件
原文出处:http://www.imsiren.com/archives/982