springboot整合jedis (lettuce)

本文介绍了如何在SpringBoot中整合Redis,首先讲述了使用Docker部署Redis,然后详细说明了如何将Jedis替换为Lettuce,重点在于Lettuce的线程安全性和Netty基础,最后进行了测试验证整合的成功。
摘要由CSDN通过智能技术生成

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 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值