我目前使用redis的方式
作者 斯人 | 发布于 2014 年 4 月 24 日
Redis

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