最新公告
  • 新注册用户请前往个人中心绑定邮箱以便接收相关凭证邮件!!!点击前往个人中心
  • Redis(四)与比较Memcached、适用场景、数据淘汰策略、论坛系统分析

    与比较Memcached

    两者都是非关系型内存键值数据库。有以下主要不同:

    数据类型

    Memcached 仅支持字符串类型,而 Redis 支持五种不同种类的数据类型,使得它可以更灵活地解决问题。

    数据持久化

    Redis 支持两种持久化策略:RDB 快照和 AOF 日志,而 Memcached 不支持持久化。

    分布式

    Memcached 不支持分布式,只能通过在客户端使用像一致性哈希这样的分布式算法来实现分布式存储,这种方式在存储和查询时都需要先在客户端计算一次数据所在的节点。

    Redis Cluster 实现了分布式的支持。

    内存管理机制

    在 Redis 中,并不是所有数据都一直存储在内存中,可以将一些很久没用的 value 交换到磁盘。而 Memcached 的数据则会一直在内存中。

    Memcached 将内存分割成特定长度的块来存储数据,以完全解决内存碎片的问题,但是这种方式会使得内存的利用率不高,例如块的大小为 128 bytes,只存储 100 bytes 的数据,那么剩下的 28 bytes 就浪费掉了。

    Redis 适用场景

    缓存

    将热点数据放到内存中。

    消息队列

    List 类型是双向链表,很适合用于消息队列。

    计数器

    Redis 这种内存数据库能支持计数器频繁的读写操作。

    好友关系

    使用 Set 类型的交集操作很容易就可以知道两个用户的共同好友。

    数据淘汰策略

    可以设置内存最大使用量,当内存使用量超过时施行淘汰策略,具体有 6 种淘汰策略。

    策略 描述
    volatile-lru 从已设置过期时间的数据集中挑选最近最少使用的数据淘汰
    volatile-ttl 从已设置过期时间的数据集中挑选将要过期的数据淘汰
    volatile-random 从已设置过期时间的数据集中任意选择数据淘汰
    allkeys-lru 从所有数据集中挑选最近最少使用的数据淘汰
    allkeys-random 从所有数据集中任意选择数据进行淘汰
    no-envicition 禁止驱逐数据

    如果使用 Redis 来缓存数据时,要保证所有数据都是热点数据,可以将内存最大使用量设置为热点数据占用的内存量,然后启用 allkeys-lru 淘汰策略,将最近最少使用的数据淘汰。

    作为内存数据库,出于对性能和内存消耗的考虑,Redis 的淘汰算法(LRU、TTL)实际实现上并非针对所有 key,而是抽样一小部分 key 从中选出被淘汰 key。抽样数量可通过 maxmemory-samples 配置。

    论坛系统分析

    该论坛系统功能如下:

    – 可以发布文章;
    – 可以对文章进行点赞;
    – 在首页可以按文章的发布时间或者文章的点赞数进行排序显示;

    文章信息

    文章包括标题、作者、赞数等信息,在关系型数据库中很容易构建一张表来存储这些信息,在 Redis 中可以使用 HASH 来存储每种信息以及其对应的值的映射。

    Redis 没有关系型数据库中的表这一概念来将同类型的数据存放在一起,而是使用命名空间的方式来实现这一功能。键名的前面部分存储命名空间,后面部分的内容存储 ID,通常使用 : 来进行分隔。例如下面的 HASH 的键名为 article:92617,其中 article 为命名空间,ID 为 92617。

    点赞功能

    当有用户为一篇文章点赞时,除了要对该文章的 votes 字段进行加 1 操作,还必须记录该用户已经对该文章进行了点赞,防止用户点赞次数超过 1。可以建立文章的已投票用户集合来进行记录。

    为了节约内存,规定一篇文章发布满一周之后,就不能再对它进行投票,而文章的已投票集合也会被删除,可以为文章的已投票集合设置一个一周的过期时间就能实现这个规定。

    对文章进行排序

    为了按发布时间和点赞数进行排序,可以建立一个文章发布时间的有序集合和一个文章点赞数的有序集合。(下图中的 score 就是这里所说的点赞数;下面所示的有序集合分值并不直接是时间和点赞数,而是根据时间和点赞数间接计算出来的)

    参考资料

    – Carlson J L. Redis in Action[J]. Media.johnwiley.com.au, 2013.
    – 黄健宏. Redis 设计与实现 [M]. 机械工业出版社, 2014.
    – [REDIS IN ACTION](https://redislabs.com/ebook/foreword/)
    – [论述 Redis 和 Memcached 的差异](http://www.cnblogs.com/loveincode/p/7411911.html)
    – [Redis 3.0 中文版- 分片](http://wiki.jikexueyuan.com/project/redis-guide)
    – [Redis 应用场景](http://www.scienjus.com/redis-use-case/)
    – [Observer vs Pub-Sub](http://developers-club.com/posts/270339/)

    本站所有文章均由网友分享,仅用于参考学习用,请勿直接转载,如有侵权,请联系网站客服删除相关文章。若由于商用引起版权纠纷,一切责任均由使用者承担
    极客文库 » Redis(四)与比较Memcached、适用场景、数据淘汰策略、论坛系统分析

    常见问题FAQ

    如果资源链接失效了怎么办?
    本站用户分享的所有资源都有自动备份机制,如果资源链接失效,请联系本站客服QQ:2580505920更新资源地址。
    如果用户分享的资源与描述不符怎么办?
    可以联系客服QQ:2580505920,如果要求合理可以安排退款或者退赞助积分。
    如何分享个人资源获取赞助积分或其他奖励?
    本站用户可以分享自己的资源,但是必须保证资源没有侵权行为。点击个人中心,根据操作填写并上传即可。资源所获收益完全归属上传者,每周可申请提现一次。
    如果您发现了本资源有侵权行为怎么办?
    及时联系客服QQ:2580505920,核实予以删除。

    参与讨论

    • 169会员总数(位)
    • 3735资源总数(个)
    • 1本周发布(个)
    • 0 今日发布(个)
    • 443稳定运行(天)

    欢迎加入「极客文库」,成为原创作者从这里开始!

    立即加入 了解更多
    成为赞助用户享有更多特权立即升级