视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
我目前使用redis的方式
2020-11-09 13:13:50 责编:小采
文档

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

下载本文
显示全文
专题