redis基础及常见模型简介

1、redis 常见的数据结构
常见的 5 种:
String :字符串,最基础的数据类型。
List :列表。
Hash :哈希对象。
Set :集合。
Sorted Set :有序集合, Set 的基础上加了个分值。
2、redis 持久化你们怎么做的?
redis 持久化主要有两种 ROD AOF ,当先现在还有混合的,从 reids4.0 后引入的
RDB 实现原理:
RDB 类似于快照,在某个时间点,将 Redis 在内存中的数据库状态(数据库的键值对等信息)保存到磁 盘里面。RDB 持久化功能生成的 RDB 文件是经过压缩的二进制文件。
RDB 的优点:
RDB 文件是经过压缩的,占用空间很小,它保存了某个时间点的数据集,很适合做备份。 比如你可 以在24 小时内,每个小时备份一次 RDB 文件,并且每个月的每一天备份一个 RDB 文件。
RDB 非常适合用来做灾备恢复,可以加密后传送到数据中心
RDB 可以最大化 redis 的性能
从恢复速度来看, RDB 明显要比 AOF 要快
但是 RDB 也有一定的缺点:
RDB 在服务器故障的时候,容易造成数据损失。 我们通常设置每 5 分钟保存一次快照,这样数据丢
失也只有 5 分钟的数据。 RDB保存时使用 fork 子进程数据的持久化,如果数据量大的话,会非常耗时,造成 redis 停止处理服 务N 毫秒。
AOF
保存 Redis 服务器所执行的所有写操作命令来记录数据库状态,并在服务器启动时,通过重新执行这些 命令来还原数据集。 AOF默认是关闭的,可以通过 appendonley yes 开启 AOF 持久化功能的实现可以分为三个步骤:命令追加、文件写入、文件同步。
AOF 的优点:
1 AOF RDB 可靠。你可以设置不同的 fsync 策略: no everysec always 。默认是 everysec ,在 这种配置下,redis 仍然可以保持良好的性能,并且就算发生故障停机,也最多只会丢失一秒钟的数据。
2 AOF 文件是一个纯追加的日志文件。即使日志因为某些原因而包含了未写入完整的命令(比如写入时 磁盘已满,写入中途停机等等), 我们也可以使用 redis-check-aof 工具也可以轻易地修复这种问题。
3 )当 AOF 文件太大时, Redis 会自动在后台进行重写:重写后的新 AOF 文件包含了恢复当前数据集所 需的最小命令集合。整个重写是绝对安全,因为重写是在一个新的文件上进行,同时 Redis 会继续往旧 的文件追加数据。当新文件重写完毕,Redis 会把新旧文件进行切换,然后开始把数据写到新文件上。
4 AOF 文件有序地保存了对数据库执行的所有写入操作以 Redis 协议的格式保存, 因此 AOF 文件的 内容非常容易被人读懂, 对文件进行分析(parse )也很轻松。如果你不小心执行了 FLUSHALL 命令把 所有数据刷掉了,但只要 AOF 文件没有被重写,那么只要停止服务器, 移除 AOF 文件末尾的 FLUSHALL 命令, 并重启 Redis , 就可以将数据集恢复到 FLUSHALL 执行之前的状态。
AOF 缺点:
1 ) 对于相同的数据集, AOF 的文件一般会比 RDB
2 AOF 所使用的 fsync 策略,备份速度也会比 RDB
如何使用:
如果想尽量保证数据安全性, 你应该同时使用 RDB AOF 持久化功能,同时可以开启混合持久化。
如果你的数据是可以丢失的,则可以关闭持久化功能,在这种情况下, Redis 的性能是最高的。
3、redis主从复制实现的原理
Redis 虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况,为分担读压力, Redis 支持主从复制,Redis 的主从结构可以采用一主多从或者级联结构, Redis 主从复制可以根据是否是全量分为全量同步和增量同步
4、redis 哨兵模式原理
哨兵是特殊的 redis 服务,不提供读写服务,主要用来监控 redis 实例节点。 哨兵架构下 client 端第一次从 哨兵找出redis 的主节点,后续就直接访问 redis 的主节点,不会每次都通过 sentinel 代理访问 redis 的主 节点,当redis 的主节点发生变化,哨兵会第一时间感知到,并且哨兵会早主从模式的从节点中重新选出 来一个新的master ,并且将新的 master 信息通知给 client 端。
这里面 redis client 端一般都实现了订阅功能,订阅 sentinel 发布的节点变动消息。 Redis 服务是通过配 置文件启动的,比如上面的从节点设置了只读模式,它被选举成了master 之后就是可读写的了,感觉很奇怪,后来看了下重新选举之后的各redis 服务的配置文件,发现文件里面的内容会被哨兵修改。要想真的高可用,我们的哨兵也要集群模式。

5、memcacheredis的区别 

1 Redis Memcache 都是将数据存放在内存中,都是内存数据库。不过 memcache 还可用于缓存其他 东西,例如图片、视频等等。
2 Redis 不仅仅支持简单的 k/v 类型的数据,同时还提供 list set hash 等数据结构的存储。
3 、虚拟内存 –Redis 当物理内存用完时,可以将一些很久没用到的 value 交换到磁盘
4 、过期策略 –memcache set 时就指定,例如 set key1 0 0 8, 即永不过期。 Redis 可以通过例如 expire 设定,例如expire name 10
5 、分布式 设定 memcache 集群,利用 magent 做一主多从 ;redis 可以做一主多从。都可以一主一从
6 、存储数据安全 –memcache 挂掉后,数据没了; redis 可以定期保存到磁盘(持久化)
7 、灾难恢复 –memcache 挂掉后,数据不可恢复 ; redis 数据丢失后可以通过 aof 恢复
8 Redis 支持数据的备份,即 master-slave 模式的数据备份。
redismemecache的不同在于[2]
1 、存储方式:
memecache 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小
redis 有部份存在硬盘上,这样能保证数据的持久性,支持数据的持久化(笔者注:有快照和 AOF 日志两 种持久化方式,在实际应用的时候,要特别注意配置文件快照参数,要不就很有可能服务器频繁满载做 dump)。
2 、数据支持类型:
redis 在数据支持上要比 memecache 多的多。
3 、使用底层模型不同:
新版本的 redis 直接自己构建了 VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。
4 、运行环境不同:
redis 目前官方只支持 LINUX 上去行,从而省去了对于其它系统的支持,这样的话可以更好的把精力用于本系统环境上的优化,虽然后来微软有一个小组为其写了补丁。但是没有放到主干上
个人总结一下,有持久化需求或者对数据结构和处理有高级要求的应用,选择 redis ,其他简单的
key/value 存储,选择 memcache
6、redis 有哪些架构模式?

存在问题: 内容容量有限,处理能力有限,无法高可用

 

Redis 的复制( replication )功能允许用户根据一个 Redis 服务器来创建任意多个该服务器的复制品, 其中被复制的服务器为主服务器(master ),而通过复制创建出来的服务器复制品则为从服务器 (slave )。 只要主从服务器之间的网络连接正常,主从服务器两者会具有相同的数据,主服务器就会一 直将发生在自己身上的数据更新同步 给从服务器,从而一直保证主从服务器的数据相同。
特点:
1 master/slave 角色
2 master/slave 数据相同
3 、降低 master 读压力在转交从库
问题:
无法保证高可用
没有解决 master 写的压力
Redis sentinel 是一个分布式系统中监控 redis 主从服务器,并在主服务器下线时自动进行故障转移。其 中三个特性:
监控( Monitoring ): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。
提醒( Notification ): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
自动故障迁移( Automatic failover ): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作。
特点:
1 、保证高可用
2 、监控各个节点
3 、自动故障迁移
缺点:主从模式,切换需要时间 ,期间易丢数据
           没有解决 master 写的压力
7、redis 为什么这么快
1 、完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。数据存在内存中,类似于 HashMap , HashMap 的优势就是查找和操作的时间复杂度都是 O(1)
2 、数据结构简单,对数据操作也简单, Redis 中的数据结构是专门进行设计的;
3 、采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗;
4 、使用多路 I/O 复用模型,非阻塞 IO
5 、使用底层模型不同,它们之间底层实现方式以及与客户端之间通信的应用协议不一样, Redis 直接自己构建了 VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求

8、redis缓存雪崩出现原因及解决办法

我们都知道 Redis 不可能把所有的数据都缓存起来 ( 内存昂贵且有限 ) ,所以 Redis 需要对数据
设置过期时间,并采用的是惰性删除 + 定期删除两种策略对过期键删除。 Redis 对过期键的策略 + 持久化 如果缓存数据设置的过期时间是相同的,并且Redis 恰好将这部分数据全部删光了。这就会导致在这段时间内,这些缓存同时失效,全部请求到数据库中
什么是缓存雪崩?
Redis 挂掉了,请求全部走数据库。
对缓存数据设置相同的过期时间,导致某段时间内缓存失效,请求全部走数据库。
缓存雪崩如果发生了,很可能就把我们的数据库搞垮,导致整个服务瘫痪!
解决方法:
在缓存的时候给过期时间加上一个随机值,这样就会大幅度的减少缓存在同一时间过期。对于“Redis 挂掉了,请求全部走数据库 这种情况,我们可以有以下的思路
事发前:实现 Redis 的高可用 ( 主从架构 +Sentinel 或者 Redis Cluster) ,尽量避免 Redis 挂掉这种情况发 生。
事发中:万一 Redis 真的挂了,我们可以设置本地缓存 (ehcache)+ 限流 (hystrix) ,尽量避免我们的数据库 被干掉( 起码能保证我们的服务还是能正常工作的 )
事发后: redis 持久化,重启后自动从磁盘上加载数据,快速恢复缓存数据。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答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、付费专栏及课程。

余额充值