【Redis 二】Redis客户端(Jedis、SpringDataRedis、RedisTemplate)

1. Redis客户端

  1. Jedis
    1. 以redis命令作为方法名称,学习成本低,但是Jedis实例是线程不安全的,多线程环境下需要基于连接池来使用(必须为每个线程分配独立的Jedis连接)
  2. lettuce
    1. 基于Netty实现,支持同步、异步和响应式编程方式,并且是线程安全的。支持Redis的哨兵模式、集群模式和管道模式
  3. Redisson
    1. 是一个基于Redis实现的分布式、可伸缩的Java数据结构集合。包含了诸如Map、Queue、Lock、Semaphore、AtomicLong等强大功能

1.1 Jedis

使用步骤:

  1. 引入依赖
  2. 建立连接
  3. 使用jedis
  4. 释放资源

1.2 Jedis连接池

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

2. SpringDataRedis

在Spring中可以通过注入RedisTemplate的方式(底层连接可以选择jedis、lettuce)来使用redis,需要在配置文件中配置redis信息

jedis所使用的方法名多数与redis调用保持一致,redisTemplate则是对redis调用进行了封装

redisTemplate方法名:

  1. opsForValue:操作String类型
  2. opsForHash:操作Hash类型
  3. opsForList:操作List类型
  4. opsForSet:操作Set类型
  5. opsForZSet:操作SortedSet类型

2.1 RedisTemplate序列化方案

RedisTemplate可以接受任意的Object作为键、值写入redis,但是会在写入前将Object序列化为字节形式,默认采用JDK序列化,可读性差且内存占用较大,可以通过设置redis序列化器的方式来避免使用JDK序列化

方案一:

  1. 自定义RedisTemplate
  2. 修改RedisTemplate的序列化器为GenericJackson2JsonRedisSerializer

方案二:

  1. 使用StringRedisTemplate
  2. 写入Redis时,手动将对象序列化为Json(ObjectMapper)
  3. 读取Redis时,手动将读取到的Json反序列化为对象
相关推荐
熏鱼的小迷弟Liu1 小时前
【Redis】Redis Zset实现原理:跳表+哈希表的精妙设计
数据库·redis·散列表
观无4 小时前
Redis远程链接应用案例
数据库·redis·缓存·c#
星星点点洲4 小时前
【缓存与数据库结合方案】伪从技术 vs 直接同步/MQ方案的深度对比
数据库·缓存
好想有猫猫6 小时前
【Redis】服务端高并发分布式结构演进之路
数据库·c++·redis·分布式·缓存
孔令飞7 小时前
使用 Go 与 Redis Streams 构建可靠的事件驱动系统
redis·ai·云原生·golang·kubernetes
yuanlaile7 小时前
Go全栈_Golang、Gin实战、Gorm实战、Go_Socket、Redis、Elasticsearch、微服务、K8s、RabbitMQ全家桶
linux·redis·golang·k8s·rabbitmq·gin
高效匠人7 小时前
FastAPI + Redis Pub/Sub + WebSocket 组合解决方案的详细介绍
redis·websocket·fastapi
lovebugs8 小时前
Redis的高性能奥秘:深入解析IO多路复用与单线程事件驱动模型
redis·后端·面试
爱的叹息8 小时前
MyBatis缓存配置的完整示例,包含一级缓存、二级缓存、自定义缓存策略等核心场景,并附详细注释和总结表格
缓存·mybatis
山猪打不过家猪9 小时前
(六)RestAPI 毛子(外部导入打卡/游标分页/Refit/Http resilience/批量提交/Quartz后台任务/Hateoas Driven)
网络·缓存