1、什么是Redis
redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存的NoSQL数据存储服务,是非关系型的、可持久化的Key-Value数据库。
2、在SpringBoot项目中使用Redis
- 下载Redis
下载地址:redis.io
每次使用Redis前都需要将Redis客户端打开,确保Redis在后台运行。 - 添加依赖项
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.4.0</version>
</dependency>
- 要操作Redis中的数据,需要使用RedisTemplate对象,则在csmall-product-webapi的根包下的config包中创建RedisConfiguration类,并在其中进行配置:
package com.example.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;
import java.io.Serializable;
@Configuration
public class RedisConfiguration {
@Bean
public RedisTemplate<String, Serializable> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Serializable> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
redisTemplate.setKeySerializer(RedisSerializer.string());
redisTemplate.setValueSerializer(RedisSerializer.json());
return redisTemplate;
}
}
- DAO类实现Serializable接口
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Account implements Serializable {//用户信息
String id;
String email;
String username;
String password;
int cancelnum;
public String getToken(Account account) {
String token="";
token= JWT.create().withAudience(account.getId())
.sign(Algorithm.HMAC256(account.getPassword()));
return token;
}
}
- 用Redis存数据
因为Redis是Key-Value数据库,所以存数据时需要指定key对应的value。
RedisTemplate<String, Serializable> redisTemplate.opsForValue()
.set("name","张三",60, TimeUnit.SECONDS);
- 取数据
只需输入key进行查找对应的value。
Serializable serializable=redisTemplate.opsForValue()
.get("name");
3、Redis使用场景
适合存储非结构化数据,比如:文章、评论:
(1)这些数据通常用于模糊处理,例如全文搜索、机器学习,适合存储较为简单的数据。
(2)这些数据是海量的,并且增长的速度是难以预期的。
(3)按照key获取数据效率很高,但是对于join或其他结构化查询的支持就比较差。
4、Redis 中的过期数据可以通过如下两种方式处理:
-
定期删除:Redis 会在每隔一段时间内(由参数
hz
决定,一般为 10~1000 次/秒),随机检查一部分过期数据,并将其删除。这种方式的优点是简单易行,缺点是可能会导致 Redis 中过期数据的存留时间过长或过短,不够精确。 -
惰性删除:当 Redis 客户端访问一个过期的数据时,Redis 会在读取数据之前检查一下这个数据是否已经过期,如果是,则立即删除该数据。这种方式的优点是能够精确地删除过期数据,缺点是可能会导致删除请求过多而影响性能。
为了平衡定期删除和惰性删除的优缺点,Redis 采用了一种综合策略:
-
设置过期时间时,同时计算出该 key 的 TTL 值,将其存储在过期时间戳集合中。
-
定期删除线程会定期扫描过期时间戳集合,并删除其中已经过期的 key。
-
当 Redis 客户端尝试访问一个 key 时,Redis 会先检查该 key 是否在过期时间戳集合中,并判断其是否已经过期,如果已经过期则立即删除,否则返回该 key 的值。
这种综合策略既能够精确地删除过期数据,又不会过于频繁地进行删除操作。
引用:
http://t.csdn.cn/Xyodw