Redis 读写做法

本文将介绍使用 Redis 作为缓存时,读写的一些常用做法。

一、读取的做法

  • 尝试向 Redis 读取数据
  • 如果 Redis 中有对应数据,从 Redis 中读取数据,返回
  • 如果 Redis 中没有对应数据,从数据库中读取数据,将数据写入 Redis,返回

因此,往往需要在应用程序中增加代码,显式地调用缓存。

实例如下:

1
2
3
4
5
6
7
8
9
10
11
String cacheKey = “productid_11010003”;
String cacheValue = redisCache.get(cacheKey);
// 缓存命中
if ( cacheValue != NULL) {
return cacheValue;
}
// 缓存缺失
else {
cacheValue = getProductFromDB();
redisCache.put(cacheValue);
}

二、写入的做法

1. 只读缓存

只读缓存,只接受读请求,只能加速读。

对于只读缓存,写入的做法为:

  • 将写请求发送给数据库处理

  • 如果缓存中存在对应的数据,将其删除

    下次向缓存获取数据时,会向数据库获取更改后数据,并将其放入缓存中

2. 读写缓存

读写缓存,接收读、写请求,能够加速读写。

对于读写缓存,写请求也会交给缓存处理,数据可以直接在缓存中增删改。得益于 Redis 高速的特点,增删改操作可以很快完成。

数据终究得从缓存中 “写回” 数据库,根据不同应用对数据可靠性和响应速度的不同要求,有两种策略可选:

  • 同步直写:写请求会同时给缓存和数据库处理,待缓存和数据库都处理完成后,才会返回结果给客户端

    • 能够确保数据可靠,即使缓存宕机或故障,最新数据也将保存至数据库中
    • 性能较差,因为需要等待数据库处理完成
  • 异步写回:写请求先在缓存中处理,待数据要被从缓存中淘汰时,将其写回数据库

    • 不能确保数据可靠,如果缓存宕机或故障,将会造成数据丢失

参考