在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>
相关推荐
杨杨杨大侠8 小时前
都能接模型、RAG 和 MCP,Java Agent 框架到底差在哪?
java
破茧蝴蝶8 小时前
Python分布式爬虫完整教程
开发语言·python
数据库小学妹8 小时前
国产数据库怎么选?兼容、迁移、核心案例与融合架构四道关
数据库·架构·国产数据库·数据库迁移·融合数据库
狗凯之家源码网8 小时前
全新 PHP 轻量客服聊天室源码深度评测
开发语言·php·聊天室系统
远离UE49 小时前
UE5 Substrate Thin Film 源码拆析
开发语言·javascript·ue5
keyipatience9 小时前
JavaScript学习(1)书写位置,变量、数据类型、运算符
开发语言·前端·javascript·css·学习
Thinker QAQ9 小时前
并发编程(九):BlockingQueue 与 Channel——语言层的原子性、可见性与有序性
java·python·go·并发编程·channel·blockingqueue·message passing
IvorySQL9 小时前
PostgreSQL 日报| PgBouncer 修复三个 CVE 漏洞(10 月 15 日)
数据库·postgresql·区块链
饺子大魔王的男人9 小时前
后台表格、查询、流程总在重复写?我用ToolJet把PostgreSQL直接做成可远程访问的业务系统
数据库·postgresql