请选择 进入手机版 | 继续访问电脑版

[Redis] Spring Boot 项目集成Redis的方式详解

[复制链接]
查看85 | 回复8 | 2021-9-14 01:09:09 | 显示全部楼层 |阅读模式

集成方式

利用 Jedis

Jedis是Redis官方保举 的面向Java的操作Redis的客户端,是对服务端直连后举行 操作。假如 直接利用 Jedis举行 毗连 ,多线程环境下黑白 线程安全的,正式生产环境一样寻常 利用 毗连 池举行 毗连 。

  1. <dependency>
  2. <groupId>redis.clients</groupId>
  3. <artifactId>jedis</artifactId>
  4. <version>2.9.0</version>
  5. </dependency>
复制代码

利用 spring-data-redis

由Spring 框架提供,是对Redis客户端的进一步封装,屏蔽了不同客户端的不同实现方式,让服务端和客户端进一步解耦;也就是你可以切换不同的客户端实现,比如Jedis或Lettuce(Redis客户端实现之一),而不影响你的业务逻辑。

雷同 于的SpringCloud的服务管理 框架对不同服务管理 组件的适配,或是AMQP

它利用 RedisTemplate对JedisApi举行 高度封装。利用 的依赖 如下:

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-data-redis</artifactId>
  4. </dependency>
复制代码

Redis的安装

​收先要安装Redis服务端,Redis官方提供的是Linux安装包。网上有很多具体 的安装教程,这里不做睁开 。关于Windows下的安装,可参考我的另一篇博文windows下Redis的安装和利用

绑定设置

​完成Redis服务端的安装之后,我们开始在项目中举行 集成。这里我们先先容 利用 Jedis的方式举行 的集成。先按上面的提及的方式举行 依赖 的引入。然后将Redis的干系 信息设置 到设置 文件中去。我们可以的新建一个设置 文件

  1. redis.properties
复制代码
,内容如下:

  1. # Redis数据库索引(默认为0)
  2. spring.redis.database=0
  3. # Redis服务器地址
  4. spring.redis.host=127.0.0.1
  5. # Redis服务器连接端口
  6. spring.redis.port=6379
  7. # Redis服务器连接密码(默认为空)
  8. spring.redis.password=
  9. # 连接超时时间(毫秒)
  10. spring.redis.timeout=0
复制代码

​接下来我们要为Redis客户端毗连 绑定上面的设置 ,创建出来的客户端实例才可以或许 毗连 到我们的想连的Redis服务端。你可以利用

  1. @Value
复制代码
注解或
  1. @ConfigurationProperties
复制代码
注解的方式,本文采用的是后者,假如 还不清晰 的该注解的用法,可以移步我的另一篇博文@ConfigurationProperties实现自定义设置 绑定查看,这里不做睁开 。

​以下是Redis服务端信息设置 的吸取 类:

  1. MyRedisProperties.java
复制代码

  1. @ConfigurationProperties(
  2. prefix = "spring.redis"
  3. )
  4. @Component
  5. @Data
  6. @PropertySource("classpath:/redis.properties")
  7. public class MyRedisProperties {
  8. private String database;
  9. private String host;
  10. private Integer port;
  11. private String password;
  12. private Integer timeOut;
  13. }
复制代码

由于我们正式生产环境一样寻常 都是采用毗连 池方式实现,以是 我们还必要 关于毗连 池的设置 如下:

  1. # 连接池最大连接数(使用负值表示没有限制)
  2. spring.redis.pool.max-active=8
  3. # 连接池最大阻塞等待时间(使用负值表示没有限制)
  4. spring.redis.pool.max-wait=-1
  5. # 连接池中的最大空闲连接
  6. spring.redis.pool.max-idle=8
  7. # 连接池中的最小空闲连接
  8. spring.redis.pool.min-idle=0
复制代码

对应的吸取 类如下:

  1. @ConfigurationProperties(
  2. prefix = "spring.redis.pool"
  3. )
  4. @Data
  5. @Component
  6. @PropertySource("classpath:/redis.properties")
  7. public class RedisPoolProperties {
  8. private Integer maxActive;
  9. private Integer maxWait;
  10. private Integer maxIdle;
  11. private Integer minIdle;
  12. }
复制代码

然后向Spring容器装配客户端实例,分为单个客户端和毗连 池两种实现,如下代码:

  1. @Configuration
  2. public class RedisConfig {
  3. @Autowired
  4. private RedisPoolProperties redisPoolProperties;
  5. @Autowired
  6. private MyRedisProperties myRedisProperties;
  7. @Bean
  8. public Jedis singleJedis(){
  9. return new Jedis(myRedisProperties.getHost(),myRedisProperties.getPort());
  10. }
  11. @Bean
  12. public JedisPool jedisPool(){
  13. JedisPoolConfig poolConfig = new JedisPoolConfig();
  14. poolConfig.setMaxIdle(redisPoolProperties.getMaxIdle());
  15. poolConfig.setMaxTotal(redisPoolProperties.getMaxActive());
  16. poolConfig.setMaxWaitMillis(redisPoolProperties.getMaxWait() * 1000);
  17. JedisPool jp = new JedisPool(poolConfig, myRedisProperties.getHost(), myRedisProperties.getPort(),
  18. myRedisProperties.getTimeOut()*1000, myRedisProperties.getPassword(), 0);
  19. return jp;
  20. }
  21. }
复制代码

获取Redis客户端

举行 干系 设置 的绑定之后,意味着我们程序可以拿到Redis和毗连 池的干系 信息,然后举行 客户端的创建和毗连 了。以是 我们要向Spring容器装配客户端实例,分为单个客户端和毗连 池两种实现,如下代码:

  1. @Configuration
  2. public class RedisConfig {
  3. @Autowired
  4. private RedisPoolProperties redisPoolProperties;
  5. @Autowired
  6. private MyRedisProperties myRedisProperties;
  7. @Bean
  8. public Jedis singleJedis(){
  9. return new Jedis(myRedisProperties.getHost(),myRedisProperties.getPort());
  10. }
  11. @Bean
  12. public JedisPool jedisPool(){
  13. JedisPoolConfig poolConfig = new JedisPoolConfig();
  14. poolConfig.setMaxIdle(redisPoolProperties.getMaxIdle());
  15. poolConfig.setMaxTotal(redisPoolProperties.getMaxActive());
  16. poolConfig.setMaxWaitMillis(redisPoolProperties.getMaxWait() * 1000);
  17. JedisPool jp = new JedisPool(poolConfig, myRedisProperties.getHost(), myRedisProperties.getPort(),
  18. myRedisProperties.getTimeOut()*1000, myRedisProperties.getPassword(), 0);
  19. return jp;
  20. }
  21. }
复制代码

Redis工具的编写

装配好客户端实例后,我们就可以通过@Autowired的方式举行 注入利用 了。我们都知道,Redis有5中数据范例 ,分别是:

  • string(字符串)
  • hash(哈希)
  • list(列表)
  • set(集合)
  • zset(sorted set:有序集合)

以是 的有必要的封装一个操作者5种数据列表的工具类,由于篇幅的关系,我们以Redis最基本的数据范例 String为例,简单封装几个操作方法作为示比方 下,更具体 的封装,可参考java操作Redis数据库的redis工具,RedisUtil,jedis工具JedisUtil,JedisPoolUtil这一博文

  1. @Service
  2. public class RedisService {
  3. @Autowired
  4. private JedisPool jedisPool; // 连接池方式
  5. @Autowired
  6. private Jedis myJedis; // 单个客户端
  7. public <T> T get(String key, Class<T> clazz) {
  8. Jedis jedis = null;
  9. try {
  10. jedis = jedisPool.getResource();
  11. String str = jedis.get(key);
  12. return stringToBean(str,clazz);
  13. } finally {
  14. close(jedis);
  15. }
  16. }
  17. public <T> void set(String key, T value) {
  18. try {
  19. String str = value.toString();
  20. if (str == null || str.length() <= 0) {
  21. return;
  22. }
  23. myJedis.set(key, str);
  24. } finally {
  25. close(myJedis);
  26. }
  27. }
  28. private void close(Jedis jedis) {
  29. if (jedis != null) {
  30. jedis.close();
  31. }
  32. }
  33. /**
  34. * 把一个字符串转换成bean对象
  35. * @param str
  36. * @param <T>
  37. * @return
  38. */
  39. public static <T> T stringToBean(String str, Class<T> clazz) {
  40. if(str == null || str.length() <= 0 || clazz == null) {
  41. return null;
  42. }
  43. if(clazz == int.class || clazz == Integer.class) {
  44. return (T)Integer.valueOf(str);
  45. }else if(clazz == String.class) {
  46. return (T)str;
  47. }else if(clazz == long.class || clazz == Long.class) {
  48. return (T)Long.valueOf(str);
  49. }else {
  50. return JSON.toJavaObject(JSON.parseObject(str), clazz);
  51. }
  52. }
  53. }
复制代码

此中

  1. get
复制代码
方法利用 毗连 池中的客户端实例,
  1. set
复制代码
方法用到的黑白 毗连 池的实例,以区分两种不同的利用 方式

利用

封装好的Redis的操作工具类后,我们就可以直接利用 该工具类来举行 对Redis的各种操作 。如下,直接注入即可。

  1. @RestController
  2. public class TestController {
  3. @Autowired
  4. private RedisService redisService;
  5. ......
  6. }
复制代码

到此这篇关于Spring Boot 项目集成Redis的文章就先容 到这了,更多干系 Spring Boot 项目集成Redis内容请搜刮 脚本之家从前 的文章或继续欣赏 下面的干系 文章渴望 大家以后多多支持脚本之家!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

avatar 喝意调伴除 | 2021-9-14 06:59:25 | 显示全部楼层
雷锋做好事不留名,都写在帖子里!
回复

使用道具 举报

avatar 塞上云烟辣 | 2021-9-19 23:23:42 | 显示全部楼层
admin楼主很有艺术范!
回复

使用道具 举报

avatar 123456835 | 2021-9-20 15:58:53 | 显示全部楼层
admin楼主的病已经好了百分之六十二了!
回复

使用道具 举报

avatar 清风吹袭断 | 2021-10-4 10:01:40 | 显示全部楼层
我裤子脱了,纸都准备好了,你就给我看这个?
回复

使用道具 举报

最近精神病院在打折,admin楼主去看看吧?
回复

使用道具 举报

avatar 123457389 | 2021-10-9 22:58:22 | 显示全部楼层
admin楼主,我告诉你一个你不知道的的秘密,有一个牛逼的网站,他卖的服务器是永久的,我们的网站用 服务器都是在这家买的,你可以去试试。访问地址:http://fwq.mxswl.com
回复

使用道具 举报

avatar 秋天一且 | 2021-10-13 13:01:57 | 显示全部楼层
态度决定一切,不错!
回复

使用道具 举报

林子大了,什么鸟都有了啊!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则