redis的简单介绍(一)

Redis特性与应用
本文详细介绍Redis支持的五种数据结构:字符串、散列、列表、集合及有序集合,并解析Redis为何能实现高速运行,对比其与Memcache的区别,探讨Lazy加载策略在缓存管理中的应用。

redis的简单介绍


redis支持的常用数据结构
  • 字符串(String)
127.0.0.1:6379> SET name "toegg"
OK
127.0.0.1:6379> GET name
"toegg"
  • 散列(Hash)
127.0.0.1:6379> HSET user name "toegg1"
(integer) 1
127.0.0.1:6379> HSET user age 18
(integer) 1
127.0.0.1:6379> HSET user sex 1
(integer) 1
127.0.0.1:6379> HKEYS user  #获取所有key
1) "name"
2) "age"
3) "sex"
127.0.0.1:6379> HVALS user  #获取所有val
1) "toegg1"
2) "18"
3) "1"
127.0.0.1:6379> HGETALL user  #获取所有 key=>val
1) "name"
2) "toegg1"
3) "age"
4) "18"
5) "sex"
6) "1"
127.0.0.1:6379> HGET user name
"toegg1"
  • 列表(List)
127.0.0.1:6379> lpush list 1
(integer) 1
127.0.0.1:6379> lpush list 2
(integer) 2
127.0.0.1:6379> lpush list 3
(integer) 3
127.0.0.1:6379> lrange list 0 -1  #获取列表所有元素
1) "3"
2) "2"
3) "1"
127.0.0.1:6379> lpop list
"3"
127.0.0.1:6379> lrange list 0 -1
1) "2"
2) "1"
  • 集合(Set)
127.0.0.1:6379> sadd set 1
(integer) 1
127.0.0.1:6379> sadd set 2
(integer) 1
127.0.0.1:6379> smembers set  #获取集合所有元素
1) "1"
2) "2"
127.0.0.1:6379> sadd set1 1
(integer) 1
127.0.0.1:6379> sadd set1 3
(integer) 1
127.0.0.1:6379> sadd set1 4
(integer) 1
127.0.0.1:6379> sinter set set1  #取两个集合的交集
1) "1"
127.0.0.1:6379> sunion set set1  #取两个集合的并集
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379> sdiff set set1  #取两个集合的差集
1) "2"
  • 有序集合(Sorted Set | ZSet)
127.0.0.1:6379> zadd sets 1 key1
(integer) 1
127.0.0.1:6379> zadd sets 2 key2
(integer) 1
127.0.0.1:6379> zadd sets 3 key3
(integer) 1
127.0.0.1:6379> zrange sets 0 -1  #获取所有元素
1) "key1"
2) "key2"
3) "key3"
127.0.0.1:6379> zrangebyscore sets 2 3 WITHSCORES  #返回score为2-3的元素,withscore保留score
1) "key2"
2) "2"
3) "key3"
4) "3"
127.0.0.1:6379> zrangebyscore sets 2 3  #返回score为2-3的元素
1) "key2"
2) "key3"

redis为什么这么快
  1. 完全基于内存,通过 key => val 键值对的形式来存储数据的nosql数据库,类似一个大hashMap,查找和操作复杂度为O(1)
  2. 单线程,避免了上下文的切换,多进程或者多线程切换导致的cpu消耗,不用考虑各种锁问题
  3. 使用IO多路复用epoll(采用事件驱动,读,写事件处理器)同时监听多个socket上的事件,根据事件到对应处理器处理,复杂度O(1)。不是poll和select(采用无差别轮询),复杂度 O(n)

redis和memcache的比较
  1. redis支持更复杂的数据结构,支持丰富的数据操作,需要缓存能够支持更复杂的结构和操作,redis是不错选择
  2. redis3.0后支持cluster集群模式,高可用,避免全盘奔溃,而memcache则不支持集群模式
  3. 性能对比:由于 Redis 只使用单核,而 Memcached 可以使用多核,所以平均每一个核上 Redis 在存储小数据时比 Memcached 性能更高。而在 100k 以上的数据中,Memcached 性能要高于 Redis

可使用Lazy懒加载redis**

​ 缓存基于内存的操作虽然很快,但是也不是所有东西都丢到内存,毕竟内存大小也有限,成本也很高。再者可采用需要时才加载到内存,不用则不加载,则是懒加载方式

​ 其中,读和更新,大概如下流程。更新时候不是更新缓存,而是直接删除缓存,就是为了懒加载。有可能频繁在更新,频繁在改缓存,但是实际没访问打到该key,实际就浪费了,所以可用到才加载

Read: 读缓存 -> 没有就去读db ->再写缓存
Update: 更新数据 ->更新db -> 删除缓存

​ 当然,具体情况还得视项目和业务而定,比如一些商品定点抢购,有些设计是事先需要缓存商品存货数量到内存,访问打到的时候做相应的限流拦截。需要先把数据放到缓存。不是所有都采用Lazy方式。

<think>嗯,用户想要了解Redis跳表的简单介绍。根据之前提供的三篇引用材料,可以整合出个清晰的基础说明。用户特意强调要"简单介绍",说明ta可能刚接触这个概念,或是需要快速理解核心要点。 从引用内容看,跳表的核心特点很明确: 1. 结构本质:是有序链表加多级索引的结构(引用1和2都强调这点) 2. 设计目的:通过空间换时间提升查找效率(引用2提到O(log n)复杂度) 3. Redis应用场景:用于实现有序集合,尤其适合元素多或大的情况(引用3明确说明) 4. 独特优势:实现比红黑树简单,性能却相近(引用2的标题直接点出) 用户没有追问技术细节,说明当前需要的是框架性认知。可以重点突出三层结构:最底层原始数据链表→中间索引层→顶层稀疏索引,用阶梯状的索引体系解释"跳跃"的由来。同时要呼应Redis的实际应用,毕竟用户关注的是"Redis跳表"而非通用数据结构。 特别注意引用3提到的随机层高特性(1-32层),这个设计能避免索引退化成固定间隔的僵化结构,是跳表精妙之处。但介绍时不必深入随机算法,点到即可。 用户引用的材料质量不错,尤其是引用3的图解说明很清晰,可以借鉴其表述逻辑:从问题出发(链表查找慢)→解决方案(加索引)→Redis具体实现(zskiplist结构)。最后用"空间换时间"收尾,形成完整闭环。 </think>以下是对 Redis 跳表的简明介绍,结合引用资料的核心要点整理: --- ### Redis 跳表(Skip List)简介 1. **基本结构** - 跳表本质是**有序链表的多层索引结构**(引用[1][3])。 - 包含两种核心结构(引用[3]): - `zskiplist`:存储跳表全局信息(头尾节点、长度等) - `zskiplistnode`:表示跳表节点,包含分值(score)和成员对象(member) 2. **核心设计** - **多层索引**:底层是完整有序链表,上层是稀疏索引(引用[1][2])。 - 索引节点指向同层级或更高层级中**分值相同/更大**的节点(引用[1])。 - **随机层高**:每个节点的层高随机生成(1~32层),避免索引退化(引用[3])。 - **排序规则**:节点按分值排序,分值相同时按成员对象字典序排序(引用[3])。 3. **性能优势** - **时间复杂度**: - 插入、删除、查找操作均达到 **$O(\log n)$**(引用[2]),媲美平衡树。 - **空间换时间**:通过额外索引层减少遍历节点数(引用[2][3])。 - **实现简易**:比红黑树等平衡树更易实现和维护(引用[2])。 4. **Redis 中的应用** - 实现 **有序集合(Sorted Set)**(引用[3]),尤其适用于: - 元素数量多或成员对象较大时 - 需高效范围查询(如 `ZRANGE`)的场景 --- ### 关键特性图解说明 ``` 顶层索引 HEAD → [4] → [9] → [15] → NULL 中层索引 HEAD → [2] → [4] → [7] → [9] → [11] → [15] → NULL 底层链表 HEAD → [1]→[2]→[3]→[4]→[5]→[7]→[9]→[11]→[15]→NULL ``` **查找路径示例**:搜索 `7` 时,从顶层跳至 `4` → 中层跳至 `7`,跳过无关节点[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值