返回顶部
首页 > 资讯 > 后端开发 > JAVA >Redis( 基础篇 ==> StringRedisTemplate的使用
  • 629
分享到

Redis( 基础篇 ==> StringRedisTemplate的使用

redis缓存哈希算法springbootjava 2023-09-28 15:09:55 629人浏览 独家记忆
摘要

本章导学: 为什么要使用StringRedisTemplateStringRedisTemplate操作String类型数据StringRedisTemplate操作Hash类型数据 一、 为什么要使用StringRedisTemplat

本章导学:

  • 为什么要使用StringRedisTemplate
  • StringRedisTemplate操作String类型数据
  • StringRedisTemplate操作Hash类型数据

一、 为什么要使用StringRedisTemplate

在我们为RedisTemplate指定序列化方式后(key为RedisSerializer.string(),value为GenericJackson2JSONRedisSerializer),我们存储value为实体类对象时,会产生如下现象:

这是因为,当我们传入的Value为实体类对象的时候,会用 GenericJackson2jsonRedisSerializer序列化器把java对象转为JSON格式,然后再存入Redis库中,在我们使用redisTemplate.opsForValue().get方法获取数据时,通过存入的@class属性,把JSON反序列化成JAVA对象。

这样一来我们在IDEA的控制器上很直观的就可以看到数据,但是也存在了一个缺点->浪费内存,因为我们要存放@class这一段额外的数据来反序列化JSON字符串

那为了节约内存,我们在处理Value时不使用GenericJackson2JsonRedisSerializer序列化器,时用RedisSerializer.string序列化器。这样一下,我们只需要在存入数据时,手动的把JAVA对象转变为JSON格式字符串,然后取数据时,再把JSON转回JAVA对象就好了。

而StringRedisTemplate它的key和Value默认就是String方式,我们不用自己再去定义RedisTemplate的配置类。

当然你要定义也可以,代码如下

package com.brrbaii.config;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.data.redis.connection.RedisConnectionFactory;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;import org.springframework.data.redis.serializer.RedisSerializer;@Configurationpublic class RedisConfig {    @Bean    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){        //创建RedisTemplate对象        RedisTemplate template = new RedisTemplate<>();        //设置连接工厂        template.setConnectionFactory(redisConnectionFactory);        //创建JSON序列化工具        GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();        //设置KEY的序列化        template.seTKEySerializer(RedisSerializer.string());        template.setHashKeySerializer(RedisSerializer.string());        //设置VALUE的序列化,不用jsonRedisSerializer//        template.setValueSerializer(jsonRedisSerializer);//        template.setHashValueSerializer(jsonRedisSerializer);        template.setValueSerializer(RedisSerializer.string());        template.setHashValueSerializer(RedisSerializer.string());        //返回        return template;    }}

我们写一个测试类,注入StringRedisTemplate,然后手动进行序列化和反序列化

代码如下

    @Test    public void testJavaBean(){        User user = new User("brrbaii", 22);        //手动把user对象转为JSON字符串,这里使用Hutool工具类里的JSONUtil        String UserToStr = JSONUtil.toJsonStr(user);        //存入数据        stringRedisTemplate.opsForValue().set("user:1",UserToStr);        //取出数据,这里取出来的是JSON格式        String StrUser = stringRedisTemplate.opsForValue().get("user:1");        //手动把JSON字符串转回user对象        User userResult = JSONUtil.toBean(StrUser, User.class);        System.out.println(userResult);    }

查看Redis可视化界面,这时候"@class":"com.brrbaii.entity.User"就没了

查看idea控制台输出结果

 

二、StringRedisTemplate操作String类型数据

StringRedisTemplate它的key和Value默认就是String方式,我们直接存就好了,没什么好讲的 

三、 StringRedisTemplate操作Hash类型数据

 

使用StringRedisTemplate.opsForHash时用的方法不是按照Redis命令来命名了,而是采用java里的HashMap用的方法来命名

存单个field我们用put方法,批量存field我们用putAll方法,我们创建个map集合,put多个key-value就好了

取单个field时我们用get方法,取全部field时我们用entries方法

代码如下:

    @Test    public void testHash(){        //存单个field        stringRedisTemplate.opsForHash().put("hash01","hashName","brr");        Object o = stringRedisTemplate.opsForHash().get("hash01", "hashName");        System.out.println(o);        //存多个field        Map map = new HashMap();        map.put("name","bb");        map.put("sex","jender");        map.put("hobby","ball");        stringRedisTemplate.opsForHash().putAll("hash02",map);        Map hash02 = stringRedisTemplate.opsForHash().entries("hash02");        System.out.println(hash02);    }

运行结果

 

 

  

来源地址:https://blog.csdn.net/weixin_48841931/article/details/127355010

--结束END--

本文标题: Redis( 基础篇 ==> StringRedisTemplate的使用

本文链接: https://lsjlt.com/news/420201.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Redis( 基础篇 ==> StringRedisTemplate的使用
    本章导学: 为什么要使用StringRedisTemplateStringRedisTemplate操作String类型数据StringRedisTemplate操作Hash类型数据 一、 为什么要使用StringRedisTemplat...
    99+
    2023-09-28
    redis 缓存 哈希算法 spring boot java
  • redis基础篇
    redis有五种数据类型,分别是string、hash、list、set、zset 一、string类型:redis 127.0.0.1:6379>set name doo//设置一个键值对...
    99+
    2024-04-02
  • SpringBoot整合Redis使用RedisTemplate和StringRedisTemplate
    目录1.环境准备1.1.引入依赖1.2.配置application.propertie1.3. 连接测试2.使用StringRedisTemplate和RedisTemplate3....
    99+
    2022-12-14
    SpringBoot整合Redis使用RedisTemplate SpringBoot整合Redis使用StringRedisTemplate SpringBoot整合Redis
  • Redis必备面试题《基础篇》
    Date:2019-11-12 读前思考:   面试官会问什么样的问题?   所问的问题背后真实的套路是什么?   喜欢问Redis哪些问题?   如何顺畅回答面试问的问题?吊打面试官。   什么是Redis?   Redis相比memca...
    99+
    2015-12-04
    Redis必备面试题《基础篇》
  • SQL简单使用-基础篇
    搭建好mysql数据库后,就可以练习SQL语句,达到熟练操作数据库的目的。SQL语句主要分为增删改查。多练习就可以熟能生巧了先建立一个数据表便于做增删改查的练习,这里就直接将创建表的语句写出来先执行。后面在...
    99+
    2024-04-02
  • Discuz! 的防水墙使用教程(基础篇)
    Discuz! 防水墙于今年5月正式上线,截至9月底,已经为数十万社区网站提供垃圾信息处理服务,不论是广告帖、垃圾帖、水帖、违规帖等不良信息,Discuz! 防水墙均可快速、高效的进行过滤。  为了让更多站长了解、熟悉D...
    99+
    2022-06-12
    Discuz! 防水墙
  • Python操作lxml库之基础使用篇
    目录一、lxml库概述1、lxml库介绍2、lxml库特点3、lxml库的安装二、基本使用1、lxml.etree2、解析HTML网页3、读取并解析HTML文件三、lxml使用流程1...
    99+
    2022-12-23
    python操作lxml库 python lxml库
  • Netty学习教程之基础使用篇
    什么Netty?Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。也就是说,Netty 是一个基于NIO的客户、服务器端编程框架...
    99+
    2023-05-31
    netty 基础
  • (Redis基础教程之六)如何使用Redis中的List
    如何在ubuntu18.04上安装和保护redis 如何连接到Redis数据库 如何管理Redis数据库和Keys 如何在Redis中管理副本和客户端 如何在Redis中管理字符串 如何在Redis中管理list 如何在Redi...
    99+
    2017-01-10
    (Redis基础教程之六)如何使用Redis中的List
  • (Redis基础教程之七)如何使用Redis中的Hashes
    本教程将介绍如何在Redis中管理Hashes,从创建Hashes到检索和删除Hashes中保存的数据。 如何使用本指南 本指南以备有完整示例的备忘单形式编写。我们鼓励您跳至与您要完成的任务相关的任何部分。 本指南中显示的命令已在运行Red...
    99+
    2014-10-15
    (Redis基础教程之七)如何使用Redis中的Hashes
  • redis的基础知识
    select切换数据库 remoteSelf:0>select 0 "OK" dbsize查看当前数据库的key数量 remoteSelf:0>dbsize "2" keys查看所有的key remoteSelf:0>keys ...
    99+
    2018-01-01
    redis的基础知识
  • Redis 基础教程之事务的使用方法
    Redis 基础教程之事务的使用方法 Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证: 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会...
    99+
    2022-06-04
    使用方法 基础教程 事务
  • Python基础-Python基础使用
    上篇文章 Python基础-初识Python 我们已经知道了什么是Python,Python的用处、和Python的解释器、Python的安装,这篇文章,我们主要讲Python的使用入门本文防盗链:http://python789.blog...
    99+
    2023-01-31
    基础 Python
  • 如何在VBS基础篇中使用条件语句
    如何在VBS基础篇中使用条件语句?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。在条件为 true 时,执行某段代码选择两段代码之一来执行时dim a&...
    99+
    2023-06-08
  • Java基础入门篇之如何使用For循环
    这篇文章主要讲解了“Java基础入门篇之如何使用For循环”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java基础入门篇之如何使用For循环”吧! 一、for循环语句在java中...
    99+
    2023-06-15
  • 【Java基础篇】方法的使用(方法的重载和递归)
    作者简介: 辭七七,目前大一,正在学习C/C++,Java,Python等 作者主页: 七七的个人主页 文章收录专栏:Java.SE,本专栏主要讲解运算符,程序逻辑控制,方法的使用,数组的使用,类和对象,继承和多态,抽象类和接口等内容 ...
    99+
    2023-08-20
    java 开发语言 jvm
  • [Python]学习基础篇:常见的Pyt
    函数列表进制转换函数函数名称及参数功能用例bin(x)将数值x转化为二进制>>> x=10 >>> bin(10) 10hex(x)将数值x转化为十六进制>>> x=10 &g...
    99+
    2023-01-31
    常见 基础 Python
  • 【Java 基础篇】Java方法引用详解
    文章目录 导言一、方法引用的概念二、方法引用的语法三、方法引用的使用方法四、方法引用的限制和注意事项总结 导言 Java方法引用是Java 8引入的一项重要特性,它提供了一种简洁、可读...
    99+
    2023-09-02
    java jvm 开发语言
  • 完全不用基础的HTML5入门篇教程
    目录html5简介新特征HTML5的一些改进HTML5的多媒体注释:基础标题HTML段落HTML链接一个简单的代码例子html5简介 HTML5是构建Web内容的一种语言描述方式。H...
    99+
    2024-04-02
  • python基础篇之pandas常用基本函数汇总
    目录前言1、汇总函数2、特征统计函数3、唯一值函数4、替换函数总结前言 这篇主要整理pandas常用的基本函数,主要分为五部分: 汇总函数特征统计函数唯一值函数替换函数排序函数 1、...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作