RedisTemplate

news2024/11/25 10:59:29

jedis是redis官网推荐的一个面向java客服端,库文件实现了对各类API进行封装调用。

lettuce是一个redis的驱动包,Lettuce译为生菜。

jedis和lettuce都是redis的客户端,他们可以连接redis服务器.但是在springbot2.0以后都是使用的Lettuce客户端。因为当使用jedis连接redis服务器的时候,每个线程都要拿自己创建的实例去连接redis服务端,当有多个线程的时候,不仅开销大,还需要反复创建和关闭一个jedis连接,而且也是线程不安全的,一个线程通过Jedis实例更改redis服务器中数据会影响另一个线程。

但是如果用lettuce连接redis服务器的时候,就不会出现上面的情况,lettuce底层使用的是netty.当有多个线程需要连接redis服务器的时候,可以保证只创建一个lettuce连接。这样可以减少创建或关闭lettuce连接时候的开销。而这种方式是线程安全的。不会出现一个线程通过lettuce更改Redis服务器中的数据之后而影响另一个线程的情况。
Lettuce是基于Netty框架的事件驱动的Redis客户端,其方法调用是异步的,Lettuce的API也是线程安全的**,所以多个线程可以操作单个Lettuce连接来完成各种操作,同时Lettuce也支持连接池.**

RedisTemplate
key,value都是通过spring 提供的serializer序列化到数据库
RedisTemplate 提供的是JdkSeriallizationRedisSerializer会有乱码
key 被序列化成\xac\xed…,线程通过key 去查询value非常不方便。
StirngRedisTemplate 提供的是 StringRedisSerizalizer,不会乱码问题

RedsTemplate 源码
在这里插入图片描述
StringRedisTemplate源码,
在这里插入图片描述

redis-cli --raw 可处理 redis-cli中文乱码

解决redisTemplate的方案

@Configuration
@EnableRedisRepositories
public class RedisConfiguration {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(factory);

        ObjectMapper objectMapper = new ObjectMapper();
        JavaTimeModule timeModule = new JavaTimeModule();
        timeModule.addDeserializer(LocalDateTime.class,
                new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        timeModule.addSerializer(LocalDateTime.class,
                new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        objectMapper.disable(MapperFeature.IGNORE_DUPLICATE_MODULE_REGISTRATIONS);
        objectMapper.registerModules(timeModule);
        objectMapper.activateDefaultTyping(objectMapper.getPolymorphicTypeValidator(),
                ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);

        objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
//乱码处理

        StringRedisSerializer serializer = new StringRedisSerializer();
        // 将key 序列化为string
        redisTemplate.setKeySerializer(serializer);
       
        redisTemplate.setHashKeySerializer(serializer);

        GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer(objectMapper);
         // 将value 序列化为json
        redisTemplate.setValueSerializer(jsonRedisSerializer);
        redisTemplate.setHashValueSerializer(jsonRedisSerializer);
        redisTemplate.afterPropertiesSet();
        return redisTemplate;

    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/559641.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ImageCombiner是一个专门用于Java服务端图片合成的工具

1.1 项目背景 最近公司上了不少传播方面的需求&#xff0c;免不了合成各种营销图片&#xff0c;图片合成本身并不是什么高深的技术&#xff0c;但用底层api去搞确实繁琐&#xff0c;于是抽时间封装了一个小工具&#xff0c;初衷是解放生产力&#xff0c;后来发现挺好使&#x…

Unity之OpenXR+XR Interaction Toolkit实现 VR控制第一人称角色模型动画

前言 我们在开发VR项目时,有时会有第一人称视角的需求,即我们自己带上VR头显,能够看到自己的身体,如果模拟一些人物触电死亡,使用工具动画之类的需求,那么VR控制第一人称视角就比较实用了。 我们今天就来介绍一下如何实现VR设备控制第一人称: 1.角色手部跟随手柄移动和…

ERROR: No matching distribution found for ray解决办法

报错&#xff1a; from ray.rllib.algorithms.apex_dqn import ApexDQN ModuleNotFoundError: No module named ray 解决办法&#xff1a; pip install "ray[rllib]" -i https://pypi.tuna.tsinghua.edu.cn/simple

【网络技术】防火墙配置单机旁挂模式

组网需求 某公司网络部署Agile Controller服务器组&#xff0c;同时以旁挂方式部署FW于网络出口&#xff0c;如图1所示&#xff0c;要求&#xff1a; •用户角色不同&#xff0c;能访问的网络资源也不同&#xff08;在Agile Controller服务器中配置&#xff09;。 •用户角色…

k8s 中 pod 是如何做到网络共享的

前言 在k8s中, pod是编排的最小单位, 在同一个pod中, 容器之间能够共享hostname network 等内容. 共享network, 简单说就是同一个pod中的容器, 可以通过访问localhost互相访问, 且端口占用会冲突. 在之前的介绍中提到过, 容器的隔离是通过namespace技术实现的, 网络隔离自然…

Android新logcat使用技巧

Android新logcat使用技巧 logcat新UI出现后&#xff0c;我常困惑于怎么过滤log&#xff0c;和以前的UI差异比较大&#xff0c;新UI界面结构如下&#xff1a; 这个新的 logcat 的问题是如何过滤信息并不是很明显。 获取应用的日志信息 要获取我们当前调试应用的日志信息&…

技术大佬们都是怎么学习的?

目录 问题 熟悉更多业务 熟悉端到端 自学 Do exercise Learning trying Teaching 问题 今天逛帖子的时候&#xff0c;看到这么个问题&#xff1a; 这个问题我曾经也很好奇过&#xff0c;那些成为技术大佬的人当初是怎么学习&#xff0c;以及怎么成长过来的&#xff0…

就业内推 | 上市游戏公司,六险一金,最高30K*13薪

01 吉比特 &#x1f537;招聘岗位&#xff1a;网络工程师 &#x1f537;职责描述&#xff1a; 1、参与公司整体网络规划&#xff0c;制定网络运行规范 2、负责网络监控、应急相应等日常运维工作&#xff0c;及时定位及故障处理 3、负责数据中心内基础架构维护 4、负责企业I…

低代码平台:解决项目管理中的瓶颈难题

随着数字化时代的到来&#xff0c;项目管理已经成为现代企业中不可或缺的一部分。尤其是在软件开发、信息技术、新产品开发等领域&#xff0c;项目管理的重要性更加凸显。然而&#xff0c;项目管理中存在着许多痛点和瓶颈难题&#xff0c;如项目周期长、成本高、协作难度大等。…

Spring Boot进阶(38):SpringBoot之跨域配置 | 超级详细,建议收藏

1. 前言&#x1f525; 我们都知道springboot默认日志是打印在控制台中的&#xff0c;不会以文件的形式进行保存。那么日后系统上线肯定是有需要对日志进行定位分析问题的&#xff0c;那么如何实现将控制台输出的日志保存起来&#xff1f; 这将又会是干货满满的一期&#xff0c;…

最新Java适配商城系统

城前端功能展示 商城移动端 后端基于SpringBoot 研发&#xff0c;前端使用 Vue、uniapp开发 前后端分离&#xff0c;支持分布式部署&#xff0c;支持Docker&#xff0c;各个API独立&#xff0c;并且有独立的消费者 api不需要单独部署&#xff0c;只需启动一个jar包就可以正…

c语言基础知识(知识点较为完整)

计算机和c语言基础知识 计算机常识 什么是计算机? 顾名思义&#xff0c;就是能够进行数据运算的机器(台式电脑、笔记本电脑、平板电脑、智能手机) 计算机_百度百科 计算机的发明者是谁 ? 关于电子计算机的发明者是谁这一问题&#xff0c;有好几种答案: 1936年英国数学家…

Lamini:大语言模型精调框架

Lamini&#xff1a;大语言模型精调框架 精调是大型语言模型 (LLM) 开发生命周期中最困难的部分之一。如果我们谈论的是诸如人类反馈强化学习 (RLHF) 之类的技术&#xff0c;那么这个过程尤其具有挑战性&#xff0c;因为这需要特别复杂的工作流程。 最近&#xff0c;我发现诞生…

11 长效保证机制:伦理道德风险外溢临界模型

AI系统上线后&#xff0c;随着不断的投入使用AI系统会自我学习和自我演进&#xff0c;这也导致了AI系统的伦理道德性并不是一次性的验证&#xff0c;而是需要按照一定的周期不断的验证&#xff0c;通过按周期巡检的方式持续的评估AI系统的伦理道德风险的外溢可能性。如何建立一…

css、js(vue)进行textarea自适应高度(超详细说明)

文章目录 需求——如下图一、纯css 的自适应高度&#xff08;有问题&#xff0c;不推荐&#xff09;1.css代码2. html代码3. 代码截图说明4. 效果和会出现的问题 二、js 的自适应高度0.思路1.代码1. css代码2. html代码3. js代码 2.代码说明3.注意点导致的问题&#xff08;0&am…

spark-sql写入对象存储路径不存在问题(异常路径自动消失)

一、问题分析 1, 环境 spark3.2 hadoop3.2.2 2, 问题现象 insert overwrite table到hive表时&#xff0c;出现路径不存在的报错&#xff0c;导致任务失败。 当表的路径在hdfs上时&#xff0c;没有问题。 表的路径在对象存储上时会有问题。 insert overwrit…

python如何连接mysql数据库

python链接mysql数据库要用到pymysql模块中的connect &#xff0c;connect函数是pymysql模块中 用于连接MySQL数据库的一个函数。 所以连接mysql之前需要先导入pymysql模块。 第一步&#xff0c;mysql模块下载 方法1&#xff08;使用pip命令安装&#xff09;&#xff1a; 因…

测试岗位是巨坑,7年测试告诉你千万别入行.....

每次都有人问我软件测试的前景是什么样的&#xff0c;每年也会有人很多人纷纷涌入测试的岗位上&#xff0c;希望自己能够进入阿里、华为等大厂 但是测试岗位真的那么吃香吗&#xff1f;今天我结合从零基础小白到测试开发的成长经历&#xff0c;来说下这个行业的发展前景&#…

微信小程序仿网易音乐播放器项目

一、项目展示 主页&#xff1a; 播放页&#xff1a; 搜索页&#xff1a; 排行榜页&#xff1a; 小控件&#xff1a; 二、项目结构 三、项目功能点 后端接口&#xff0c;使用node写的&#xff0c;使用了网易云音乐API&#xff1a; 封装的api文件 //env是基础地址js文件 im…

05 JDBC基础

什么是持久化 将内存中的数据永久保存在磁盘中,方便以后使用 JDBC是什么 java数据库连接 用于执行sql语句的java API java官方提供接口,各大厂商提供实现类,程序员使用实现类的jar包 JDBC的开发流程 添加包: mysql-connector-java-5.1.48.jar lombok.jar 口诀:贾连欲…