在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>
相关推荐
会飞的大可7 分钟前
Redis Sentinel 高可用方案在WMS仓储管理系统的应用
redis·sentinel
本体智能13 分钟前
预制指标、宽表、SQL、本体ABC:真正决定长期成本的,是一次变更会波及多少层
数据库·sql·本体神经网络·uino数据智能引擎
长安110813 分钟前
数据库基础知识----数据库大观
数据库·oracle
小羊在睡觉15 分钟前
Reids缓存穿透、击穿、雪崩
redis·缓存·go
魔都吴所谓16 分钟前
【Python】从零构建:IP地理位置查询实战指南
开发语言·python·tcp/ip
环黄金线HHJX.43 分钟前
【吧里BaLi社区】
开发语言·人工智能·qt·编辑器
oioihoii1 小时前
Cursor根本无法调试C++
开发语言·c++
瀚高PG实验室1 小时前
使用hgdbdeveloper开发工具导出数据后在异机恢复时报错
数据库·瀚高数据库
GISer_Jing1 小时前
Agent多代理架构:子代理核心机制解密
开发语言·人工智能·架构·aigc