我的编程空间,编程开发者的网络收藏夹
学习永远不晚

SpringBoot集成Redis使用Lettuce

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

SpringBoot集成Redis使用Lettuce

        Redis是最常用的KV数据库,Spring 通过模板方式(RedisTemplate)提供了对Redis的数据查询和操作功能。本文主要介绍基于RedisTemplate + lettuce方式对Redis进行查询和操作的案例。

一、Redis基础数据类型

        首先对redis来说,所有的key(键)都是字符串。我们在谈基础数据结构时,讨论的是存储值的数据类型,主要包括常见的5种数据类型,分别是:String、List、Set、Zset、Hash。

结构类型

结构存储的值

结构的读写能力

String字符串

可以是字符串、整数或浮点数

对整个字符串或字符串的一部分进行操作;对整数或浮点数进行自增或自减操作;

List列表

一个链表,链表上的每个节点都包含一个字符串

对链表的两端进行push和pop操作,读取单个或多个元素;根据值查找或删除元素;

Set集合

包含字符串的无序集合

字符串的集合,包含基础的方法有看是否存在添加、获取、删除;还包含计算交集、并集、差集等

Hash散列

包含键值对的无序散列表

包含方法有添加、获取、删除单个元素

Zset有序集合

和散列一样,用于存储键值对

字符串成员与浮点数分数之间的有序映射;元素的排列顺序由分数的大小决定;包含方法有添加、获取、删除单个元素以及根据分值范围或成员来获取元素

二、 Redis常用连接池

        Jedis:是Redis的Java实现客户端,提供了比较全面的Redis命令的支持。

        Redisson:实现了分布式和可扩展的Java数据结构。

        Lettuce:高级Redis客户端,用于线程安全同步,异步和响应使用,支持集群,Sentinel,管道和编码器。

三、SpringBoot集成Redis案例

yml配置常量:

redis:
  # 地址
  host: 192.168.1.66
  # 端口,默认为6379
  port: 6379
  # 数据库索引
  database: 0
  # 密码(如没有密码请注释掉)
  password: 123456
  # 连接超时时间
  timeout: 3000
  # 是否开启ssl
  ssl: false
  lettuce:
    pool:
      max-active: 1000  # 连接池最大连接数(使用负值表示没有限制)
      max-wait: -1   # 连接池最大阻塞等待时间(使用负值表示没有限制)
      max-idle: 10      # 连接池中的最大空闲连接
      min-idle: 5       # 连接池中的最小空闲连接

pom.xml引入依赖:



    org.springframework.boot
    spring-boot-starter-data-redis
    2.4.0



    org.apache.commons
    commons-pool2
    2.8.0

RedisConfig配置类:

package com.cn.common.conf;import com.alibaba.fastjson.parser.ParserConfig;import com.alibaba.fastjson.support.config.FastJsonConfig;import com.alibaba.fastjson.support.spring.FastJsonRedisSerializer;import org.apache.commons.pool2.impl.GenericObjectPoolConfig;import org.springframework.beans.factory.annotation.Value;import org.springframework.cache.annotation.EnableCaching;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.data.redis.connection.RedisStandaloneConfiguration;import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;import org.springframework.data.redis.connection.lettuce.LettucePoolingClientConfiguration;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.data.redis.serializer.RedisSerializer;import org.springframework.data.redis.serializer.StringRedisSerializer;import java.nio.charset.StandardCharsets;import java.time.Duration;@Configuration@EnableCachingpublic class RedisConfig {    // 倘若 spring.redis.host 不存在,则会默认为127.0.0.1.    @Value("${spring.redis.host:#{'127.0.0.1'}}")    private String hostName;    @Value("${spring.redis.port:#{6379}}")    private int port;    @Value("${spring.redis.password:#{123456}}")    private String password;    @Value("${spring.redis.timeout:#{3000}}")    private int timeout;    @Value("${spring.redis.lettuce.pool.max-idle:#{16}}")    private int maxIdle;    @Value("${spring.redis.lettuce.pool.min-idle:#{1}}")    private int minIdle;    @Value("${spring.redis.lettuce.pool.max-wait:#{16}}")    private long maxWaitMillis;    @Value("${spring.redis.lettuce.pool.max-active:#{16}}")    private int maxActive;    @Value("${spring.redis.database:#{0}}")    private int databaseId;    @Bean    public LettuceConnectionFactory lettuceConnectionFactory() {        RedisConfiguration redisConfiguration = new RedisStandaloneConfiguration(            hostName, port        );        // 设置选用的数据库号码        ((RedisStandaloneConfiguration) redisConfiguration).setDatabase(databaseId);        // 设置 redis 数据库密码        ((RedisStandaloneConfiguration) redisConfiguration).setPassword(password);        // 连接池配置        GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig<>();        poolConfig.setMaxIdle(maxIdle);        poolConfig.setMinIdle(minIdle);        poolConfig.setMaxTotal(maxActive);        poolConfig.setMaxWaitMillis(maxWaitMillis);        LettucePoolingClientConfiguration.LettucePoolingClientConfigurationBuilder builder            = LettucePoolingClientConfiguration.builder()            .commandTimeout(Duration.ofMillis(timeout));        LettucePoolingClientConfiguration lettucePoolingClientConfiguration = builder.build();        builder.poolConfig(poolConfig);        // 根据配置和客户端配置创建连接        LettuceConnectionFactory factory = new LettuceConnectionFactory(redisConfiguration, lettucePoolingClientConfiguration);        return factory;    }        @Bean(name = "redisTemplate")    public RedisTemplate redisTemplate(        LettuceConnectionFactory lettuceConnectionFactory    ) {        RedisTemplate redisTemplate = new RedisTemplate<>();        redisTemplate.setConnectionFactory(lettuceConnectionFactory);        // 使用 FastJsonRedisSerializer 来序列化和反序列化redis 的 value的值        FastJsonRedisSerializer serializer = new FastJsonRedisSerializer<>(Object.class);        ParserConfig.getGlobalInstance().addAccept("com.muzz");        FastJsonConfig fastJsonConfig = new FastJsonConfig();        fastJsonConfig.setCharset(StandardCharsets.UTF_8);        serializer.setFastJsonConfig(fastJsonConfig);        // key 的 String 序列化采用 StringRedisSerializer        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();        redisTemplate.setKeySerializer(stringRedisSerializer);        redisTemplate.setHashKeySerializer(stringRedisSerializer);        // value 的值序列化采用 fastJsonRedisSerializer        redisTemplate.setValueSerializer(serializer);        redisTemplate.setHashValueSerializer(serializer);        redisTemplate.afterPropertiesSet();        System.out.println(redisTemplate.getDefaultSerializer());        return redisTemplate;    }    @Bean    public RedisSerializer springSessionDefaultRedisSerializer() {        // 使用 FastJsonRedisSerializer 来序列化和反序列化redis 的 value的值        FastJsonRedisSerializer serializer = new FastJsonRedisSerializer<>(Object.class);        ParserConfig.getGlobalInstance().addAccept("com.muzz");        FastJsonConfig fastJsonConfig = new FastJsonConfig();        fastJsonConfig.setCharset(StandardCharsets.UTF_8);        serializer.setFastJsonConfig(fastJsonConfig);        return serializer;    }} 

 RedisUtil工具类:

package com.cn.util;import lombok.RequiredArgsConstructor;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.data.redis.core.StringRedisTemplate;import org.springframework.data.redis.serializer.RedisSerializer;import org.springframework.data.redis.serializer.StringRedisSerializer;import org.springframework.stereotype.Component;import org.springframework.util.CollectionUtils;import java.util.List;import java.util.Map;import java.util.Set;import java.util.concurrent.TimeUnit;@Component@RequiredArgsConstructorpublic class RedisUtils {    private RedisTemplate redisTemplate;    private final StringRedisTemplate stringRedisTemplate;    @Autowired(required = false)    public void setRedisTemplate(RedisTemplate redisTemplate) {        RedisSerializer stringSerializer = new StringRedisSerializer();        redisTemplate.setKeySerializer(stringSerializer);        redisTemplate.setHashKeySerializer(stringSerializer);        this.redisTemplate = redisTemplate;    }        public Set keys(String patten){        return stringRedisTemplate.keys(patten);    }        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;        }    }        public long getExpire(String key) {        return redisTemplate.getExpire(key, TimeUnit.SECONDS);    }        public boolean hasKey(String key) {        try {            return redisTemplate.hasKey(key);        } catch (Exception e) {            e.printStackTrace();            return false;        }    }        @SuppressWarnings("unchecked")    public void del(String... key) {        if (key != null && key.length > 0) {            if (key.length == 1) {                redisTemplate.delete(key[0]);            } else {                redisTemplate.delete(CollectionUtils.arrayToList(key));            }        }    }    //============================String=============================        public Object get(String key) {        return key == null ? null : redisTemplate.opsForValue().get(key);    }        public boolean set(String key, Object value) {        try {            redisTemplate.opsForValue().set(key, value);            return true;        } catch (Exception e) {            e.printStackTrace();            return false;        }    }        public boolean set(String key, Object value, long time) {        try {            if (time > 0) {                redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);            } else {                set(key, value);            }            return true;        } catch (Exception e) {            e.printStackTrace();            return false;        }    }        public long incr(String key, long delta) {        if (delta < 0) {            throw new RuntimeException("递增因子必须大于0");        }        return redisTemplate.opsForValue().increment(key, delta);    }        public long decr(String key, long delta) {        if (delta < 0) {            throw new RuntimeException("递减因子必须大于0");        }        return redisTemplate.opsForValue().increment(key, -delta);    }    //================================Map=================================        public Object hget(String key, String item) {        return redisTemplate.opsForHash().get(key, item);    }        public Map hmget(String key) {        return redisTemplate.opsForHash().entries(key);    }        public boolean hmset(String key, Map map) {        try {            redisTemplate.opsForHash().putAll(key, map);            return true;        } catch (Exception e) {            e.printStackTrace();            return false;        }    }        public boolean hmset(String key, Map map, long time) {        try {            redisTemplate.opsForHash().putAll(key, map);            if (time > 0) {                expire(key, time);            }            return true;        } catch (Exception e) {            e.printStackTrace();            return false;        }    }        public boolean hset(String key, String item, Object value) {        try {            redisTemplate.opsForHash().put(key, item, value);            return true;        } catch (Exception e) {            e.printStackTrace();            return false;        }    }        public boolean hset(String key, String item, Object value, long time) {        try {            redisTemplate.opsForHash().put(key, item, value);            if (time > 0) {                expire(key, time);            }            return true;        } catch (Exception e) {            e.printStackTrace();            return false;        }    }        public void hdel(String key, Object... item) {        redisTemplate.opsForHash().delete(key, item);    }        public boolean hHasKey(String key, String item) {        return redisTemplate.opsForHash().hasKey(key, item);    }        public double hincr(String key, String item, double by) {        return redisTemplate.opsForHash().increment(key, item, by);    }        public double hdecr(String key, String item, double by) {        return redisTemplate.opsForHash().increment(key, item, -by);    }    //============================set=============================        public Set sGet(String key) {        try {            return redisTemplate.opsForSet().members(key);        } catch (Exception e) {            e.printStackTrace();            return null;        }    }        public boolean sHasKey(String key, Object value) {        try {            return redisTemplate.opsForSet().isMember(key, value);        } catch (Exception e) {            e.printStackTrace();            return false;        }    }        public long sSet(String key, Object... values) {        try {            return redisTemplate.opsForSet().add(key, values);        } catch (Exception e) {            e.printStackTrace();            return 0;        }    }        public long sSetAndTime(String key, long time, Object... values) {        try {            Long count = redisTemplate.opsForSet().add(key, values);            if (time > 0) expire(key, time);            return count;        } catch (Exception e) {            e.printStackTrace();            return 0;        }    }        public long sGetSetSize(String key) {        try {            return redisTemplate.opsForSet().size(key);        } catch (Exception e) {            e.printStackTrace();            return 0;        }    }        public long setRemove(String key, Object... values) {        try {            Long count = redisTemplate.opsForSet().remove(key, values);            return count;        } catch (Exception e) {            e.printStackTrace();            return 0;        }    }    //===============================list=================================        public List lGet(String key, long start, long end) {        try {            return redisTemplate.opsForList().range(key, start, end);        } catch (Exception e) {            e.printStackTrace();            return null;        }    }        public long lGetListSize(String key) {        try {            return redisTemplate.opsForList().size(key);        } catch (Exception e) {            e.printStackTrace();            return 0;        }    }        public Object lGetIndex(String key, long index) {        try {            return redisTemplate.opsForList().index(key, index);        } catch (Exception e) {            e.printStackTrace();            return null;        }    }        public boolean lSet(String key, Object value) {        try {            redisTemplate.opsForList().rightPush(key, value);            return true;        } catch (Exception e) {            e.printStackTrace();            return false;        }    }        public boolean lSet(String key, Object value, long time) {        try {            redisTemplate.opsForList().rightPush(key, value);            if (time > 0) expire(key, time);            return true;        } catch (Exception e) {            e.printStackTrace();            return false;        }    }        public boolean lSet(String key, List value) {        try {            redisTemplate.opsForList().rightPushAll(key, value);            return true;        } catch (Exception e) {            e.printStackTrace();            return false;        }    }        public boolean lSet(String key, List value, long time) {        try {            redisTemplate.opsForList().rightPushAll(key, value);            if (time > 0) expire(key, time);            return true;        } catch (Exception e) {            e.printStackTrace();            return false;        }    }        public boolean lUpdateIndex(String key, long index, Object value) {        try {            redisTemplate.opsForList().set(key, index, value);            return true;        } catch (Exception e) {            e.printStackTrace();            return false;        }    }        public long lRemove(String key, long count, Object value) {        try {            Long remove = redisTemplate.opsForList().remove(key, count, value);            return remove;        } catch (Exception e) {            e.printStackTrace();            return 0;        }    }} 

来源地址:https://blog.csdn.net/zq987654/article/details/129195844

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

SpringBoot集成Redis使用Lettuce

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

关于SpringBoot集成Lettuce连接Redis的方法和案例

这篇文章主要介绍了关于SpringBoot集成Lettuce连接Redis的方法和案例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-05-17

SpringBoot集成如何使用Redis

小编给大家分享一下SpringBoot集成如何使用Redis,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!SpringBoot集成使用redisJedis 是 Redis 官方推出的一款面向 Java 的客户端,提供了很多
2023-06-29

SpringBoot集成Redis如何使用RedisRepositories

这篇“SpringBoot集成Redis如何使用RedisRepositories”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这
2023-06-29

SpringBoot和redis中怎么使用Lettuce客户端

这篇文章给大家介绍SpringBoot和redis中怎么使用Lettuce客户端,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1、重写连接工厂实例,更改其LettuceClientConfiguration 为开启拓扑
2023-06-20

springboot redis如何使用lettuce配置多数据源

这篇文章将为大家详细讲解有关springboot redis如何使用lettuce配置多数据源,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。springboot是什么springboot一种全新的编程规范
2023-06-14

Redis之Lettuce怎么使用

本篇内容主要讲解“Redis之Lettuce怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Redis之Lettuce怎么使用”吧!一、摘要Lettuce 是 Redis 的一款高级 Ja
2023-07-04

springboot集成redis的使用注解有哪些

这篇文章给大家分享的是有关springboot集成redis的使用注解有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。redis简介:Redis是当前比较热门的NOSQL系统之一,它是一个开源的使用ANSI
2023-06-29

SpringBoot2.4.2下怎么使用Redis配置Lettuce

这篇文章主要讲解了“SpringBoot2.4.2下怎么使用Redis配置Lettuce”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringBoot2.4.2下怎么使用Redis配置L
2023-06-26

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录