快捷搜索:

Redis缓存常用4种策略原理详解

Redis缓存常用4种策略原理详解

  我们都知道,提高系统性能的最简单也最流行的方法之一其实就是使用缓存。我们引入缓存,相当于对数据进行了复制。每当系统数据更新时,保持缓存和数据源(如 MySQL 数据库)同步至关重要,当然,这也取决于系统本身的要求,看系统是否允许一定的数据延迟。

  Cache-Aside可能是最常用的缓存策略。在这种策略下,应用程序(Application)会与缓存(Cache)和数据源(Data Source)进行通信,应用程序会在命中数据源之前先检查缓存。如下图所示:

  如果数据在缓存中,也即 Cache hit ,称作“缓存命中”。数据直接从缓存中读取并返回给客户端应用程序;

  如果数据不在缓存中,也即 Cache miss,称作“缓存未命中”。应用程序会从数据存储的地方,如 MySQL 数据源中读取该数据,并将数据存储在缓存中,然后将其返回给客户端。

  Cache-Aside策略特别适合“读多”的应用场景。使用Cache Aside策略的系统可以在一定程度上抵抗缓存故障。如果缓存服务发生故障,系统仍然可以通过直接访问数据库进行操作。

  然而,这种策略并不能保证数据存储和缓存之间的一致性,需要配合使用其它策略来更新或使缓存无效。另外,首次请求数据时,总是会导致缓存未命中,这种情况下需要额外的时间来将数据加载到缓存中。为了解决这个问题,开发人员可以通过手动触发查询操作来对数据进行“预热”。

  在上面的Cache-Aside策略中,应用程序需要与缓存和数据源“打交道”,而在Read-Through策略下,应用程序无需管理数据源和缓存,只需要将数据源的同步委托给缓存提供程序Cache Provider即可。所有数据交互都是通过抽象缓存层完成的。

  在进行大量读取时,Read-Through可以减少数据源上的负载,也对缓存服务的故障具备一定的弹性。如果缓存服务挂了,则缓存提供程序仍然可以通过直接转到数据源来进行操作。

  然而,首次请求数据时,总是会导致缓存未命中,并需要额外的时间来将数据加载到缓存中,相信大家都知道怎么处理了吧,还是“缓存预热”的老套路。

  Read-Through适用于多次请求相同数据的场景。这与Cache-Aside策略非常相似,但是二者还是存在一些差别,这里再次强调一下:

  可能你已经听说过Redis 中嵌入了脚本语言,但是你还没有亲自去尝试吧? 这个入门教程会让你学会在你的Redis 服务器上使用强大的lua语言。Hello, Lua!我们的第一个Redis Lua 脚本仅仅返回一个字符串,而不会去与redis 以任何有意义...查看详情

  从mysql搬一个大表到redis中,你会发现在提取、转换或是载入一行数据时,速度慢的让你难以忍受。这里我就要告诉一个让你解脱的小技巧。使用“管道输出”的方式把mysql命令行产生的内容直接传递给redis-cli,以绕过“中间件”的方式使两者在进行数据操作时达到最佳...查看详情

  概述装了redis有一段时间了,每次运行的时候都需要手动在命令行里启动redis,而且窗口不能关闭,感觉很麻烦,所以就想把redis设置为开机启动。由于google打不开(伟大的GFW啊),所以百度了几篇文章,照着教程一步一步做还是没有成功,怪自己太笨了。这两天自己搭建了一个VP...查看详情

  本文介绍redis排序命令redis支持对list,set,sorted set元素的排序sort 排序命令格式: sort key [BY pattern] [LIMIT start count] [GET pattern] [ASCDESC] [ALPHA] [STORE ...查看详情

  Redis中双链表实现的基本结构:1.节点结构typedef struct listNode { struct listNode *prev; //前向节点 struct listNode *next; //后向节点 void *value; //该节点的值} ...查看详情

  sds 的用途Sds 在 Redis 中的主要作用有以下两个:实现字符串对象(StringObject);在 Redis 程序内部用作 char* 类型的替代品;以下两个小节分别对这两种用途进行介绍。实现字符串对象Redis 是一个键值对数据库(key-value DB), 数据...查看详情

  这篇文章主要介绍了利用Redis实现SQL伸缩的方法,包括讲到了锁和时间序列等方面来提升传统数据库的性能,需要的朋友可以参考下。缓解行竞争我们在Sentry开发的早起采用的是sentry.buffers。 这是一个简单的系统,它允许我们以简单的Last Write Wins策略来...查看详情

  Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add...查看详情

  下面列出11种Web应用场景,在这些场景下可以充分的利用Redis的特性,大大提高效率。1.在主页中显示最新的项目列表Redis使用的是常驻内存的缓存,速度非常快。LPUSH用来插入一个内容ID,作为关键字存储在列表头部。LTRIM用来限制列表中的项目数最多为5000。如果用户需...查看详情

  关注关系产生的四种关系状态 关注 粉丝 双向关注(互粉) 无关系需求分析在微博中,每一个用户都会有一个关注列表,一个粉丝列表。用户可以查看自己的关注asp技术,粉丝列表,也可以查看别人的关注,粉丝列表。并且,要展示列表里每个人与当前查看者的关注状态。状态的可能性就是上面讲到得四种关...查看详情asp代码怎么添加图片文字内容显示不全asp代码怎么添加图片文字内容显示出来

您可能还会对下面的文章感兴趣: