Springboot整合RedisTemplate

2023-11-08

RedisTemplate是在Jedis的基础上进行了封装

依赖

<!--        springboot redis整合-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
<!--        连接池 redis依赖commons-pool 这个依赖一定要加-->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
        </dependency>
                <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

配置文件:
application.yml

server:
  port: 8080
spring:
  application:
    name: redisdemo02
  redis:
    host: 192.168.145.128
    password: 123456
    port: 6379
    database: 0


测试链接:

@SpringBootTest
class Redisdemo02ApplicationTests {
    @Resource
    private RedisTemplate<Object,Object> redisTemplate;
    @Test
    void contextLoads() {
        System.out.println(redisTemplate);
        //向Redis存入键值对
        redisTemplate.opsForValue().set("javasss","helloworld");
        //从Redis中获取键值对
        System.out.println(redisTemplate.opsForValue().get("javasss"));
    }

}

在这里插入图片描述
在这里插入图片描述
查看数据库 数据之前还有一些东西
以上存在一些问题:
1.redis的key都是string类型,在模板的泛型中使用Object不太好 string类型value无法存对象
2.redis模板进行存取时:使用客户端窗口常看时 会发现数据之前还会多一些字符,这会导致无法删除
解决方案:
创建RedisConfig类,添加以下代码:

@Configuration
public class RedisConfig {
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<String, Object> template = new RedisTemplate();
        template.setConnectionFactory(redisConnectionFactory);
        StringRedisSerializer stringRedisSerializer=new StringRedisSerializer();
        template.setKeySerializer(stringRedisSerializer);
        template.setValueSerializer(stringRedisSerializer);
        return template;
    }
}

RedisTemplate操作String类型和Hash类型

UserServiceImpl:


@Service
@Slf4j
public class UserServiceImpl {
    @Autowired
    private RedisTemplate<String,Object> redisTemplate;
    /*
    * RedisTemplate操作String类型
    * */
    /*
    * 1.判断Redis是否存在key
    * 若存在直接查询Redis
    * 若不存在查询MYSQL讲查询结果存入Redis
    * */
    public String getUserName(String id){
       //1.生成Redis key
        String key="user:name:"+id;
        if(redisTemplate.hasKey(key)){
            log.info("查询的是redis");
            Object o = redisTemplate.opsForValue().get(key);
            return (String)o;
        }else {
            log.info("查询mysql");
            String result="cxk";
            redisTemplate.opsForValue().set(key,result);
            return result;
        }
    }
    /*
    * RedisTemplate hash
    *根据用户ID查询用户信息
    * 1.根据用户ID生成Redis KEY
    * 2.判断Redis中是否存在key
    * 3.如果key不存在,查询MYSQL,讲查询的对象结果返回并再次存入Redis hash类型
    * 4.如果key存在 直接查询Redis返回
    * */
      public User selectUserById(String id){
          String key="user:"+id;
          if(!redisTemplate.opsForHash().hasKey("user",id)){
              log.info("mysql");
              User user=new User();
              user.setId(id);
              user.setName("cxk");
              user.setRemark(" like basketball");
              redisTemplate.opsForHash().put("user",id,user);
              return user;
          }else{
              log.info("redis");
              User user =(User) redisTemplate.opsForHash().get("user", id);
              return user;
          }
      }
}

测试:

  @Autowired
    private UserServiceImpl userService;
    @Test
    public void userservice(){
        System.out.println(userService.getUserName("1001"));
        System.out.println(userService.selectUserById("1001"));
    }

在这里插入图片描述
查看Redis 发现Hash类型的数据前又出现没必要的东西

在Config中添加内容,修改Serializer配置


@Configuration
public class RedisConfig {
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<String, Object> template = new RedisTemplate();
        template.setConnectionFactory(redisConnectionFactory);
        StringRedisSerializer stringRedisSerializer=new StringRedisSerializer();
        template.setKeySerializer(stringRedisSerializer);
        template.setValueSerializer(stringRedisSerializer);

//        --------------------添加的内容
        GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer=new GenericJackson2JsonRedisSerializer();
        template.setHashKeySerializer(stringRedisSerializer);
        //此处的value是对象 不应是string 而是json格式
        template.setHashValueSerializer(genericJackson2JsonRedisSerializer);
//     ---------------------------------------
     
     
        return template;
    }
}

再次执行Hash的方法 数据正常
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Springboot整合RedisTemplate 的相关文章

随机推荐

  • 西门子PLC学习笔记四-(控制三项异步电动机的启动停止)

    本篇是学习S7 300的一个小程序 用于对PLC开发简单直观的认识 1 三项异步电动机电路图 2 PLC控制接线图 从图中可以看出控制按钮接PLC 信号模块SM的I0 0 I0 1端口 输出信号从Q4 1输出 3 PLC SM模块选择 1
  • windows服务器运行ffmpeg报错,mfplat.dll模块已加载但找不到入口点dllregisterserver

    windows服务器运行ffmpeg报错 mfplat dll模块已加载但找不到入口点dllregisterserver 1 首先找到对应的mfplat dll版本 我的是将别人win7 64位系统的mfplat dll即目录在C Wind
  • Ubuntu 22.04

    步骤一 更新Ubuntu sudo apt update sudo apt y upgrade 重启系统 sudo systemctl reboot 步骤二 然后添加另外的ppa源 添加 Ond ej Sur PPA 存储库 sudo ap
  • 【VSCode报错】 Error while fetching extensions : XHR failed

    如果安装完vscode之后插件列表加载时出现了Error while fetching extensions XHR failed说明当前网络有地方配置了代理 当然这个代理可能不是你手动配置的 可能是因为你安装了某些浏览器插件 比如IGG插
  • pytest自动化测试框架tep环境变量、fixtures、用例三者之间的关系

    tep是一款测试工具 在pytest测试框架基础上集成了第三方包 提供项目脚手架 帮助以写Python代码方式 快速实现自动化项目落地 在tep项目中 自动化测试用例都是放到tests目录下的 每个 py文件相互独立 没有依赖 1个文件即1
  • python: excel假期时间提取统计

    encoding utf 8 版权所有 2023 涂聚文有限公司 许可信息查看 描述 Author geovindu Geovin Du 涂聚文 IDE PyCharm 2023 1 python 311 Datetime 2023 9 3
  • 数据库文件导出/备份

    8 2 MySql备份 导出 备份流程 1 打开数据库可视化软件 找到希望导出的文件位置 按图操作 我这里用的是sqlyog 2 选择备份表作为SQL转存 3 选择一下存储位置 接下来默认就行 4 导出完成 找到刚才选择的地址既可看到导出的
  • HTML select 下拉表单 textarea 文本域元素

    title HTML select 下拉表单 textarea 文本域元素 select 1 select 下拉菜单 应用场景 需要有一个下拉选项 有多个选项让用户选择 节约页面空间 使用 select 定义下拉列表 2 代码示例
  • 大数据项目实战——基于某招聘网站进行数据采集及数据分析(一)

    大数据项目实战 第一章 项目概述 文章目录 大数据项目实战 第一章 项目概述 学习目标 一 项目需求和目标 二 预备知识 三 项目架构设计及技术选取 四 开发环境和开发工具介绍 五 项目开发流程 总结 学习目标 掌握项目需求和目标 了解项目
  • 分析优酷/土豆/pptv/乐视 HTML5、m3u8地址

    转载 http blog sina com cn s blog 4ae178ba01015hx1 html http blog sina com cn s blog 4ae178ba01015hwz html YouTube已经支持HTML
  • 步进电机与伺服电机基础知识

    步进电机与伺服电机基础知识 最近做三轴运动控制器 grbl方案 留记录 注 本文以两相电机为例 步进电机和伺服电机如果都用驱动器驱动的话 使用方式一样 所以本文以步进电机讲解 步进电机是一种与专门用于速度和位置精确控制的特种电机 它旋转是以
  • init,service和systemctl的区别

    参考http www ruanyifeng com blog 2016 03 systemd tutorial commands html 1 service service是一个脚本命令 分析service可知是去 etc init d目
  • 算法之组合数学及其算法篇(二) ----- 鸽巢原理

    鸽巢原理 前言 鸽巢原理 运用1 运用二 运用三 鸽巢原理的推广 推论 运用一 运用二 鸽巢原理在几何上的作用 鸽巢原理对于数学的证明 前言 鸽巢原理又称抽屉原理或鞋盒原理 这个原理最早是由狄利克雷 Dirichlet 提出的 鸽巢原理是解
  • 东风汽车集团技术中心携手永洪科技,实现一站式数字化转型!

    随着数字化浪潮的席卷 中国制造业正积极探索数字化转型之路 以适应经济高质量发展的需求 在这一背景下 中国领先的商业智能服务提供商永洪科技与东风汽车集团有限公司技术中心达成战略合作 共同推动东风汽车集团的数字化升级 作为中国汽车行业的领军企业
  • 准确率与召回率

    百度百科的解释很容易懂了 但是下面的解释非常容易记忆 你对你的前任回忆起来的有多少是对的就是准确率precison 当然你还有没回忆 recall 起来的 回忆起来的占总体回忆的比例就是召回率recall 中文翻译略坑 百度百科的内容 召回
  • (已解决)jar包启动命令中的自定义变量参数(-D...)无法被服务识别

    目录 问题现象 问题分析 1 本机IDEA启动测试 2 jar包脚本命令启动测试 解决方法 问题现象 今天在使用脚本文件 sh文件 启动 一个java服务时 发现脚本启动命令中添加的变量参数无法被服务识别到 问题分析 下面将通过一个java
  • 华为机试题85-最长回文子串

    描述 给定一个仅包含小写字母的字符串 求它的最长回文子串的长度 所谓回文串 指左右对称的字符串 所谓子串 指一个字符串删掉其部分前缀和后缀 也可以不删 的字符串 数据范围 字符串长度1 s 350 进阶 时间复杂度 O n 空间复杂度 O
  • table、tr、td表格的行、单元格等属性说明

    table 标签定义HTML表格 简单的HTML表格由table元素以及一个或多个tr th或td元素组成 tr元素定义表格行 th元素定义表头 td元素定义表格单元格 table 标签常见的可选属性有 1 align 规定表格相对周围元素
  • vue实现excel本地表格下载

    div style margin top 20px div
  • Springboot整合RedisTemplate

    RedisTemplate是在Jedis的基础上进行了封装 依赖