Redis的Java客户端
  RuXuq8CpAyRj 2023年11月02日 62 0
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客户端_序列化_02

缺点:

●可读性差

●内存占用较大


StringRedisTemplate

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

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反序列化为对象

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
RuXuq8CpAyRj