jedis是什么
Jedis是Redis官方推荐的Java连接开发工具
docker 部署 redis
1.拉取镜像
docker pull redis:latest
2.生成容器
docker run --name redis-znkj -p 6379:6379 -d redis:latest redis-server --appendonly yes --requirepass 'znkjadmin123456'
redis-znkj 是你容器名字
6379 是端口
znkjadmin123456 是你的密码
appendonly yes 开启redis 持久化
整合springboot
这里会跟之前有一定的区别:由于spring-boot-starter-redis的过时所以对项目中jedis的使用进行了更新
1.引入pom
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
2.yml配置
这里我们也将jedis 换成 lettuce 由于👇
Jedis 是直连模式,在多个线程间共享一个 Jedis 实例时是线程不安全的,每个线程都去拿自己的 Jedis 实例,当连接数量增多时,物理连接成本就较高了。
Lettuce的连接是基于Netty的,连接实例可以在多个线程间共享,一个多线程的应用可以使用同一个连接实例,而不用担心并发线程的数量。通过异步的方式可以让我们更好地利用系统资源。
redis:
host: 127.0.0.1
port: 6379
password: znkjadmin123456
database: 0
timeout: 10000
lettuce: #我们也将之前的jedis -> lettuce
pool:
min-idle: 5 # 连接池中的最小空闲连接
max-idle: 10 # 连接池中的最大空闲连接
max-active: 200 # 连接池最大连接数(使用负值表示没有限制)
max-wait: 10000 #连接池最大阻塞等待时间(使用负值表示没有限制)
3.config配置
config也跟之前有些差别
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
StringRedisSerializer keySerializer = new StringRedisSerializer();
GenericFastJsonRedisSerializer valueSerializer = new GenericFastJsonRedisSerializer();
// 序列化 key 和 value
redisTemplate.setKeySerializer(keySerializer);
redisTemplate.setValueSerializer(valueSerializer);
redisTemplate.setHashKeySerializer(keySerializer);
redisTemplate.setHashValueSerializer(valueSerializer);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
}
4.util创建
util 不是不变的
@Component
public class RedisUtil {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
public void setRedisTemplate(RedisTemplate<String, Object> redisTemplate) {
this.redisTemplate = redisTemplate;
}
//=============================common============================
/**
* 指定缓存失效时间
*
* @param key 键
* @param time 时间(秒)
* @return
*/
public boolean expire(String key, long time) {
try {
if (time > 0) {
redisTemplate.expire(key, time, TimeUnit.SECONDS);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 根据key 获取过期时间
*
* @param key 键 不能为null
* @return 时间(秒) 返回0代表为永久有效
*/
public long getExpire(String key) {
return redisTemplate.getExpire(key, TimeUnit.SECONDS);
}
/**
* 判断key是否存在
*
* @param key 键
* @return true 存在 false不存在
*/
public boolean hasKey(String key) {
try {
return redisTemplate.hasKey(key);
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 删除缓存
*
* @param key 可以传一个值 或多个
*/
@SuppressWarnings("unchecked")
public