设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间23 现在时间23 缓存数据 别怀疑自己,别改变自己。别在意别人怎么想,大胆去追求自己想要的。

别怀疑自己,别改变自己。别在意别人怎么想,大胆去追求自己想要的。

查看: 333|回复: 1

使用SpringBoot中整合Redis

[复制链接]

  离线 

TA的专栏

  • 打卡等级:热心大叔
  • 打卡总天数:222
  • 打卡月天数:0
  • 打卡总奖励:3256
  • 最近打卡:2025-06-30 09:41:10
等级头衔

等級:晓枫资讯-上等兵

在线时间
0 小时

积分成就
威望
0
贡献
424
主题
391
精华
0
金钱
4502
积分
866
注册时间
2023-1-5
最后登录
2025-6-30

发表于 2023-2-17 13:43:46 | 显示全部楼层 |阅读模式
SpringBoot中整合Redis

本次,我们以IDEA + SpringBoot作为 Java中整合Redis的使用 的测试环境,如果对创建SpringBoot项目有不清楚的地方,可以参考这篇文章:使用Idea创建我的第一个SpringBoot项目
首先,我们需要导入Redis的maven依赖
  1. <!-- Redis的maven依赖包 -->
  2.         <dependency>
  3.             <groupId>org.springframework.boot</groupId>
  4.             <artifactId>spring-boot-starter-data-redis</artifactId>
  5.         </dependency>
复制代码
其次,我们需要在配置文件中配置你的Redis配置信息,我使用的是 .yml文件格式
  1. # redis配置
  2. spring:
  3.   redis:
  4.     # r服务器地址
  5.     host: 127.0.0.1
  6.     # 服务器端口
  7.     port: 6379
  8.     # 数据库索引(默认0)
  9.     database: 0
  10.     jedis:
  11.       pool:
  12.         # 连接池最大连接数(使用负值表示没有限制)
  13.         max-active: 50
  14.         # 连接池最大阻塞等待时间(使用负值表示没有限制)
  15.         max-wait: 3000ms
  16.         # 连接池中的最大空闲连接数
  17.         max-idle: 20
  18.         # 连接池中的最小空闲连接数
  19.         min-idle: 2
  20.     # 连接超时时间(毫秒)
  21.     timeout: 5000ms
复制代码
然后,我们需要创建一个RedisUtil来对Redis数据库进行操作
  1. package com.zyxx.test.utils;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.data.redis.core.RedisTemplate;
  4. import org.springframework.stereotype.Component;

  5. /**
  6. * @ClassName RedisUtil
  7. * @Author Lizhou
  8. * @Date 2019-08-03 17:29:29
  9. * @Version 1.0
  10. **/
  11. @Component
  12. public class RedisUtil {

  13.     @Autowired
  14.     private RedisTemplate<String, String> template;

  15.     /**
  16.      * 读取数据
  17.      *
  18.      * @param key
  19.      * @return
  20.      */
  21.     public String get(final String key) {
  22.         return template.opsForValue().get(key);
  23.     }

  24.     /**
  25.      * 写入数据
  26.      */
  27.     public boolean set(final String key, String value) {
  28.         boolean res = false;
  29.         try {
  30.             template.opsForValue().set(key, value);
  31.             res = true;
  32.         } catch (Exception e) {
  33.             e.printStackTrace();
  34.         }
  35.         return res;
  36.     }

  37.     /**
  38.      * 根据key更新数据
  39.      */
  40.     public boolean update(final String key, String value) {
  41.         boolean res = false;
  42.         try {
  43.             template.opsForValue().getAndSet(key, value);
  44.             res = true;
  45.         } catch (Exception e) {
  46.             e.printStackTrace();
  47.         }
  48.         return res;
  49.     }

  50.     /**
  51.      * 根据key删除数据
  52.      */
  53.     public boolean del(final String key) {
  54.         boolean res = false;
  55.         try {
  56.             template.delete(key);
  57.             res = true;
  58.         } catch (Exception e) {
  59.             e.printStackTrace();
  60.         }
  61.         return res;
  62.     }
  63.    
  64.         /**
  65.      * 是否存在key
  66.      */
  67.     public boolean hasKey(final String key) {
  68.         boolean res = false;
  69.         try {
  70.             res = template.hasKey(key);
  71.         } catch (Exception e) {
  72.             e.printStackTrace();
  73.         }
  74.         return res;
  75.     }

  76.         /**
  77.      * 给指定的key设置存活时间
  78.      * 默认为-1,表示永久不失效
  79.      */
  80.     public boolean setExpire(final String key, long seconds) {
  81.         boolean res = false;
  82.         try {
  83.             if (0 < seconds) {
  84.                 res = template.expire(key, seconds, TimeUnit.SECONDS);
  85.             }
  86.         } catch (Exception e) {
  87.             e.printStackTrace();
  88.         }
  89.         return res;
  90.     }

  91.     /**
  92.      * 获取指定key的剩余存活时间
  93.      * 默认为-1,表示永久不失效,-2表示该key不存在
  94.      */
  95.     public long getExpire(final String key) {
  96.         long res = 0;
  97.         try {
  98.             res = template.getExpire(key, TimeUnit.SECONDS);
  99.         } catch (Exception e) {
  100.             e.printStackTrace();
  101.         }
  102.         return res;
  103.     }

  104.         /**
  105.      * 移除指定key的有效时间
  106.      * 当key的有效时间为-1即永久不失效和当key不存在时返回false,否则返回true
  107.      */
  108.     public boolean persist(final String key) {
  109.         boolean res = false;
  110.         try {
  111.             res = template.persist(key);
  112.         } catch (Exception e) {
  113.             e.printStackTrace();
  114.         }
  115.         return res;
  116.     }   
  117. }
复制代码
最后,我们可以使用单元测试来检测我们在RedisUtil中写的操作Redis数据库的方法
  1. package com.zyxx.test;
  2. import com.zyxx.test.utils.RedisUtil;
  3. import org.junit.Test;
  4. import org.junit.runner.RunWith;
  5. import org.springframework.boot.test.context.SpringBootTest;
  6. import org.springframework.test.context.junit4.SpringRunner;
  7. import javax.annotation.Resource;

  8. @RunWith(SpringRunner.class)
  9. @SpringBootTest
  10. public class TestApplicationTest {

  11.     @Resource
  12.     private RedisUtil redisUtil;

  13.     @Test
  14.     public void setRedis() {
  15.         boolean res = redisUtil.set("jay", "周杰伦 - 《以父之名》");
  16.         System.out.println(res);
  17.     }

  18.     @Test
  19.     public void getRedis() {
  20.         String res = redisUtil.get("jay");
  21.         System.out.println(res);
  22.     }

  23.     @Test
  24.     public void updateRedis() {
  25.         boolean res = redisUtil.update("jay", "周杰伦 - 《夜的第七章》");
  26.         System.out.println(res);
  27.     }

  28.     @Test
  29.     public void delRedis() {
  30.         boolean res = redisUtil.del("jay");
  31.         System.out.println(res);
  32.     }

  33.         @Test
  34.     public void hasKey() {
  35.         boolean res = redisUtil.hasKey("jay");
  36.         System.out.println(res);
  37.     }

  38.         @Test
  39.     public void expire() {
  40.         boolean res = redisUtil.setExpire("jay", 100);
  41.         System.out.println(res);
  42.     }

  43.     @Test
  44.     public void getExpire() {
  45.         long res = redisUtil.getExpire("jay");
  46.         System.out.println(res);
  47.     }

  48.         @Test
  49.     public void persist() {
  50.         boolean res = redisUtil.persist("jay");
  51.         System.out.println(res);
  52.     }   
  53. }
复制代码
推荐使用Redis客户端(redis-desktop-manager)来查看Redis数据库中的数据
至此,我们在日常项目中整合Redis的基本使用操作就完成了,但在实际项目中,可能会涉及到更复杂的用法,可以根据你的业务需求调整Redis的使用即可。

SpringBoot整合Redis改不了database问题

关于学习redis写的yaml文件,里面的
  1. redis:
  2.   database: 15
  3.   host: 127.0.0.1
  4.   port: 6379
  5.   password:
  6.   timeout: 3000ms # 连接超时时间(毫秒)
复制代码
但是springboot自动装配一直是database为0
最后发现是没有找到我配置的redis,默认是用的自动装配的默认地址(所以我一直以为我的yaml写对了,但是没用写对,因为一直没有取到我的值)
自动装配的就是
  1. database=0,port=6379;无密码,host=localhost,
复制代码
就是因为这个原因,我写的数据能进入我的本地redis中,所以我一直没找到问题,因为我也使用的本地的redis测试的,一直找不到为什么改不了database。
最后发现是我的yaml文件的redis写错了,把redis写到log下面,并且归属于log。
最后该成归属于spring下面就可以了。
注意:一定要注意yaml的书写规范和上下级的关系。
深刻的教训,我在网上查了很多,也没找到对应的办法,幸好没有,不然的话,我的代码会被改的乱七八糟的,花了一下午才发现是自己yaml写错了。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持晓枫资讯。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
17
积分
14
注册时间
2022-12-27
最后登录
2022-12-27

发表于 前天 20:24 | 显示全部楼层
顶顶更健康!!!
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1楼
2楼

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表