当前位置: 首页 > news >正文

Spring Boot 集成Redis中 RedisTemplate 及相关操作接口对比与方法说明

RedisTemplate 及相关操作接口对比与方法说明


1. RedisTemplate 核心接口与实现类

RedisTemplate 是 Spring Data Redis 的核心模板类,通过 opsFor... 方法返回不同数据类型的操作接口,每个接口对应 Redis 的一种数据结构。以下是主要接口及其实现类:


2. 各操作接口及方法说明
(1) RedisValueOperations<K, V>
  • 对应数据类型:字符串(String)
  • 实现类DefaultRedisScriptingOperations(内部实现)
  • 主要方法
    • set(K key, V value):设置键值对。
    • set(K key, V value, long offset):设置指定偏移量的值(如追加字符串)。
    • getExpire(K key):获取键的剩余过期时间(毫秒)。
    • multiSet(Map<K, V> map):批量设置键值对。
    • increment(K key, long delta):对数值键执行递增操作。
    • append(K key, String value):追加字符串到现有值末尾。

(2) RedisHashOperations<K, HK, HV>
  • 对应数据类型:哈希(Hash)
  • 实现类DefaultHashOperations(内部实现)
  • 主要方法
    • put(K key, HK hashKey, HV hashValue):在哈希中设置字段值。
    • get(K key, HK hashKey):获取哈希中的字段值。
    • entries(K key):获取哈希中所有字段和值。
    • hasKey(K key, HK hashKey):判断哈希中是否存在字段。
    • increment(K key, HK hashKey, long delta):递增哈希中的数值字段。

(3) RedisListOperations<K, V>
  • 对应数据类型:列表(List)
  • 实现类DefaultListOperations(内部实现)
  • 主要方法
    • leftPush(K key, V value):从左侧(头)插入元素。
    • rightPush(K key, V value):从右侧(尾)插入元素。
    • leftPop(K key):弹出并返回左侧元素。
    • range(K key, long start, long end):获取列表切片。
    • trim(K key, long start, long end):截取列表到指定范围。

(4) RedisSetOperations<K, V>
  • 对应数据类型:集合(Set)
  • 实现类DefaultSetOperations(内部实现)
  • 主要方法
    • add(K key, V... values):添加元素到集合。
    • remove(K key, V... values):从集合中移除元素。
    • members(K key):获取集合中所有元素。
    • isMember(K key, V value):判断元素是否存在于集合中。
    • randomMember(K key):随机获取一个元素。

(5) RedisZSetOperations<K, V>
  • 对应数据类型:有序集合(Sorted Set)
  • 实现类DefaultZSetOperations(内部实现)
  • 主要方法
    • add(K key, V value, double score):添加元素及分数。
    • rangeByScore(K key, double min, double max):按分数范围获取元素。
    • score(K key, V value):获取元素的分数。
    • removeRangeByScore(K key, double start, double end):按分数范围删除元素。
    • rank(K key, V value):获取元素的排名(从小到大)。

(6) RedisGeoOperations<K, V>
  • 对应数据类型:地理位置(Geo)
  • 实现类DefaultGeoOperations(内部实现)
  • 主要方法
    • add(K key, V member, double longitude, double latitude):添加地理位置。
    • distance(K key, V member1, V member2):计算两点距离。
    • radius(K key, double longitude, double latitude, double radius, RedisGeoCommands.DistanceUnit unit):获取指定半径内的元素。
    • position(K key, V member):获取元素的经纬度坐标。

(7) RedisStreamOperations<K, V>
  • 对应数据类型:流(Stream,Redis 5+)
  • 实现类DefaultStreamOperations(内部实现)
  • 主要方法
    • add(K key, StreamEntryID id, Map<Field, V> values):向流中添加条目。
    • read(K key, StreamOffset<K> streamOffset):读取流数据。
    • acknowledge(K key, Consumer consumer, StreamEntryID... ids):确认已处理的条目。
    • trim(K key, long maxEntries):按最大条目数截断流。

对比表格

接口对应数据类型核心方法典型场景
RedisValueOperations字符串(String)set, get, increment, append简单键值存储(如计数器、缓存)
RedisHashOperations哈希(Hash)put, get, entries, increment对象属性存储(如用户资料)
RedisListOperations列表(List)leftPush, rightPush, leftPop, range队列/栈操作(如消息队列)
RedisSetOperations集合(Set)add, remove, members, isMember去重存储(如标签、唯一用户列表)
RedisZSetOperations有序集合(ZSet)add, rangeByScore, score, rank排名/优先级队列(如排行榜)
RedisGeoOperations地理位置(Geo)add, distance, radius, position地理信息查询(如附近商家)
RedisStreamOperations流(Stream)add, read, acknowledge, trim流式数据处理(如日志、事件队列)

总结与建议

  1. 选择接口:根据 Redis 数据类型选择对应操作接口(如列表用 RedisListOperations)。
  2. 原子性操作:复杂操作可通过 RedisTemplate.execute(SessionCallback) 实现事务性。
  3. 性能优化
    • 批量操作(如 multiSet)减少网络开销。
    • 使用 RedisTemplate.setEnableTransactionSupport(true) 开启事务支持。
  4. 高级功能:如地理位置查询(RedisGeoOperations)或流处理(RedisStreamOperations)需结合具体业务场景。

示例代码

@Service
public class RedisService {

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    public void demoOperations() {
        // 字符串操作
        redisTemplate.opsForValue().set("counter", 0);
        redisTemplate.opsForValue().increment("counter", 1); // 原子递增

        // 哈希操作
        redisTemplate.opsForHash().put("user:1001", "name", "张三");
        redisTemplate.opsForHash().increment("user:1001", "age", 1);

        // 列表操作
        redisTemplate.opsForList().rightPush("queue", "message1");
        redisTemplate.opsForList().leftPop("queue");

        // 地理位置
        redisTemplate.opsForGeo().add(
            "locations", "星巴克", 116.397428, 39.90923;
        );
        redisTemplate.opsForGeo().radius("locations", 116.3, 39.9, 1000, KILOMETERS);
    }
}

根据业务需求选择合适的数据类型和接口,灵活使用 Redis 的强大功能!

http://www.dtcms.com/a/106761.html

相关文章:

  • #Linux内存管理# 假设设备上安装了一块2G的物理内存,在系统启动时,ARM Linux内核是如何映射的?
  • RAG 和 RAGFlow 学习笔记
  • 【VUE3】Pinia
  • ARM 性能分析工具:Streamline
  • 高并发内存池(二):Central Cache的实现
  • Java 进化之路:从 Java 8 到 Java 21 的重要新特性
  • 【爬虫基础】第三部分 爬虫请求库 1/4
  • Android 防抖和节流
  • 【Kafka基础】Kafka工作原理解析
  • 英语口语 -- 常用 1368 词汇
  • 206. 反转链表 92. 反转链表 II 25. K 个一组翻转链表
  • 店铺状态设置-03.功能测试
  • Kotlin问题汇总
  • AI:机器学习-线性回归
  • 边缘计算赋能淘宝API:分布式节点缓存降低高并发延迟
  • 风电行业预测性维护解决方案:AIoT驱动下的风机健康管理革命
  • 多模态RAG实践:如何高效对齐不同模态的Embedding空间?
  • arcgis10.8 Toolbox中的conversion tools没有to coverage工具?
  • 4. 理解Prompt Engineering:如何让模型听懂你的需求
  • 【Kafka基础】基础概念解析与消息队列对比
  • Redis如何在windows中简单安装?
  • 线性DP总结
  • Centos 8 安装教程(新手版)
  • element-ui自制树形穿梭框
  • python操作es
  • 机器学习的一百个概念(8)插补法
  • LeetCode hot 100—最长递增子序列
  • PyQt5界面设计
  • 现代几何风格网页标牌标识logo海报标题设计psai英文字体安装包 Myfonts – Gilroy Font Family
  • React安装使用教程