【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) // 发布消息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

h0l10w

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值