Redis内存数据库笔记( 二 )


Redis内存数据库笔记

文章插图
 
文章列表:每个用户都有属于自己的文章列表,现在需要分页展示文章列表,此时可以考虑使用列表,列表不但有序,同时支持按照索引范围获取元素 。
使用技巧:
  • lpush+lpop=Stack(栈)
  • lpush+rpop=Queue(队列)
  • lpush+ltrim=CApped Collection(有限集合)
  • lpush+brpop=Message Queue(消息队列)
4.Set (集合)
集合类型也是用来保存多个字符串的元素,但和列表不同的是集合中不允许有重复的元素,并且集合中的元素是无序的,不能通过索引下标获取元素,redis除了支持集合内的增删改查,同时还支持多个集合取交集、并集、差集,并合理的使用好集合类型,能在实际开发中解决很多实际问题 。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1) 。
集合中最大的成员数为 232 - 1(4294967295, 每个集合可存储40多亿个成员) 。
  • 使用实例:
redis 127.0.0.1:6379> sadd runoob redis(integer) 1redis 127.0.0.1:6379> sadd runoob mongodb(integer) 1redis 127.0.0.1:6379> sadd runoob rabitmq(integer) 1redis 127.0.0.1:6379> sadd runoob rabitmq(integer) 0redis 127.0.0.1:6379> smembers runoob1) "redis"2) "rabitmq"3) "mongodb"复制代码
  • 使用场景
标签(tag):集合类型比较典型的使用场景,如一个用户对娱乐、体育比较感兴趣,另一个可能对新闻感兴 趣,这些兴趣就是标签,有了这些数据就可以得到同一标签的人,以及用户的共同爱好的标签,这些数据对于用户体验以及曾强用户粘度比较重要 。(用户和标签的关系维护应该放在一个事物内执行,防止部分命令失败造成数据不一致)
其他
sadd=tagging(标签)
spop/srandmember=random item(生成随机数,比如抽奖)
sadd+sinter=social Graph(社交需求)
5.Zset(sorted set:有序集合)
有序集合和集合有着必然的联系,他保留了集合不能有重复成员的特性,但不同得是,有序集合中的元素是可以排序的,但是它和列表的使用索引下标作为排序依据不同的是,它给每个元素设置一个分数,作为排序的依据 。(有序集合中的元素不可以重复,但是csore可以重复,就和一个班里的同学学号不能重复,但考试成绩可以相同) 。
  • 使用实例
redis 127.0.0.1:6379> zadd runoob 0 redis(integer) 1redis 127.0.0.1:6379> zadd runoob 0 mongodb(integer) 1redis 127.0.0.1:6379> zadd runoob 0 rabitmq(integer) 1redis 127.0.0.1:6379> zadd runoob 0 rabitmq(integer) 0redis 127.0.0.1:6379> > ZRANGEBYSCORE runoob 0 10001) "mongodb"2) "rabitmq"3) "redis"复制代码
  • 使用场景
排行榜:有序集合经典使用场景 。例如视频网站需要对用户上传的视频做排行榜,榜单维护可能是多方面:按照时间、按照播放量、按照获得的赞数等 。
  • 不同类型比较

Redis内存数据库笔记

文章插图
 
五、发布与订阅功能
redis提供了“发布、订阅”模式的消息机制,其中消息订阅者与发布者不直接通信,发布者向指定的频道(channel)发布消息,订阅该频道的每个客户端都可以接收到消息 。
Redis内存数据库笔记

文章插图
 
redis主要提供发布消息、订阅频道、取消订阅以及按照模式订阅和取消订阅 。
1.发布与订阅命令
  • 发布消息
publish channel:test "hello world复制代码
  • 订阅消息
subscrible channel:test复制代码
  • 查看订阅数
pubsub numsub channel:test复制代码
  • 取消订阅
unsubscribe channel:test复制代码
  • 按模式订阅和按模式取消订阅
psubscribe ch* punsubscribe ch*复制代码2.使用场景
  • 1、今日头条订阅号、微信订阅公众号、新浪微博关注、邮件订阅系统
  • 2、即使通信系统
  • 3、群聊部落系统(微信群)
六、 Redis持久化
redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到磁盘来保证持久化,持久化可以避免因进程退出而造成数据丢失 。
Redis内存数据库笔记

文章插图
 
1.持久化方式
RDB持久化把当前进程数据生成快照(.rdb)文件保存到硬盘的过程,有手动触发和自动触发 。


推荐阅读