在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>
相关推荐
马克Markorg1 小时前
使用rust实现的高性能api测试工具
开发语言·测试工具·rust·postman
无心水2 小时前
6、合纵连横:开源快速开发平台全解析与自建平台架构实战【终篇】
java·后端·科技·spring·面试·架构·开源
JiaHao汤2 小时前
一文掌握 SQL:数据定义、操作与查询完整教程
数据库·sql
ritxgt0062 小时前
Linux下安装Nginx服务及systemctl方式管理nginx详情
java
白太岁2 小时前
Redis:(3) Lua 与 Redis、基于连接池的 Facade 模式封装
数据库·c++·redis·lua·外观模式
闻哥2 小时前
Java虚拟机内存结构深度解析:从底层原理到实战调优
java·开发语言·jvm·python·面试·springboot
茶本无香2 小时前
【无标题】
java·设计模式·策略模式
wjs20242 小时前
HTML 属性详解
开发语言
zlp19922 小时前
Flink DataStream API 消费binlog kafka实践
数据库·flink·kafka