SpringDataRedis

一、SpringDataRedis 简介

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

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

二、SpringDataRedis 快速入门

1. 值类型操作

2. Set 类型操作

3. List 类型操作

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

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

(3) 根据索引查询元素

 

(4)移除指定个数的值

4. Hash 类型操作

(1)存入值

(2)查询所有的 key 

(3)查询所有的值

(4)根据 key 获取值

(5)根据key 删除值

5. ZSet 类型操作

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

(1)存值,指定分值

(2) 取值,由低到高

 (3) 取值,由高到低

(4) 增加分数

(5) 查询值和分数

 

6. 过期时间设置

 

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

1. 缓存穿透

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

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

解决方案:

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

(2)使用缓存预热

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

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

 

2. 缓存击穿

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

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

 

解决方案:

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

(2)缓存预热

3. 缓存雪崩

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

解决方案:

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

(2)缓存预热

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值