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

Redis基础知识-3

RedisTemplate对多种数据结构的操作

1. String类型

示例代码:
// 保存数据
redisTemplate.opsForValue().set("user:1001", "John Doe"); // 设置键值对,无过期时间
redisTemplate.opsForValue().set("user:1002", "Jane Smith", 10, TimeUnit.MINUTES); // 设置键值对并设置10分钟过期

// 获取数据
String user = redisTemplate.opsForValue().get("user:1001");
System.out.println("获取到的用户: " + user); // 输出:John Doe
应用场景:
  • 简单缓存:例如缓存用户的姓名、常量等单项数据。
  • 计数器:结合INCR命令实现原子递增,如统计网站访问量。

2. Hash类型

Redis的Hash数据类型适合存储对象,其中每个字段可以是字符串、数值等。

示例代码:
// 保存数据(保存用户对象的多个字段)
redisTemplate.opsForHash().put("user:profile", "name", "Alice");
redis_TEMPLATE.opsForHash().put("user:profile", "age", 30);

// 获取单个字段
Object name = redisTemplate.opsForHash().get("user:profile", "name");
System.out.println("用户名:" + name); // 输出:Alice

// 获取所有字段和值(返回Map)
Map<Object, Object> user = redisTemplate.opsForHash().entries("user:profile");
System.out.println("用户资料:" + user); // 输出:{name=Alice, age=30}
应用场景:
  • 对象缓存:存储用户信息(name、age、email等)。
  • 批量更新:通过hashOperations.putAll()一次性设置多个字段。

3. List类型

Redis的List是链表结构,支持从两端插入或弹出元素。

示例代码:
// 左侧插入元素(先进后出,类似栈)
redisTemplate.opsForList().leftPush("messageQueue", "Message1");
redisTemplate.opsForList().leftPush("messageQueue", "Message2");

// 获取所有元素(从左到右)
List<String> messages = redisTemplate.opsForList().range("messageQueue", 0, -1);
System.out.println("消息队列:" + messages); // 输出:[Message2, Message1]

// 右侧弹出元素(先进先出,类似队列)
String popped = redisTemplate.opsForList().rightPop("messageQueue");
System.out.println("弹出的消息:" + popped); // 输出:Message1
应用场景:
  • 消息队列:实现生产者-消费者模式(如异步处理任务)。
  • 记录日志:按时间或顺序保存数据。

4. Set类型

Set是一种无序、不重复的集合,常用于唯一性存储。

示例代码:
// 添加元素到集合
redisTemplate.opsForSet().add("tags", "Java", "Redis", "Spring");

// 获取所有元素
Set<String> tags = redisTemplate.opsForSet().members("tags");
System.out.println("标签集合:" + tags); // 输出:[Java, Redis, Spring]

// 判断元素是否存在
Boolean exists = redisTemplate.opsForSet().isMember("tags", "Redis");
System.out.println("Redis标签是否存在?" + exists); // 输出:true
应用场景:
  • 标签系统:统计不重复的用户标签或关键词。
  • 随机推荐:通过S随机获取选择用户。

5. Sorted Set类型

Sorted Set是有序且无重复的集合,每个元素关联一个分数(score)用于排序。

示例代码:
// 添加元素(分数和值)
redisTemplate.opsForZSet().add("leaderboard", "PlayerA", 95.0); // 分数95
redisTemplate.opsForZSet().add("leaderboard", "PlayerB", 88.0); // 分数88

// 获取排名前3的用户(按分数降序)
Set<String> topPlayers = redisTemplate.opsForZSet().reverseRange("leaderboard", 0, 2);
System.out.println("排行榜前3名:" + topPlayers); // 输出:[PlayerA, PlayerB]

// 获取某个玩家的排名
Long rank = redisTemplate.opsForZSet().reverseRank("leaderboard", "PlayerB");
System.out.println("PlayerB的排名:" + rank); // 输出:1(第2位)
应用场景:
  • 排名系统:如游戏或考试的分数排名。
  • 优先级队列:根据分数动态调整处理顺序。

通用注意事项:

  1. 序列化配置
    • 默认情况下,RedisTemplate会将Java对象序列化为二进制(如JdkSerializationRedisSerializer),适合存储简单字符串或复杂对象。
    • 若需要存储JSON格式的类,可配置:
      RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
      redisTemplate.setKeySerializer(new StringRedisSerializer());
      redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
      
  2. 过期时间:通过第二个参数为操作设置有效期,例如:
    redisTemplate.opsForValue().set("key", "value", Duration.ofHours(1));
    
  3. 事务与管道:使用multi()exec()opsFor...的批量操作优化性能。

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

相关文章:

  • linux - 字符设备驱动简介
  • MySql 数据库题目
  • 三防笔记本有什么用 | 三防笔记本有什么特别
  • CentOS中挂载新盘LVM指南:轻松扩展存储空间,解决磁盘容量不足问题
  • ORM mybits mybits-plus
  • 探索现代网络技术:从负载均衡到 Kubernetes
  • ECMAScript介绍
  • 使用C#写的一个Kafka的使用工具
  • git的作用,以及和github的区别
  • 数据结构与算法学习笔记----贪心区间问题
  • C++中的IO流
  • 【动态规划】最长上升子序列模板
  • 网络编程—网络概念
  • 国产编辑器EverEdit - 扩展脚本:让EverEdit支持“批量查找”功能
  • 使用 requests 和 BeautifulSoup 解析淘宝商品
  • 安利免费开源的声音克隆、文本转语音整合包软件、一键本地安装!
  • Shopify独立站开发与运营全解析
  • iOS 18.4修复多个核心安全漏洞,间接增强Find My服务的数据保护能力
  • 基于javaweb的SSM羽毛球会员俱乐部系统场馆课程运动设计与实现(源码+文档+部署讲解)
  • 五种音频器件综合对比——《器件手册--音频器件》
  • 【C++游戏引擎开发】《几何算法》(2):OBB射线检测
  • 【总结】SQL注入防护手段
  • 【11408学习记录】[特殊字符] 三步攻克英语长难句:嵌套结构×平行结构全解析
  • Linux中系统安全及应用
  • axios取消重复请求
  • Java基础:面向对象入门(一)
  • 【AI News | 20250403】每日AI进展
  • Java 实现 字母异位词分组
  • 5. 数据交互基础:从文本加载到向量存储的完整流程
  • Nyquist插件基础:LISP语法-运算符