【redis深度历险】基础篇

本文深入解析Redis中的数据结构,包括String、List、Hash、Set、ZSet的特点与应用场景,如缓存用户信息、异步队列、用户活动记录等。探讨了数据结构的内部实现,如QuickList、跳跃链表,以及rehash策略。

操作:
set k v
get k return v
mset k1 v1 k2 v2
mget k1 k2 k3 return list

数据结构:
string list(链表) hash set zset

string
K-V形式代表
常见用途:缓存用户信息,json序列化为字符串,缓存到redis;取信息反序列化
新建的string的capacity一般是高于len的;小于一M时扩容加倍,超过1M 扩容+1M,最大长度为512M

设置过期时间:
setex k time v
expire k time 设置过期时间
setnx k v k不存在则创建/存在返回0

计数:(自增)
incr k 增加1
incrby k num 增加num
自增有范围:signed long 的最大最小值
字符串由字节构成,一个字节由8个bit组成,字符串可以堪称很多bit的组合(bitmap 位图 数据结构

list
链表
插入 删除 时间复杂度O(1),索引定位很慢,复杂的为O(n)。list弹出最后一个元素后,数据结构自动被删除,内存被回收。
redis list常用来做异步列队使用,将需要延后处理的任务结构体序列化为字符串塞进redis的列表,另一个线程从该列表中轮询数据进行处理
rpush key v1 v2 v3 从右边进
llen key 查看list长度
lpop key 从左边出
rpop key 从右边出

lindex key num寻找某个index对应的元素 O(N)
lrange key start end O(N)获取范围内元素
ltrim key start end O(N)保留范围内元素

事实上内部时 quicklist。
在内部元素较少情况下使用一块连续的内存存储 结构时 ziplist 压缩列表。所有元素紧挨存储,连续内存
元素较多时改为quicklist,将多个ziplist和链表结合起来,多个连续内存空间间用 prev next 连接起来(如果单个数据都使用prev next串联 会产生巨量额外空间,以及碎片化内存)

hash
字典,hashmap,无序字典。数组加链表的二维结构,一维的hash数组位置碰撞时将碰撞的元素使用链表串联起来
redis字典的value只能是字符串
rehash策略:当hash表负载过大时 导致碰撞概率增加,通过resize增大表的index值,增大以后按照新的规则,需要将旧的表按照新的策略重新迁移到新的位置。
HashMap.Size >= Capacity * LoadFactor
java中是一次性rehash,redis中是渐进式rehash,保障高性能,保留新旧两个hash结构,查询会同时查询两个hash结构;直到迁移任务完成,旧内容迁移到新结构中

hash移除了最后一个元素后,数据结构自动删除,内存回收
hash存储用户信息时,可以对用户结构中每个字段单独存储。减少了网络流量,但是增加了存储消耗

hset k v[k] v[v] 设置k值以及val的kv值(同时可以更新)
hmset 批量操作
hlen
hincrby K V[k] 增加K对应的k对应的v

set
hashset 集合,内部键值无序且唯一,内部为一个特殊字典,value均为null
最后一个元素溢出后,自动删除,内存回收
可以用来存储活动中奖的用户ID避免重复
sadd K V[k] K集合中添加一个键值,没有val
smembers K 查看K集合中所有的键值元素
sismember K V[k] 查看K集合中是否存在某个键值元素
scard K 查看集合的大小
spop K 从集合K中弹出一个元素

zset:
内部key唯一性 + val复制权重;回收方式一样
一般用于存储 粉丝列表 v值为粉丝的ID,权重score是关注时间,可以按照关注时间进行排序(类似于排序字典)
zadd K num V添加
zrem 删除
zrange K 0 -1 增序打印V
zrevrange K 0 -1 降序打印V
zcard K 计数
zscore K V 显示V的权重
zrank K V 显示V的增序排名
zrangebyscore K a b 从ab范围内寻找值 withscores 显示分值

跳跃链表
内部排序是根据跳跃链表实现的
0~31层,0层为公共串链表,所有数据直连;然后新数据跳跃到n层的概率为(0.5)^n,极少数据才能到达顶层,元素越多,深入的层次就越深。

容器型数据结构通用规则
list set hash zset都是容器型的数据结构
create if not exists
drop if no elements

### 回答1: Redis是一款内存数据库,性能高、支持多种数据结构、提供丰富的功能,得到了广泛的应用。但其维护操作却需要一定的技巧,开源社区中也有大量的文档、文章来讲解。其中,Redis深度历险一书介绍了Redis基础知识、高级特性、应用场景和实战案例。该书深入剖析了Redis内部的实现原理,让读者更好地理解其运行机制、调优方法和错误排查。主要内容包括Redis线程模型、内存优化、IO模型、事务、持久化、集群、性能调优、应用场景等。其中,集群方面包括Redis Cluster和Redis Sentinel两类架构的详细介绍和使用方法。性能调优方面,介绍了一些常见的性能问题和解决方案,以及使用Redis的最佳实践。对于有一定Redis使用经验的开发人员或系统工程师,这本书可以帮助他们更好地优化和管理Redis实例,也可以让他们更深入地掌握Redis相关知识。对于想学习Redis的初学者,建议还需要通过其他资料了解Redis基本概念和用法。总的来说,Redis深度历险是一本值得阅读的Redis专业书籍,它为读者提供了许多经验和实践经验,也为企业中使用Redis的团队提供了宝贵的参考资料。 ### 回答2: Redis是一款开源的高性能NoSQL数据库,近年来在企业级应用中广受欢迎。《Redis深度历险》是一本深入介绍Redis的技术书籍,由黄健宏等人撰写。 这本书详细介绍了Redis的架构、原理、数据结构、使用场景、性能优化、集群部署等方面的知识,通过系统化的学习可以在Redis的使用和优化方面获得很大的收获。 《Redis深度历险》中包含大量的实际代码示例和生产环境中的案例分析,可以帮助读者深入理解Redis的实现细节和应用场景,并快速应用到自己的实战项目中。同时,这本书也适合那些想深入了解分布式系统的架构师、程序员、运维工程师等 IT 技术人员。 此外,书中还介绍了很多Redis的新特性和应用场景,如Redis的流式计算、Redis与gRPC的结合使用等,让人们对Redis的使用和应用场景有了更深刻的认识。 总之,《Redis深度历险》是一本非常实用的Redis技术指南,对于想深入学习Redis的技术人员来说是非常必备的一本读物。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值