当前位置: 首页 > news >正文

【Java】Springboot整合redis

Jedis、Lettuce和Redis Template是java中三种常用的redis客户端工具。

Jedis是同步阻塞的Redis Java客户端,简单直接但线程不安全,需要连接池管理;Lettuce是基于 Netty 的异步非阻塞客户端,支持响应式编程且线程安全,性能更高;Redis Template是Spring提供的抽象层,默认基于Lettuce实现,提供了面向对象的 API 和自动序列化支持,与Spring 生态集成最佳。

redis配置文件

首先看一下redis配置文件,允许了远程访问,设置了密码为123456

daemonize yes
protected-mode no
#bind 127.0.0.1 -::1
requirepass 123456

添加redis依赖

pom.xml文件中添加Redis相关依赖

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

配置连接信息

application.propertiesapplication.yml配置文件中添加 Redis 连接信息

spring.data.redis.host=192.168.25.131
spring.data.redis.port=6379
spring.data.redis.password=123456

根据自己Redis服务器配置,修改主机和端口信息

在配置类中创建RedisTemplate Bean

@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory lettuceConnectionFactory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(lettuceConnectionFactory);
        // 设置key字符串序列化方式string
        template.setKeySerializer(new StringRedisSerializer());
        // 设置value的序列化方式为json
        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());

        template.setHashKeySerializer(new StringRedisSerializer());
        template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
        return template;
    }
}

使用配置类可以自定义序列化方式,如果不想使用配置类,也可以用内置的StringRedisTemplate

注意:如果正确配置了序列化方式,就不会出现中文乱码。此时如果从服务器的redis-cli获取key可能还会看见乱码,需要加上--raw参数重新启动redis客户端:redis-cli -a 123456 --raw

注入RedisTemplate

@Resource
private RedisTemplate<String, Object> template;

如果选择内置的StringRedisTemplate,就可以省略上一步,在这里直接注入StringRedisTemplate即可

@Resource
private StringRedisTemplate template;

执行redis操作

template.opsForValue().set("k1", "v1");
String k1 = (String) template.opsForValue().get("k1");

RedisTemplate是Spring Data Redis 提供的核心操作类,它封装了Redis的各种数据结构和操作命令,提供了类型安全的API。

字符串(String)操作opsForValue()

  • set(key, value):设置键值对
  • get(key):获取值
  • increment(key, delta):数值递增
  • setIfAbsent(key, value):不存在时才设置(原子操作)

哈希(Hash)操作opsForHash()

  • put(key, hashKey, value):设置哈希字段
  • get(key, hashKey):获取哈希字段值
  • entries(key):获取整个哈希表

列表(List)操作opsForList()

  • leftPush(key, value):左侧插入
  • rightPop(key):右侧弹出
  • range(key, start, end):获取范围元素

集合(Set)操作opsForSet()

  • add(key, values):添加元素
  • members(key):获取所有成员
  • isMember(key, value):判断是否成员

有序集合(ZSet)操作opsForZSet()

  • add(key, value, score):添加带分数的元素
  • range(key, start, end):按分数范围获取
  • rank(key, value):获取元素排名

通用操作

// 键操作
delete(key) // 删除键
hasKey(key) // 判断键是否存在
expire(key, timeout, timeUnit) // 设置过期时间

// 事务操作
multi() // 开始事务
exec() // 执行事务
discard() // 取消事务

// 发布/订阅
convertAndSend(channel, message) // 发布消息

相关文章:

  • 【go微服务】如何快速掌握grpc开发
  • 王者荣耀服务器突然崩了
  • 基于类型属性的重载
  • 标准库中有uint32_t类型吗?
  • 深入剖析Redis分布式锁:Redlock算法源码解读与实战
  • C++修炼:string类的使用
  • 前端Vue
  • 【HCIA-网工探长】12:生成树笔记
  • Python使用ccplot绘制CALIPSO L1B后向散射
  • C# 异步方法设计指南:何时使用 await 还是直接返回 Task?
  • C++ 字符处理、编码格式
  • 20250328易灵思FPGA的烧录器FT4232_DL的驱动安装
  • postgresql+patroni+etcd高可用安装
  • unity 截图并且展现在UI中
  • turtle的九个使用
  • 【数据分享】基于联合国城市化程度框架的全球城市边界数据集(免费获取/Shp格式)
  • Spring 拦截器(Interceptor)与过滤器(Filter)对比
  • 51c深度学习~合集4
  • 【学Rust写CAD】16 零标记类型(zero.rs)
  • linux scp复制多层级文件夹到另一服务器免密及脚本配置
  • 怎样制作做实景的网站/西安网站建设公司
  • 网站备案在哪里审批/上海网站推广公司
  • 做网站时java都做什么/百度优化关键词
  • 山西太原网站制作/谷歌浏览器下载安装2022
  • 高档网站建设/百度网址大全旧版
  • 动态网站建设 教学大纲/百度推广官网