rdb

吊打面试官系列:Redis 性能优化的 13 条军规大全

邮差的信 提交于 2020-04-24 02:11:50
1.缩短键值对的存储长度 键值对的长度是和性能成反比的,比如我们来做一组写入数据的性能测试,执行结果如下: 从以上数据可以看出,在 key 不变的情况下,value 值越大操作效率越慢,因为 Redis 对于同一种数据类型会使用不同的内部编码进行存储,比如字符串的内部编码就有三种: int(整数编码) raw(优化内存分配的字符串编码) embstr(动态字符串编码),这是因为 Redis 的作者是想通过不同编码实现效率和空间的平衡,然而数据量越大使用的内部编码就越复杂,而越是复杂的内部编码存储的性能就越低。 这还只是写入时的速度,当键值对内容较大时,还会带来另外几个问题: · 内容越大需要的持久化时间就越长,需要挂起的时间越长,Redis 的性能就会越低; · 内容越大在网络上传输的内容就越多,需要的时间就越长,整体的运行速度就越低; · 内容越大占用的内存就越多,就会更频繁的触发内存淘汰机制,从而给 Redis 带来了更多的运行负担。 因此在保证完整语义的同时,我们要尽量的缩短键值对的存储长度,必要时要对数据进行序列化和压缩再存储。 2.使用 lazy free 特性 lazy free 特性是 Redis 4.0 新增的一个非常使用的功能,它可以理解为惰性删除或延迟删除。意思是在删除的时候提供异步延时释放键值的功能,把键值释放操作放在 BIO(Background I/O)

【转】Redis概念原理、redis面试

≡放荡痞女 提交于 2020-04-23 13:10:12
1.Redis基础教程学习 1.1.Redis数据库概述 1.1.1. 什么是Redis 1.1.2. Redis有哪些优缺点? 1.1.3. 为什么要用 Redis /为什么要用缓存? 1.1.4. 为什么要用 Redis 而不用 map/guava 做缓存? 1.1.5. Redis为什么这么快? 1.2.Redis数据类型 1.2.1.Redis有哪些数据类型? 1.2.2.Redis的应用场景 1.3.Redis持久化 1.3.1.什么是Redis持久化? 1.3.2.Redis 的持久化机制是什么?各自的优缺点? 1.3.3.如何选择合适的持久化方式? 1.3.4.Redis持久化数据和缓存怎么做扩容? 1.4.Redis过期键的删除策略 1.4.1.Redis的过期键的删除策略 1.4.2.Redis key的过期时间和永久有效分别怎么设置? 1.4.3.我们知道通过expire来设置key 的过期时间,那么对过期的数据怎么处理呢? 1.5.Redis内存相关 1.5.1.MySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据? 1.5.2.Redis的内存淘汰策略有哪些? 1.5.3.Redis主要消耗什么物理资源? 1.5.4.Redis的内存用完了会发生什么? 1.5.5.Redis如何做内存优化? 1.6

曹工说Redis源码(7)-- redis server 的周期执行任务,到底要做些啥

淺唱寂寞╮ 提交于 2020-04-23 05:42:10
文章导航 Redis源码系列的初衷,是帮助我们更好地理解Redis,更懂Redis,而怎么才能懂,光看是不够的,建议跟着下面的这一篇,把环境搭建起来,后续可以自己阅读源码,或者跟着我这边一起阅读。由于我用c也是好几年以前了,些许错误在所难免,希望读者能不吝指出。 曹工说Redis源码(1)-- redis debug环境搭建,使用clion,达到和调试java一样的效果 曹工说Redis源码(2)-- redis server 启动过程解析及简单c语言基础知识补充 曹工说Redis源码(3)-- redis server 启动过程完整解析(中) 曹工说Redis源码(4)-- 通过redis server源码来理解 listen 函数中的 backlog 参数 曹工说Redis源码(5)-- redis server 启动过程解析,以及EventLoop每次处理事件前的前置工作解析(下) 曹工说Redis源码(6)-- redis server 主循环大体流程解析 本讲主题 本讲,聚焦于redis的周期执行任务。redis启动起来后,基本就剩下两件事,上一讲的主流程分析中,已经讲到了。1个是处理客户端请求,2就是指向周期任务。处理客户端请求,大概会细分为:处理客户端连接事件(客户端连接到redis)、客户端读写事件(客户端发送请求,redis返回响应); 周期任务呢,就是本讲主题

Linux下安装Redis4.0版本(简便方法)

假装没事ソ 提交于 2020-04-23 03:31:46
Redis介绍: Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。 Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久化RDB和AOF,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。 Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。 Redis支持数据的备份,即master-slave模式的数据备份。 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。 安装环境: 操作系统:CentOS Linux release 7.7.1908 (Core) IP地址:192.168.85.16 环境准备: yum install -y openssl gcc

Linux下安装Redis4.0版本(简便方法)

↘锁芯ラ 提交于 2020-04-23 03:27:02
Redis介绍: Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。 Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久化RDB和AOF,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。 Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。 Redis支持数据的备份,即master-slave模式的数据备份。 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。 安装环境: 操作系统:CentOS Linux release 7.7.1908 (Core) IP地址:192.168.85.16 环境准备: yum install -y openssl gcc

高可用Redis(八):Redis主从复制

无人久伴 提交于 2020-04-21 04:54:15
1.Redis复制的原理和优化 1.1 Redis单机的问题 1.1.1 机器故障 在一台服务器上部署一个Redis节点,如果机器发生主板损坏,硬盘损坏等问题,不能在短时间修复完成,就不能处理Redis操作了,这就是单机可能存在的问题 同样的,服务器正常运行,但是Redis主进程发生宕机事件,此时只需要重启Redis就可以了。如果不考虑在Redis重启期间的性能损失,可以考虑Redis的单机部署 Redis单机部署出现故障时,把Redis迁移到另一台服务器上,此时需要把发生故障的Redis中的数据同步到新部署的Redis节点,这也需要很高的成本 1.1.2 容量瓶颈 一台服务器有16G内存,此时分配12G内存运行Redis 如果有新需求:Redis需要占用32G或者64G等更多的内存,此时这台服务器就不能满足需求了,此时可以考虑更换一台更大内存的服务器,也可以用多台服务器组成一个Redis集群来满足这个需求 1.1.3 QPS瓶颈 根据Redis官方的说法,单台Redis可以支持10万的QPS,如果现在的业务需要100万的QPS,此时可以考虑使用Redis分布式 2.什么是主从复制 2.1 一主一从模型 一个Redis节点为master节点(主节点),负责对外提供服务。 另一个节点为slave节点(从节点),负责同步主节点的数据,以达到备份的效果。当主节点发生宕机等故障时

趣说Redis面试时必问的缓存雪崩+击穿+穿透

荒凉一梦 提交于 2020-04-21 00:25:05
提到Redis我相信各位在面试,或者实际开发过程中对缓存雪崩,穿透,击穿也不陌生吧,就算没遇到过但是你肯定听过,那三者到底有什么区别,我们又应该怎么去防止这样的情况发生呢,我们有请下一位受害者。 一个大腹便便,穿着格子衬衣的中年男子,拿着一个满是划痕的mac向你走来,看着快秃顶的头发,心想着肯定是尼玛顶级架构师吧!但是我们腹有诗书气自华,虚都不虚。 小伙子我看你的简历上写到了Redis,那么我们直接开门见山,直接怼常见的几个大问题,Redis雪崩了解么? 帅气迷人的面试官您好,我了解的,目前电商首页以及热点数据都会去做缓存 ,一般缓存都是定时任务去刷新,或者是查不到之后去更新的,定时任务刷新就有一个问题。 举个简单的例子: 如果所有首页的Key失效时间都是12小时,中午12点刷新的,我零点有个秒杀活动大量用户涌入,假设当时每秒 6000 个请求,本来缓存在可以扛住每秒 5000 个请求,但是缓存当时所有的Key都失效了。此时 1 秒 6000 个请求全部落数据库,数据库必然扛不住,它会报一下警,真实情况可能DBA都没反应过来就直接挂了。此时,如果没用什么特别的方案来处理这个故障,DBA 很着急,重启数据库,但是数据库立马又被新的流量给打死了。这就是我理解的缓存雪崩。 我刻意看了下我做过的项目,感觉再吊的都不允许这么大的QPS直接打DB去,不过没慢SQL加上分库

Redis项目实战(一)--redis基础

♀尐吖头ヾ 提交于 2020-04-18 08:34:13
redis(Remote Dictionary Server) 一、原理及特性层面: 1、优势: 1)数据加载在内存中,执行速度快, 数据结构类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)。 2)单线程多路复用,I/O多路复用(防止 I/O 阻塞)-- 一种效率更高的 I/O 模型, 在单个线程中通过记录跟踪每一个sock(I/O流) 的状态来管理多个I/O流。(相比多线程效率更高, .跟多线程相比较,线程切换需要切换到内核进行线程切换,需要消耗时间和资源, I/O多路复用不需要切换线/进程) 3)协议简单,客户端和服务端使用 RESP协议(容易实现、快速解析), RESP是二进制安全的而且从一个进程发块数据给另一个进程的时候不需要做转换,因为他会在块数据之前加上长度。 *2 $3 GET $4 name 2、特点及应用: 0)支持lua脚本, 在Redis中,执行Lua语言是原子性,也就是说Redis执行Lua的时候是不会被中断的,具备原子性,这个特性有助于Redis对并发数据一致性的支持。 1)支持事务、 watch,操作命令都是原子的。 Redis 事务: Redis中的事务(transaction)是一组命令的集合。 Redis保证一个事务中的所有命令要么都执行,要么都不执行。如果在发送EXEC命令前客户端断线了,则Redis会清空事务队列

redis 有没有ACID事务

a 夏天 提交于 2020-04-18 07:21:55
看redis官网的介绍:         redis确实是有事务的,但是和传统的ACID是否相同呢?    原子性(Atomicity)     原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。    一致性(Consistency)     事务前后数据的完整性必须保持一致。    隔离性(Isolation)     事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。    持久性(Durability)     持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响   原子性:     将多个操作当成一个整体来执行 要么全部执行,要么一个也不执行     在redis中,事务的multi命令后的操作,都将顺序生成在一个队列中,命令不会立即执行,队列中所有的命令会等待exec命令的提交后,才会被一次性执行          可以看到key1最终结果为'b'     执行过程:            如果我们的队列中有命令执行失败了呢? 整个队列会都失败吗?                   key2被设值为'a',这一步是成功的,但incr 只能对数字进行操作,而'a'为字符串,显然会出错

redis实战之事务与持久化

自古美人都是妖i 提交于 2020-04-18 06:04:10
1. 事务描述 (1)什么是事务   事务,就是把一堆事情绑在一起,按顺序的执行,都成功了才算完成,否则恢复之前的样子   事务必须服从ACID原则,ACID原则分别是原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)    原子性 :操作这些指令时,要么全部执行成功,要么全部不执行。只要其中一个指令执行失败,所有的指令都执行失败,数据进行回滚,回到执行指令前的数据状态    一致性 :事务的执行使数据从一个状态转换为另一个状态,但是对于整个数据的完整性保持稳定    隔离性 :在该事务执行的过程中,无论发生的任何数据的改变都应该只存在于该事务之中,对外界不存在影响,只有在事务确认提交之后们才会显示该事务对数据的改变,其他事务才能获取到这些改变后的数据    持久性 :当事务正确完成后,它对于数据的改变是永久性的 (2)并发事务导致的常见错误   第一类丢失更新:撤销一个事务时,把其他事务已提交的更新数据覆盖   脏读:一个事务读取到另一个事务未提交的更新数据   幻读也叫虚读:一个事务执行两次查询,第二次结果集包含第一次中没有或某些行已经被删除的数据,造成两次结果不一致,只是另一个事务在这两次查询中间插入或删除了数据造成的   不可重复读:一个事务两次读取同一行的数据,结果得到不同状态的结果