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 高速的特点,增删改操作可以很快完成。
数据终究得从缓存中 “写回” 数据库,根据不同应用对数据可靠性和响应速度的不同要求,有两种策略可选:
同步直写:写请求会同时给缓存和数据库处理,待缓存和数据库都处理完成后,才会返回结果给客户端
- 能够确保数据可靠,即使缓存宕机或故障,最新数据也将保存至数据库中
- 性能较差,因为需要等待数据库处理完成
异步写回:写请求先在缓存中处理,待数据要被从缓存中淘汰时,将其写回数据库
- 不能确保数据可靠,如果缓存宕机或故障,将会造成数据丢失
参考
- Redis
- Redis 教程 | 菜鸟教程
- Redis数据库学习教程(快速入门版)
- Redis 核心技术与实战