首页 > 数据库 >Redis的Java客户端

Redis的Java客户端

时间:2023-10-17 23:33:18浏览次数:36  
标签:Java 对象 Redis JSON Jedis 序列化 RedisTemplate 客户端

Jedis

以Redis命令作为方法名称,学习成本低,简单实用。但是Jedi s实例是线程不安全的,多线程环境下需要基于连接池来使用


lettuce(Spring默认使用)

Lettuce是基于Netty实现的,支持同步、异步和响应式编程方式,并且是线程安全的。支持Redis的哨兵模式、集群模式和管道模式。


Redission

Redisson是一个基于Redi s实现的分布式、可伸缩的Java数据结构集合。包含了诸如Map、Queue、Lock、Semaphore、Atomi cLong等强大功能。


Jedis使用的基本步骤:

1.引入依赖

2.创建Jedis对象,建立连接

3.使用Jedis, 方法名与Redis命令一致

4.释放资源

Jedis本身是线程不安全的,并且频繁的创建和销毁连接会有性能损耗,因此我们推荐大家使用Jedis连接池代替Jedis的直连方式。

SpringDataRedis

SpringData是Spring中数据操作的模块,包含对各种数据库的集成,其中对Redis的集成模块就叫做SpringDataRedis,官网地址: https://spring.io/ projects/spring-data-redis

●提供了对不同Redis客户端的整合(Lettuce和Jedis )

●提供了RedisTemplate统一API来操作Redis

●支持Redis的发 布订阅模型

●支持Redis哨兵和Redis集群

●支持基于Lettuce的响 应式编程

●支持基于JDK、JSON、字符串、Spring对象的数据序列化及反序列化

●支持基于Redis的jDKCollection实现


Redis的Java客户端_JSON


序列化

RedisTemplate可以接收任意0bject作为值写入Redis,只不过写入前会把Object序列化为字节形式,默认是采用JDK

序列化,得到的结果是这样的:

Redis的Java客户端_JSON_02

缺点:

●可读性差

●内存占用较大


StringRedisTemplate

尽管JSON的序列化方式可以满足我们的需求,但依然存在一些问题, 如图:

Redis的Java客户端_redis的java客户端_03

为了在反序列化时知道对象的类型,JSON序列化器会将类的class类型写入json结果中,存入Redis,会带来额外的内存开销。


为了节省内存空间,我们并不会使用JSON序列化器来处理value,而是统一使用String序列化器,要求只能存储String类型的key和value。当需要存储Java对象时,手动完成对象的序列化和反序列化。


RedisTemplate的两种序列化实践方案:
方案一:

1. 自定义RedisTemplate

2.修改RedisTemplate的序列化器为GenericJackson2JsonRedisSerializer

方案二:

1. 使用StringRedisTemplate

2.写入Redis时,手动把对象序列化为JSON

3.读取Redis时,手动把读取到的JSON反序列化为对象

标签:Java,对象,Redis,JSON,Jedis,序列化,RedisTemplate,客户端
From: https://blog.51cto.com/AmbitionGarden/7910567

相关文章

  • redis7.2.1在windows中通过docker使用的踩坑
    原本主要是参考了这两篇文章https://blog.csdn.net/weixin_45821811/article/details/116211724https://cloud.tencent.com/developer/article/1670205但是由于都是基于linux系统下的,可能与windows有些不同。首先,在https://hub.docker.com/_/redis?tab=tagsdocker官网上找到......
  • Docker下Redis安装
    Redis是一个开源的使用ansic语言编写、遵守bsd协议、支持网络、可基于内存、分布式、可选持久性的键值对(key-value)存储数据库准备工作安装源:DockerHub默认配置文件:配置文件示例创建文件目录C:\docker\redis\dataredis.conf#不限制IP访问,局域网能够访......
  • java基础漏洞学习----SQL注入漏洞
    java基础漏洞学习----SQL注入漏洞前置基础知识https://www.cnblogs.com/thebeastofwar/p/17759805.html执行SQL语句的几种方式1.Statement执行SQL语句java.sql.Statement是JavaJDBC下执行SQL语句的一种原生方式,执行语句时需要通过拼接来执行若拼接的语句没有经过过滤,将出......
  • 【Android面试】2023最新面试专题七:Java并发编程(二)
    6 ReentrantLock的实现原理这道题想考察什么?是否了解并发相关的理论知识是否对于锁机制有个全面的理论认知是否对于AQS原理有自己的理解考察的知识点锁的分类(公平锁、重入锁、重力度锁等等)ReentrantLock实现方式与Synchronized实现方式的异同点考生应该如何回答Java中的大部分同步......
  • redis基础
    一、介绍和安装1、 redis什么-数据库就是个存数据的地方:只是不同数据库数据组织,存放形式不一样 -mysql关系型数据库(oracle,sqlserver,postgrasql)-非关系型数据(nosql):redis,mongodb,clickhouse,infludb,elasticsearch,hadoop。。。 -没有sql:没有sql语句-......
  • 在Java中,HashMap和Hashtable之间的区别是什么?
    内容来自DOChttps://q.houxu6.top/?s=在Java中,HashMap和Hashtable之间的区别是什么?在Java中,HashMap和Hashtable之间的区别是什么?对于非多线程应用程序,哪种更高效?Java中HashMap和Hashtable之间有几个区别:Hashtable是同步的,而HashMap不是。这使得HashMap更适合非多线程应......
  • redis介绍和安装、redis普通连接和连接池、redis字符串类型、redis hash类型、redis列
    redis介绍和安装#1redis什么-数据库就是个存数据的地方:只是不同数据库数据组织,存放形式不一样-mysql关系型数据库(oracle,sqlserver,postgrasql)-非关系型数据(nosql):redis,mongodb,clickhouse,infludb,elasticsearch,hadoop。。。-没有sql:没有sql语句......
  • Java命名规范
    Java命名规范1.包命名规范包(Package)的作用是将功能相似或相关的类或者接口进行分组管理,便于类的定位和查找,同时也可以使用包来避免类名的冲突和访问控制,使代码更容易维护。通常,包名使用小写英文字母进行命名,并使用“.”进行分割,每个被分割的单元只能包含一个名词。一般地,包......
  • Java项目中常用的异常处理
    1.空指针异常(java.lang.nullpointerexception)发生该情况一般是字符串变量未初始化,数组未初始化,类对象未初始化等。还有一种情况是当该对象为空时你并没有判断是否为空值,这个错误我在之前的web习题上犯过,因此为了避免这种情况,除了检查是否初始化之外,如有必要则要加上判断是否为nul......
  • Java注解​
    Java注解学习目录:注解(Annotation)概述常见的Annotation示例自定义AnnotationJDK中的元注解利用反射获取注解信息(在反射部分涉及)1、注解概述从JDK5.0开始,Java增加了对元数据(MetaData)的支持,也就是Annotation(注解)Annotation其实就是代码里的特殊标记,这些标记可以在编......