Redis6大基础数据结构以及在spring中的常用命令
发布日期:2021-05-10 02:13:55 浏览次数:9 分类:精选文章

本文共 2897 字,大约阅读时间需要 9 分钟。

Redis 6大基础数据结构

Redis 是一款功能强大的开源数据库,广泛应用于缓存、消息队列、实时数据分析等领域,其基础数据结构为用户提供了多样化的存储和操作选择。以下是 Redis 6大基础数据结构的详细介绍:


1. 字符串

字符串 是 Redis 最基础的数据结构,主要以键值对形式存储,类似于传统的 Map 数据结构,通过键快速定位值。

  • 特点

    • Redis Template 的 keySerializer 和 valueSerializer 参数需要设置为 stringRedisSerializer,否则可能导致存储的 value 为异常类别。
    • 字符串可以是非数字或数字形式,Redis支持简单的字符串操作,如 appendgetsubstr 等。
  • 示例

    redisTemplate.opsForValue().set("key1", "111");Long length = redisTemplate.opsForValue().size("key1");String old_value = (String) redisTemplate.opsForValue().getAndSet("key1", "new_111");

    除此之外,Redis 还支持数字运算,如 incrementdecr 等操作。


2. 哈希

哈希 是 Redis 中另一种核心数据结构,类似于散表(Map),主要用于存储字段与值的映射关系。其键值对在 Redis 内存中是无序存储的。

  • 注意事项

    • 在使用哈希结构时,需要注意序列化规则。默认的 defaultSerializer 可能不适用,需明确配置 hashKeySerializerhashValueSerializer
    • HashMap 类型的存储需要特别注意哈希冲突问题。
  • 操作示例

    Map
    map = new HashMap<>();map.put("f1", "val1");map.put("f2", "v2");redisTemplate.opsForHash().putAll("hash_key", map);Set
    keys = redisTemplate.opsForHash().keys("hash_key");

    通过 hsethmset 命令可实现字段的增删查改。


3. 链表 (List)

链表 是一种有序、双向的数据结构,适用于需要按顺序存储和操作的场景。Redis 链表支持高效的增删查改操作,且可以实现阻塞策略以保障数据一致性。

  • 操作示例
    // 链表的基本操作redisTemplate.opsForList().leftPush("list_key", "node1");List
    nodeList = Arrays.asList("node1", "node2");redisTemplate.opsForList().leftPushAll("list_key", nodeList);// 阻塞操作redisTemplate.opsForList().rightPop("list_key", 1, TimeUnit.SECONDS);

    需要注意的是,部分操作如 lrange 可能不完全支持,需结合底层命令或 RedisListCommands 组mando 进行操作。


4. 集合 (Set)

集合 不是一个线性结构,而是一个基于哈希表的无序数据存储结构,具备唯一性保证。集合的基本操作包括存储、删除和随机取元素等。

  • 特点

    • 集合中的元素不允许重复,插入重复元素会失败。
    • 支持集合间的交集、并集和差集操作。
  • 操作示例

    // 集合的基本操作Set
    set1 = new HashSet<>();set1.add("v1");set1.add("v2");// 操作示例Set
    diffSet = redisTemplate.opsForSet().differenceAndStore("set1", "set2", "diff_set");

    需要注意的是,集合操作返回的类型可能是 SetList,具体取决于 Redis 命令的返回结果。


5. 有序集合 (ZSet)

有序集合 是在哈希表基础上增加了排序功能,通过浮点数作为分值来实现按序存储。这种数据结构在需要高效范围查询和统计排名的场景中尤为重要。

  • 特点

    • 有序集合使用 TypedTuple 对存储,自动序列化和反序列化。
    • 提供 zrangezrank 等范围查询命令,可以按分值排序查询。
  • 操作示例

    // 有序集合的存储与操作Set
    > zsetElements = new HashSet<>();for (int i = 0; i < 10; i++) { double score = Double.parseDouble(String.valueOf(i)); zsetElements.add(ZSetOperations.typedTuple("x" + i, score));}redisTemplate.opsForZSet().add("zset_key", zsetElements);// 范围查询Set
    > rangeElements = redisTemplate.opsForZSet().rangeByLex("zset_key", new Range(), new Limit(10, 5));

    需要配合 RangeLimit 对象进行范围限制查询。


6. 基数 (HyperLogLog)

基数 是一种用于统计多个有重复元素的集合的频率和分布的数据结构。它主要用于解决大数据量场景下的统计问题,能够有效控制内存占用。

  • 特点

    • 基数提供高效的频率统计功能,支持范围查询和过滤操作。
    • 使用 hll_addhll_count 等命令进行存储与查询操作。
  • 操作示例

    // 基数的存储与操作List
    values = Arrays.asList("v1", "v2", "v3");redisTemplate.opsForHyperLogLog().add("hll_key", values);Long count = redisTemplate.opsForHyperLogLog().count("hll_key", "v2");

    可以根据需要结合 HELP dancedb 命令查询统计结果。


以上是 Redis 6大基础数据结构的详细介绍,结合实际应用场景和操作示例,供开发人员参考使用和学习。

上一篇:Reids基础事务以及watch监控事务和回滚
下一篇:spring保存对象到Redis的简单栗子

发表评论

最新留言

感谢大佬
[***.8.128.20]2025年04月22日 12时19分55秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章