Redis结合SpringBoot 基本使用

1.1 简介

1.1.1 概述

Spring Data 中有一个成员 Spring Data Redis,他提供了 RedisTemplate 可以在 Spring 应用中更简便的访问 Redis 以及异常处理及序列化,支持发布订阅等操作。

1.2 RedisTemplate 常见 API

RedisTemplate 针对 jedis 客户端中大量 API 进行了归类封装,将同一类型操作封装为 operation 接口

♞ ValueOperations: 简单 string 操作
 ♞ ListOperations: 针对 list 类型的数据操作
 ♞ HashOperations: 针对 hash 即 map 类型的数据操作
 ♞ SetOperations: set 类型数据操作
 ♞ ZSetOperations: zset 类型数据操作

☞ 示例

复制代码
@SpringBootTest
public class RedisTest {
    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    public void redis() {
        redisTemplate.opsForValue().set("name", "张三");
        Object name = redisTemplate.opsForValue().get("name");
        System.out.println(name);
    }
}

1.2.2 BoundKeyOperations

RedisTemplate 提供了对 key 的 bound(绑定) 便捷化操作 API,可以通过 bound 封装指定的 key,然后进行一系列的操作而无须显式的再次指定 Key。

♞ BoundValueOperations: 绑定 string 类型的 key

♞ BoundListOperations: 绑定 list 类型的 key
 ♞ BoundHashOperations: 绑定 hash 即 map 类型的 key
 ♞ BoundSetOperations: 绑定 set 类型的 key

♞ BoundZSetOperations: 绑定 zset 类型的 key

☞ 示例

复制代码
@SpringBootTest
public class RedisTest {
    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    public void redis() {
        Object name = redisTemplate.boundValueOps("name").get();
        System.out.println(name);
    }
}

1.3 数据操作

1.3.1 通用方法
(通用方法)删除 key
复制代码
// 删除单个 key,返回布尔值
redisTemplate.delete(K key);

// 删除多个 key,返回删除的个数
redisTemplate.delete(Collection<K> keys);
(通用方法)判断 key 是否存在
复制代码
// 返回布尔值
redisTemplate.hasKey(key);
(通用方法) key 有效时间
复制代码
// 指定有效时间
redisTemplate.expire(key, time, TimeUnit.MINUTES);

// 获取有效时间,返回值单位为秒
redisTemplate.getExpire(key);
1.3.2 操作 string
(string类型)添加数据
复制代码
// 通过 ValueOperations 设置值
ValueOperations ops = redisTemplate.opsForValue();
// 存入数据
ops.set(key, value);	
// 设置过期时间
ops.set(key, value, time, TimeUnit.SECONDS);	

// 通过 BoundValueOperations 设置值
BoundValueOperations key = redisTemplate.boundValueOps(key);
key.set(value);
key.set(value, time, TimeUnit.SECONDS);
(string类型)获取数据
复制代码
// 通过 ValueOperations 获取值
redisTemplate.opsForValue().get(key);

// 通过 BoundValueOperations 获取值
redisTemplate.boundValueOps(key).get();
1.3.3 操作 list
(list类型) 添加数据
复制代码
// 通过 ValueOperations 设置值
ListOperations opsList = redisTemplate.opsForList();
opsList.leftPush(listKey, listLeftValue);
opsList.rightPush(listKey, listRightValue);
// 存入集合
opsList.rightPushAll(list);	
opsList.leftPushAll(list);

// BoundValueOperations 操作类似
(list类型) 获取数据
复制代码
// 获取集合中的数据
redisTemplate.boundListOps(listKey).range(startIndex, endindex); 

// 根据索引获取数据
redisTemplate.boundListOps(listKey).index(index);

// 集合长度
redisTemplate.boundListOps(listKey).size();
(list类型) 删除数据
复制代码
// 从左侧弹出一个元素并返回
redisTemplate.boundListOps(listKey).leftPop();  

// 从右侧弹出一个元素并返回
redisTemplate.boundListOps(listKey).rightPop(); 

// 移出 N 个值为 value 的元素
redisTemplate.boundListOps(listKey).remove(long, value); 
(list类型)修改数据
复制代码
// 根据索引修改数据
redisTemplate.boundListOps(listKey).set(index, listLeftValue);
1.3.4 hash
(hash类型)添加数据
复制代码
// 通过 BoundValueOperations 设置值
BoundHashOperations hashKey = redisTemplate.boundHashOps(HashKey);
hashKey.put(key, Vaue);
// 添加一个集合
hashKey.putAll(hashMap); 

// 通过 ValueOperations 设置值
HashOperations hashOps = redisTemplate.opsForHash();
hashOps.put(HashKey, key, Vaue);
(hash类型)获取数据
复制代码
// 获取所有小 key
redisTemplate.boundHashOps(HashKey).keys();

// 根据小 key 获取值
redisTemplate.boundHashOps(HashKey)get(key);

// 获取所有键值对集合
redisTemplate.boundHashOps(HashKey).entries();
(hash类型)删除数据
复制代码
// 判断 hash 中是否存在小 key
redisTemplate.boundHashOps(HashKey).hasKey(key);

// 根据小 key 删除值
redisTemplate.boundHashOps(HashKey).delete(key);
1.3.5 set
(hash类型) 添加数据
复制代码
// 通过 BoundValueOperations 设置值
redisTemplate.boundSetOps(setKey).add(setValue1, setValue2, setValue3);

// 通过 ValueOperations 设置值
redisTemplate.opsForSet().add(setKey, SetValue1, setValue2, setValue");
(hash类型) 获取数据
复制代码
// 获取所有值
redisTemplate.boundSetOps(setKey).members();

// 获取 set 的长度
redisTemplate.boundSetOps(setKey).size();
(hash类型)删除数据
复制代码
// 判断 set 中是否存在改值
redisTemplate.boundSetOps(setKey).isMember(setValue);

// 移出指定的值
redisTemplate.boundSetOps(setKey).remove(setValue);
1.3.6 zset
(Zset类型) 添加数据
复制代码
// 通过 BoundValueOperations 设置值
redisTemplate.boundZSetOps(zSetKey).add(zSetVaule, score);

// 通过 ValueOperations 设置值
redisTemplate.opsForZSet().add(zSetKey, zSetVaule, score);
(Zset类型)获取数据
复制代码
// 获取元素集合, 按照排名先后(从小到大)
redisTemplate.boundZSetOps(zSetKey).range(key, startIndex, endIndex);

// 获取指定值的分数(权重)
redisTemplate.boundZSetOps(zSetKey).score(zSetVaule);

// 获取 zset 长度
redisTemplate.boundZSetOps(zSetKey).size();
(Zset类型)修改分数
复制代码
// 修改指定元素的分数
redisTemplate.boundZSetOps(zSetKey).incrementScore(zSetVaule, score);

(Zset类型)删除数据

复制代码
// 删除指定元素
redisTemplate.boundZSetOps(zSetKey).remove(zSetVaule);

// 删除指定索引范围的元素
redisTemplate.boundZSetOps(zSetKey).removeRange(strat, end);

// 删除指定分数范围的元素
redisTemplate.boundZSetOps(zSetKey).removeRangeByScorssse(strat, end);
相关推荐
惊讶的猫1 小时前
redis分片集群
数据库·redis·缓存·分片集群·海量数据存储·高并发写
期待のcode1 小时前
Redis的主从复制与集群
运维·服务器·redis
jiunian_cn2 小时前
【Redis】渐进式遍历
数据库·redis·缓存
SoleMotive.2 小时前
谢飞机爆笑面经:Java大厂3轮12问真题拆解(Redis穿透/Kafka分区/MCP Agent)
redis·spring cloud·kafka·java面试·mcp
椰子今天很可爱3 小时前
Redis进阶
redis
jiunian_cn3 小时前
【Redis】数据库管理操作
数据库·redis·缓存
惊讶的猫3 小时前
Redis 哨兵(Sentinel)介绍
redis·redis哨兵
猫头虎3 小时前
基于信创openEuler系统安装部署OpenTeleDB开源数据库的实战教程
数据库·redis·sql·mysql·开源·nosql·database
静听山水4 小时前
Redis核心数据结构-ZSet
数据结构·redis
Dontla4 小时前
黑马大模型RAG与Agent智能体实战教程LangChain提示词——6、提示词工程(提示词优化、few-shot、金融文本信息抽取案例、金融文本匹配案例)
redis·金融·langchain