分布式存储中间件(1):10000 字把 Redis 扒个干净

本文详细介绍了 Redis 的五种数据结构:String、Hash、链表、Set 和有序集合,以及 Redis 的持久化机制 RDB 和 AOF,包括它们的优缺点和触发条件。此外,还探讨了 Redis 的主从复制、哨兵模式和集群模式,以及应对缓存穿透、雪崩和失效的策略。最后,简要提及了布隆过滤器的使用场景和实现。
摘要由CSDN通过智能技术生成

前言

关于分布式系列专题,整体是打算写分布式消息中间件、分布式储存中间件和分布式框架的。分布式消息中间件选择了两个最常用的,之前已经写了,感兴趣的朋友可以看看。 

 这篇文章是写分布式存储中间件种的 Redis,关于 Redis 想必没有任何一个程序员会感到陌生吧,其实网上写 Redis 的文章已经很多了,甚至可以说是泛滥,但总感觉太碎片化了,所以还是想系统的写一下 Redis,当然了,篇幅所限,这篇文章肯定也是写不尽 Redis 的,但是我会尽力把重要的东西都拎出来系统的讲一下,让不了解的朋友看完后对 Redis 能够简单上手敲代码,让 Redis 有一些了解的朋友查漏补缺。

我整理的一些相关学习资料可以直接点击领取

 

 好了,话不多说,坐稳扶好,发车喽

一、Redis 数据结构

Redis 五种数据结构如下:

对 redis 来说,所有的 key(键)都是字符串。

1.String 字符串类型

是 redis 中最基本的数据类型,一个 key 对应一个 value。

String 类型是二进制安全的,意思是 redis 的 string 可以包含任何数据。如数字,字符串,jpg 图片或者序列化的对象。

使用:get 、 set 、 del 、 incr、 decr 等



127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> get hello
"world"
127.0.0.1:6379> del hello
(integer) 1
127.0.0.1:6379> get hello
(nil)
127.0.0.1:6379> get counter
"2"
127.0.0.1:6379> incr counter
(integer) 3
127.0.0.1:6379> get counter
"3"
127.0.0.1:6379> incrby counter 100
(integer) 103
127.0.0.1:6379> get counter
"103"
127.0.0.1:6379> decr counter
(integer) 102
127.0.0.1:6379> get counter
"102"
 

复制代码

实战场景:

1.缓存: 经典使用场景,把常用信息,字符串,图片或者视频等信息放到 redis 中,redis 作为缓存层,mysql 做持久化层,降低 mysql 的读写压力。

2.计数器:redis 是单线程模型,一个命令执行完才会执行下一个,同时数据可以一步落地到其他的数据源。

3.session:常见方案 spring session + redis 实现 session 共享,

2.Hash (哈希)

是一个 Mapmap,指值本身又是一种键值对结构,如 value={ {field1,value1},......fieldN,valueN}}

使用:所有 hash 的命令都是  h   开头的     hget  、hset 、  hdel 等

127.0.0.1:6379> hset user name1 hao
(integer) 1
127.0.0.1:6379> hset user email1 hao@163.com
(integer) 1
127.0.0.1:6379> hgetall user
1) "name1"
2) "hao"
3) "email1"
4) "hao@163.com"
127.0.0.1:6379> hget user user
(nil)
127.0.0.1:6379> hget user name1
"hao"
127.0.0.1:6379> hset user name2 xiaohao
(integer) 1
127.0.0.1:6379> hset user email2 xiaohao@163.com
(integer) 1
127.0.0.1:6379> hgetall user
1) "name1"
2) "hao"
3) "email1"
4) "hao@163.com"
5) "name2"
6) "xiaohao"
7) "email2"
8) "xiaohao@163.com"

复制代码

实战场景:

1.缓存: 能直观,相比 string 更节省空间,的维护缓存信息,如用户信息,视频信息等。

3.链表

List 说白了就是链表(redis 使用双端链表实现的 List),是有序的,value 可以重复,可以通过下标取出对应的 value 值,左右两边都能进行插入和删除数据。

使用列表的技巧

  • lpush+lpop=Stack(栈)

  • lpush+rpop=Queue(队列)

  • lpush+ltrim=Capped Collection(有限集合)

  • lpush+brpop=Message Queue(消息队列)

使用:

实战场景:

1.timeline:例如微博的时间轴,有人发布微博,用 lpush 加入时间轴,展示新的列表信息。

4.Set   集合

集合类型也是用来保存多个字符串的元素,但和列表不同的是集合中  1. 不允许有重复的元素,2.集合中的元素是无序的,不能通过索引下标获取元素,3.支持集合间的操作,可以取多个集合取交集、并集、差集。

98a3d29c5504dde94788b27af706dab3.png

小伙伴们有兴趣想了解内容和更多相关学习资料的请点赞收藏+评论转发+关注我,后面会有很多干货。我有一些面试题、架构、设计类资料可以说是程序员面试必备!所有资料都整理到网盘了,需要的话欢迎下载!私信我回复【07】即可免费获取

使用:命令都是以 s 开头的  sset 、srem、scard、smembers、sismember

127.0.0.1:6379> sadd myset hao hao1 xiaohao hao
(integer) 3
127.0.0.1:6379> SMEMBERS myset
1) "xiaohao"
2) "hao1"
3) "hao"
127.0.0.1:6379> SISMEMBER myset hao
(integer) 1

复制代码

实战场景;

1.标签(tag),给用户添加标签,或者用户给消息添加标签,这样有同一标签或者类似标签的可以给推荐关注的事或者关注的人。

2.点赞,或点踩,收藏等,可以放到 set 中实现

5.zset  有序集合

有序集合和集合有着必然的联系,保留了集合不能有重复成员的特性,区别是,有序集合中的元素是可以排序的,它给每个元素设置一个分数,作为排序的依据。

(有序集合中的元素不可以重复,但是 score 分数 可以重复,就和一个班里的同学学号不能重复,但考试成绩可以相同)。

使用: 有序集合的命令都是 以  z  开头    zadd 、 zrange、 zscore

127.0.0.1:6379> zadd myscoreset 100 hao 90 xiaohao
(integer) 2
127.0.0.1:6379> ZRANGE myscoreset 0 -1
1) "xiaohao"
2) "hao"
127.0.0.1:6379> ZSCORE myscoreset hao
"1
00"

复制代码

实战场景:

1.排行榜:有序集合经典使用场景。例如小说视频等网站需要对用户上传的小说视频做排行榜,榜单可以按照用户关注数,更新时间,字数等打分,做排行。

二、Redis 持久化机制

Redis 有两种持久化方案,RDB (Redis DataBase)和 AOF (Append Only File)。如果你想快速了解和使用 RDB 和 AOF,可以直接跳到文章底部看总结。本章节通过配置文件,触发快照的方式,恢复数据的操作,命令操作演示,优缺点来学习 Redis 的重点知识持久化。

1、RDB 详解

RDB 是 Redis 默认的持久化方案。在指定的时间间隔内,执行指定次数的写操作,则会将内存中的数据写入到磁盘中。即在指定目录下生成一个 dump.rdb 文件。Redis 重启会通过加载 dump.rdb 文件恢复数据。

从配置文件了解 RDB 打开 redis.conf 文件,找到 SNAPSHOTTING 对应内容

1.1 RDB 核心规则配置(重点)

save <seconds> <changes>
# save ""
save 900 1
save 300 10
save 60 10000

复制代码

解说:save

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值