硬核资源!Redis 五种数据结构以及三种高级数据结构解析(详解)

本文详细解析Redis的五种基础数据结构:String, List, Hash, Set, Sorted Set,以及高级数据结构HyperLogLog, Geo和BloomFilter。Redis的数据结构丰富,支持多种场景,例如使用String实现缓存和计数器,List作为消息队列,Hash存储结构化数据,Set和Sorted Set处理无序和有序集合。此外,HyperLogLog用于基数统计,Geo处理地理位置信息,BloomFilter则在判断元素存在性和防止缓存穿透方面发挥作用。" 106359927,9434337,Linux守护进程执行ssh远程连接的优化方案,"['Linux运维', 'shell脚本', '远程管理']
摘要由CSDN通过智能技术生成

上一篇分享的是《深入理解JVM》,这篇给大家分享《Redis 五种数据结构以及三种高级数据结构解析》。

前言

在 Redis 最重要最基础就属 它丰富的数据结构了,Redis 之所以能脱颖而出很大原因是他数据结构丰富,可以支持多种场景。并且 Redis 的数据结构实现以及应用场景在面试中是相当常见的,接下来就和大家聊聊 Redis 的数据结构。

Redis数据结构有:string、list、hash、set、sorted set 这五个是大家都知道的,但Redis还有更高级得数据结构,比如:HyperLogLog、Geo、BloomFilter 这几个数据结构,接下来聊聊Redis的这些数据结构吧。

String

基本概念String 是 Redis 最简单最常用的数据结构,也是 Memcached 唯一的数据结构。在平时的开发中,String 可以说是使用最频繁的了。
底层实现

  • 如果一个字符串对象保存的是整数值, 并且这个整数值可以用 long 类型来表示, 那么字符串对象会将整数值保存在字符串对象结构的 ptr 属性里面(将 void* 转换成 long ), 并将字符串对象的编码设置为 int 。
  • 如果字符串对象保存的是一个字符串值, 并且这个字符串值的长度大于 39 字节, 那么字符串对象将使用一个简单动态字符串(SDS)来保存这个字符串值, 并将对象的编码设置为 raw。
  • 如果字符串对象保存的是一个字符串值, 并且这个字符串值的长度小于等于 39 字节, 那么字符串对象将使用 embstr 编码的方式来保存这个字符串值。

使用:

> redis_cli            # 启动redis-cli 客户端
> set hello world      # 将键 hello 的值设置为 world   
OK                     # set 命令成功后 会返回 OK
> get hello            # 通过 get 命令获取 键为 hello 的值
"world"                # 获得到的值
> del hello            # 删除键为 hello 的值
(integer) 1            # 返回的是删除的数量
> mset a 10 b 20 c 30  # 批量的设置值
OK
> mget a b c           # 批量的返回值
1)"10"
2)"20"
3)"30"
> exists hello         # 是否存在该键
(integer) 1            # 1 表示存在,0 表示不存在
> expire hello 10      # 给 hello 设置过期时间,单位,秒
(integer) 1            # 返回1代表成功,0代表key不存在或无法设置过期时间
> pexpire hello 10     # 给 hello 设置过期时间,单位,毫秒
(integer) 1            # 返回1代表成功,0代表key不存在或无法设置过期时间

接下来会重点讲一下 set key value [EX seconds] [PX milliseconds] [NX|XX] 这个一系列命令,这块还是挺重要的,也很容易混淆。
reids 每次对 以前的值覆盖时,会 清空 TLL 值。(TTL 是过期时间)

  • EX second:设置键的过期时间为 second 秒。 SET key value EX second 效果等同于 SETEX key second value 。
  • PX millisecond :设置键的过期时间为 millisecond 毫秒。 SET key value PX millisecond 效果等同于 PSETEX key millisecond value 。
  • NX :只在键不存在时,才对键进行设置操作。 SET key value NX 效果等同于 SETNX key value 。
  • XX :只在键已经存在时,才对键进行设置操作。
# 使用 EX 选项
> set key1 hello EX 1000   # 设置 过期时间 1000s
OK
> ttl hello                # 获取 hello 的过期时间
(integer) 1000
# 使用 PX 选项
> set key1 hello PX 1000   # 设置 过期时间 1000ms
OK
> ttl hello                # 获取 hello 的过期时间
(integer) 1000
# 使用 NX 选项
> set hello world NX
OK                         # 键不存在,设置成功
> get hello
"value"
> set hello world NX
(nil)                      # 键已经存在,设置失败
> get hello
"world"                    # 维持原值不变
# 使用 XX 选项
> exists hello             # 先确定 hello 不存在
(integer) 0
> set hello world XX
(nil)                      # 因为键不存在,设置失败
> set hello wolrd          # 先给 hello 设置一个值
OK
> set hello newWolrd XX
OK                     
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值