Redis 进阶知识:看完绝对可以提升你的Redis技能

这篇博客详细介绍了Redis的基础数据结构,如string、list、set、hash和zset,以及进阶使用,包括布隆过滤器、分布式锁、IO模型、持久化和主从同步。还探讨了Redis变慢的原因,如大key、内存管理和网络带宽,并提出了相应的优化策略。同时强调了Redis安全,建议限制监听IP和使用ACL访问控制。
摘要由CSDN通过智能技术生成

提到 Redis,也许大家第一印象是:高性能的 K-V 缓存。其除了缓存业务上的热点数据还能做队列以及分布式锁。可大部分的我们在使用的时候也许都是公司封装好的 Redis,对于整个 Redis 的集群以及内部核心实现一知半解。只专注业务开发,那久而久之,在个人成长上变得帮组甚少。最明显的就是当业务量级上来后,在极端情况下,许多问题暴露出来,如果没有对 Redis 的底层有深入的了解,很难快速定位并解决问题

Redis 基础数据结构

  • string
  • Redis里的Redis的字符串是动态字符串,是可以修改的。类似于Go里面的切片Silence,如果长度不够则自动扩容,至于如何扩容:length小于1M的时候,扩容规则讲目前的字符串翻倍;如果大雨1M的话,则每次只会扩容1M,直到512M。

  • list
  • Redis里的list是一个链表,由于链表本身插入和删除比较块,但是查询的效率比较低,所以常常被用于做异步队列
  • Redis里的List设计非常牛逼,当数据量比较小的时候,数据结构是压缩链表,如果数据量比较多的时候就是快速链表
  • 可运用场景: 异步队列,使用rpush/lpush操作队列,使用lpop和rpop出队列

  • set
  • Redis中的set是一个无序Map,由于Go中没有set结构,所以这里只能类比Java中的HashSet。set底层也是一个Map结构,只是里面的Value是一个NULL,由于set的特性可以用于去重逻辑
  • 可运用场景:活动抽奖去重
  • hash
  • Redis中的字典类型大家不陌生,也许其他语言都有这种结构,不同的稍微提一点就是hash的扩容rehash过程中和Go里面的设计颇有类似,就是维护了两个hash结构,如果需要扩容的时候,就把新的数据写入新字典中,然后后端起一个线程来逐步迁移,总体上来说就是采用了空间换时间的思想
  • 可运用场景:记录业务中的不同用户/不同商品/不同场景的信息:如某个用户的名称,或者用户的历史行为

  • zset
  • Redis中的zset是一个比较特殊的数据结构(跳跃列表),也就是我们了解到的跳表,底层由于set的特性保证了value唯一,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值