在实际开发中使用 Redis 的时候,只会 Set Value 和 Get Value 两个操作,对 Redis 整体缺乏一个认知, 这里对 Redis 常见问题做一个总结。
1、 为什么使用Redis?
在项目使用redis,主要是考虑性能和并发。
项目中我们碰到需要执行很久的并且结果不频繁变动的查询时,就可以将结果集放在redis缓存中,之后的请求就会到缓存中读取,没有所需结果再去数据库查询。极大的提高了性能,使得请求能够迅速响应。
在并发性比较高的情况所有的请求直接访问数据库可能会导致数据库连接异常,利用redis缓存,使得请求先访问redis,不直接访问数据库。
使用Redis常见问题
- 1.缓存雪崩问题
- 2.缓存穿透问题
- 3.缓存与数据库双写一致性问题
- 4.缓存的并发性竞争问题
具体解决方案可参考下文也可参考上一篇文章:https://blog.csdn.net/weixin_47920113/article/details/108281671
2、Redis的数据类型以及使用场景
String
string是redis最基本的类型,一个key对应一个value。string类型是二进制安全的。意思是redis的string可以包含任何数据,value只最多是512M。常规set/get操作,对应的值可以是string也可以是数字。一般做一些计数功能的缓存、手机验证码缓存
@Test
public void testString() {
// 添加一条数据
jedis.set("username", "zhangsan");
jedis.set("age", "18");
// 添加多条数据 参数奇数为 key 参数偶数为 value
jedis.mset("address", "bj", "sex", "1");
// 获取一条数据
String username = jedis.get("username");
System.out.println(username);
// 获取多条数据
List<String> list = jedis.mget("username", "age", "address", "sex");
for (String str : list) {
System.out.println(str);
}
// 删除
//jedis.del("username");
}
Hash
存放的值是对象,比较方便操作对象的属性字段。在做单点登录时,以CookieId为key,值可以用这种数据结构存储用户相关信息,设置对应过期时间可以做出类似session过期的效果。