SpringDataRedis

一、SpringDataRedis 简介

        SpringDataRedis 属于 SpringData 家族一员,用于对 redis 的操作进行封装的框架。

        SpringData 是Spring 的一个子项目。Spring 官方提供一套数据层综合解决方案,用于简化数据库访问,支持 NoSQL 和关心数据库存储。包括 SpringDataJPA、SpringDataRedis、SpringDataSolr、SpringDataElasticsearch、SpringDataMongodb 等框e架。

二、SpringDataRedis 快速入门

1. 值类型操作

SpringDataRedis_第1张图片

2. Set 类型操作

SpringDataRedis_第2张图片

3. List 类型操作

(1)右压栈 后添加的对象排在后边

SpringDataRedis_第3张图片

(2)左压栈 后添加的对象排在前边

SpringDataRedis_第4张图片

(3) 根据索引查询元素

 SpringDataRedis_第5张图片

(4)移除指定个数的值

SpringDataRedis_第6张图片

4. Hash 类型操作

(1)存入值

SpringDataRedis_第7张图片

(2)查询所有的 key 

SpringDataRedis_第8张图片

(3)查询所有的值

SpringDataRedis_第9张图片

(4)根据 key 获取值

SpringDataRedis_第10张图片

(5)根据key 删除值

5. ZSet 类型操作

        zset 是 set 的升级版本,它在 set 的基础上增加了一个顺序属性,这一属性在添加元素的同时可以指定,每次指定后,zset 会自动重新按照新的值调整顺序。可以理解为有两列的 mysql 表,一列存储 value,一列存储分值。

(1)存值,指定分值

SpringDataRedis_第11张图片

(2) 取值,由低到高

SpringDataRedis_第12张图片

 (3) 取值,由高到低

SpringDataRedis_第13张图片

(4) 增加分数

SpringDataRedis_第14张图片

(5) 查询值和分数

SpringDataRedis_第15张图片

 

6. 过期时间设置

SpringDataRedis_第16张图片

 

三、缓存穿透、缓存击穿、缓存雪崩

1. 缓存穿透

缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,如发起为 id 为“-1”的数据或 id 为特别大不存在的数据。这时的用户可能是攻击者,攻击会导致数据库压力过大。

下面这段代码存在缓存穿透的问题。

SpringDataRedis_第17张图片

解决方案:

(1)接口层增加校验,如用户鉴权校验,id 做基础校验,id<=0 的直接拦截;

(2)使用缓存预热

缓存预热就是将数据提前加入到缓存中,当数据发生变更,再将最新的数据更新到缓存。

(3)从缓存取不到的数据,在数据库中也没有取到,这时也可以将 key-value 对写为 key-0。这样就可以防止攻击用户反复用同一个 id 暴力攻击。

SpringDataRedis_第18张图片

 

2. 缓存击穿

缓存击穿是指缓存中没有但数据库中有的数据。这时由于并发用户特别多,同时读缓存没读到数据,又同时去数据库去取数据,引起数据库压力瞬间增大,造成过大压力。

下面这段代码存在缓存击穿的问题。

SpringDataRedis_第19张图片

 

解决方案:

(1)设置热点数据永远不过期。

(2)缓存预热

3. 缓存雪崩

缓存雪崩是指缓存数据大批量到过期时间,而查询数据量巨大,引起数据库压力过大甚至 down 机。和缓存击穿不同的是,缓存击穿指并发查同一条数据,缓存雪崩是不同数据都过期了,很多数据都查不到从而查数据库。

解决方案:

(1)设置热点数据永远不过期。

(2)缓存预热

(3)缓存数据的过期时间设置随机,防止同一时间大量数据过期现象发生。

你可能感兴趣的:(Redis,java,redis,缓存,数据库)