在Java中操作Redis

一.Redis的Java客户端

Redis的Java客户端常用的有Jedis,Lettuce,Spring Data Redis,其中Spring Data Redis对Redis底层开发包进行了高度封装,在Spring项目中,

可以使用Spring Data Reids来简化操作。

二.Spring Data Redis使用方式

1.导入Spring Data Redis的maven坐标

复制代码
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

2.配置Redis数据源

复制代码
  redis:
      host: ${sky.redis.host}
      port: ${sky.redis.port}
      password: ${sky.redis.password}
      database: ${sky.redis.database}

  redis:
    host: localhost
    port: 6739
    password:
    database: 0

database如果胜率默认为0号数据库

配置文件不建议写死,方便后期更新和维护

3.编写配置类,创建Redis Template对象

配置类

复制代码
package com.sky.config;

import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
@Slf4j
public class RedisConfiguration {
    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
        log.info("开始创建RedisTemplate对象...");
        RedisTemplate redisTemplate = new RedisTemplate();
        //设置redis的连接工厂对象
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        //设置redis key的序列化容器
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        //设置redis value的序列化容器
        redisTemplate.setValueSerializer(new StringRedisSerializer());
        return redisTemplate;
    }
}

如果不设置序列化器会出现乱码问题,但是不影响数据的使用

4.通过RedisTemplate对象操作Redis

1.操作字符串类型数据

用途 核心语法 说明
设置值 redisTemplate.opsForValue().set("键", "值"); 如:set ("name", "张三")
设置值 + 过期时间 redisTemplate.opsForValue().set("键", "值", 5, TimeUnit.MINUTES); 5 分钟过期,TimeUnit 可选 SECONDS/HOURS 等
获取值 redisTemplate.opsForValue().get("键"); 返回 Object 类型,可强转成 String
删除值 redisTemplate.delete("键"); 通用删除语法,所有类型都能用

2.操作哈希类型数据

用途 核心语法 说明
设置单个字段 redisTemplate.opsForHash().put("哈希键", "字段名", "值"); 如:put ("user:1", "name", "李四")
批量设置字段 redisTemplate.opsForHash().putAll("哈希键", map); map 是 HashMap,key = 字段名,value = 值
获取单个字段 redisTemplate.opsForHash().get("哈希键", "字段名"); 如:get ("user:1", "name") 返回 "李四"
获取所有字段 + 值 redisTemplate.opsForHash().entries("哈希键"); 返回 Map<Object, Object>,包含所有字段
删除指定字段 redisTemplate.opsForHash().delete("哈希键", "字段1", "字段2"); 可删多个字段,返回删除数量
判断字段是否存在 redisTemplate.opsForHash().hasKey("哈希键", "字段名"); 返回 true/false

3.操作List类型数据

用途 核心语法
右侧加元素 redisTemplate.opsForList().rightPush("listKey", "值");
左侧加元素 redisTemplate.opsForList().leftPush("listKey", "值");
左侧弹出元素 redisTemplate.opsForList().leftPop("listKey");
获取指定范围元素 redisTemplate.opsForList().range("listKey", 0, -1); 0=-1 表示获取所有元素

4.操作set类型的数据

用途 核心语法
添加元素 redisTemplate.opsForSet().add("setKey", "值1", "值2");
获取所有元素 redisTemplate.opsForSet().members("setKey");
判断元素是否存在 redisTemplate.opsForSet().isMember("setKey", "值");
取两个集合交集 redisTemplate.opsForSet().intersect("set1", "set2");

5.操作zset类型的数据

用途 核心语法
添加元素(带分数) redisTemplate.opsForZSet().add("zsetKey", "值", 90.0); 分数 90.0,用于排序
按分数降序取前 3 名 redisTemplate.opsForZSet().reverseRange("zsetKey", 0, 2);
给元素加分数 redisTemplate.opsForZSet().incrementScore("zsetKey", "值", 5.0); 分数 + 5

6.通用操作

用途 核心语法 说明 / 示例
判断键是否存在 redisTemplate.hasKey("键名"); 返回 boolean,如 hasKey("name") → true/false
删除键(任意类型) redisTemplate.delete("键名"); 删除单个键,返回 boolean(是否删除成功)
批量删除键 redisTemplate.delete(Collections.singletonList("键1", "键2")); 传入集合批量删,返回删除成功的数量(Long 类型)
设置键的过期时间 redisTemplate.expire("键名", 60, TimeUnit.SECONDS); 给已存在的键设置过期时间(60 秒),TimeUnit 可选 SECONDS/MINUTES/HOURS 等
设置键的过期时间(指定时间点) redisTemplate.expireAt("键名", new Date(System.currentTimeMillis() + 60000)); 到指定时间戳(60 秒后)过期
移除键的过期时间(永久有效) redisTemplate.persist("键名"); 取消过期时间,键变为永久存储
获取键的剩余过期时间 redisTemplate.getExpire("键名"); 返回剩余秒数(Long),-1 = 永久有效,-2 = 键不存在
获取键的剩余过期时间(指定单位) redisTemplate.getExpire("键名", TimeUnit.MINUTES); 按指定单位返回剩余时间,如 TimeUnit.MINUTES → 剩余分钟数
重命名键 redisTemplate.rename("旧键名", "新键名"); 旧键必须存在,否则报错
安全重命名键(旧键存在才改名) redisTemplate.renameIfAbsent("旧键名", "新键名"); 新键若已存在则改名失败,返回 false
获取键的数据类型 redisTemplate.type("键名"); 返回枚举类型(如 StringType/HASH/LIST),表示键对应的 Redis 数据类型
模糊匹配键 redisTemplate.keys("通配符"); keys("user:*") → 匹配所有以 user: 开头的键,返回 Set<String>
相关推荐
霸道流氓气质4 分钟前
Java中信号量(Semaphore):从本地到分布式
java·开发语言·分布式
怪奇云呼军6 分钟前
G.711、Opus 和重采样会拖慢识别吗?闪电智能VoiceAgent 的音频入口怎么选
java·人工智能·python·算法·云计算·音视频
ZC跨境爬虫19 分钟前
LeetCode 27. 移除元素(双指针详解 + Java Python 多解法对比)
java·python·leetcode
路溪非溪35 分钟前
Python语言的执行流程总结
开发语言·python
逐米时代39 分钟前
智能招聘与人岗匹配:可解释匹配让录用依据有迹可循
大数据·数据库·人工智能
承渊政道39 分钟前
KES专业技能包发布:覆盖数据库开发、迁移与运维全流程
运维·数据库·gitee·数据库开发·金仓数据库
民乐团扒谱机43 分钟前
【超详解】量子克拉美罗下界QCRB:时延估计精度极限推导+MATLAB多场景绘图实战
开发语言·机器学习·matlab·量子力学·qcrb
kisbad1 小时前
Day 036|OpenAI Agents SDK 快速开始:今天跑通第一个 Agent
java·前端·javascript
憧憬成为java架构高手的小白1 小时前
langchain4j框架学习
java
Amir_zy1 小时前
Redis测试方法全攻略:冒烟、压测与稳定性验证
redis·压力测试