Redis
文章平均质量分 74
redis
富士康质检员张全蛋
人生实难,唯有自渡。只有接受了真实现的现状和真实的自己,调整好心态,才能脚踏实地的活着,然后去发现角落处的那些惊喜和美好,去相信一切苦难困境都会过去!“即使身处阴沟,也要记得仰望星空”。
展开
-
关于redis的keys命令的性能问题
KEYS pattern查找所有符合给定模式pattern的key。KEYS*匹配数据库中所有key。KEYSh?llo匹配hello,hallo和hxllo等。KEYSh*llo匹配hllo和heeeeello等。KEYSh[ae]llo匹配hello和hallo,但不匹配hillo实际应用中有时候会出现需要遍历redis中的所有键值的需求,比如清理没用的键等等。但是keys这个命令性能真的很差,redis官方文档是这么说...原创 2021-01-20 10:37:43 · 1812 阅读 · 0 评论 -
Redis 切片集群:数据增多了,是该加内存还是加实例?
我曾遇到过这么一个需求:要用 Redis 保存 5000 万个键值对,每个键值对大约是 512B,为了能快速部署并对外提供服务,我们采用云主机来运行 Redis 实例,那么,该如何选择云主机的内存容量呢?我粗略地计算了一下,这些键值对所占的内存空间大约是 25GB(5000 万 *512B)。所以,当时,我想到的第一个方案就是:选择一台 32GB 内存的云主机来部署 Redis。因为 32GB 的内存能保存所有数据,而且还留有 7GB,可以保证系统的正常运行。同时,我还采用 RDB 对数据做持久化,以确转载 2020-12-22 10:56:34 · 478 阅读 · 0 评论 -
Redis Linux系统上的配置优化
通常来看,Redis开发和运维人员更加关注的是Redis本身的一些配置优化,例如AOF和RDB的配置优化、数据结构的配置优化等,但是对于操作系统是否需要针对Redis做一些配置优化不甚了解或者不太关心,然而事实证明一个良好的系统操作配置能够为Redis服务良好运行保驾护航。众所周知Redis的作者对于Windows操作系统并不感冒,目前大部分公司都会将Web服务器、数据库服务器等部署在Linux操作系统上,Redis也不例外。所以接下来介绍Linux操作系统如何优化Redis,包含如下七个方面。..转载 2020-12-11 10:00:08 · 344 阅读 · 0 评论 -
Redis 哨兵集群:哨兵挂了,主从库还能切换吗?
哨兵机制,它可以实现主从库的自动切换。通过部署多个实例,就形成了一个哨兵集群。哨兵集群中的多个实例共同判断,可以降低对主库下线的误判率。但是,我们还是要考虑一个问题:如果有哨兵实例在运行时发生了故障,主从库还能正常切换吗?实际上,一旦多个实例组成了哨兵集群,即使有哨兵实例出现故障挂掉了,其他哨兵还能继续协作完成主从库切换的工作,包括判定主库是不是处于下线状态,选择新主库,以及通知从库和客户端。如果你部署过哨兵集群的话就会知道,在配置哨兵的信息时,我们只需要用到下面的这个配置项,设置主库的 IP转载 2020-12-10 09:16:27 · 749 阅读 · 0 评论 -
Redis 哨兵机制:主库挂了,如何不间断服务?
我们学习了主从库集群模式。在这个模式下,如果从库发生故障了,客户端可以继续向主库或其他从库发送请求,进行相关的操作,但是如果主库发生故障了,那就直接会影响到从库的同步,因为从库没有相应的主库可以进行数据复制操作了。而且,如果客户端发送的都是读操作请求,那还可以由从库继续提供服务,这在纯读的业务场景下还能被接受。但是,一旦有写操作请求了,按照主从库模式下的读写分离要求,需要由主库来完成写操作。此时,也没有实例可以来服务客户端的写操作请求了,如下图所示: ...转载 2020-12-04 10:07:29 · 757 阅读 · 0 评论 -
Redis 数据同步:主从库如何实现数据一致?
前两节课,我们学习了 AOF 和 RDB,如果 Redis 发生了宕机,它们可以分别通过回放日志和重新读入 RDB 文件的方式恢复数据,从而保证尽量少丢失数据,提升可靠性。不过,即使用了这两种方法,也依然存在服务不可用的问题。比如说,我们在实际使用时只运行了一个 Redis 实例,那么,如果这个实例宕机了,它在恢复期间,是无法服务新来的数据存取请求的。那我们总说的 Redis 具有高可靠性,又是什么意思呢?其实,这里有两层含义:一是数据尽量少丢失,二是服务尽量少中断。AOF 和 RDB 保证了前者,转载 2020-11-16 21:28:43 · 730 阅读 · 3 评论 -
Redis 基本架构:一个键值数据库包含什么?
我们知道,Redis 是典型的键值数据库,所以今天,我准备手把手地带你构建一个简单的键值数据库。为啥要这么做呢?还记得我在开篇词说过吗?Redis 本身比较复杂,如果我们一上来就直接研究一个个具体的技术点,比如“单线程”“缓存”等,虽然可以直接学习到具体的内容,甚至立马就能解决一些小问题,但是这样学,很容易迷失在细枝末节里。从我自己的经验来看,更好的学习方式就是先建立起“系统观”。这也就是说,如果我们想要深入理解和优化 Redis,就必须要对它的总体架构和关键模块有一个全局的认知,然后再深入到具..转载 2020-09-27 21:52:26 · 814 阅读 · 0 评论 -
Redis 高性能IO模型:为什么单线程Redis能那么快?
今天,我们来探讨一个很多人都很关心的问题:“为什么单线程的 Redis 能那么快?”首先,我要和你厘清一个事实,我们通常说,Redis 是单线程,主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的,这也是 Redis 对外提供键值存储服务的主要流程。但 Redis 的其他功能,比如持久化、异步删除、集群数据同步等,其实是由额外的线程执行的。所以,严格来说,Redis 并不是单线程,但是我们一般把 Redis 称为单线程高性能,这样显得“酷”些。接下来,我也会把 Redis 称...转载 2020-10-21 20:36:18 · 484 阅读 · 0 评论 -
Redis 论程序的健壮性 ——就看Redis
“众里寻他千百度,蓦然回首,那人却在,灯火阑珊处”。多年的IT生涯,一直希望自己写的程序能够有很强的健壮性,也一直希望能找到一个高可用的标杆程序去借鉴学习,不畏惧内存溢出、磁盘满了、断网、断电、机器重启等等情况。但意想不到的是,这个标杆程序竟然就是从一开始就在使用的分布式缓存——Redis。Redis(Remote Dictionary Server ),即远程字典服务,是 C 语言开发的一个开源的高性能键值对(key-value)的内存数据库。由于它是基于内存的所以它要比基于磁盘读写的数据库效率更转载 2020-10-20 12:00:57 · 337 阅读 · 0 评论 -
Redis 优化之THP 关闭透明大页
THPRedis在启动时可能会看到如下日志:WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. Thiswill create latency and memory usage issues with Redis. To fix this issue runthe command 'echo never > /sys/kernel/mm/transparent_hugepage/ena转载 2020-07-07 22:30:24 · 3195 阅读 · 1 评论 -
redis5 超详细的集群扩容攻略
6380为主节点[root@localhost ~]# cd /usr/local/[root@localhost local]# mkdir -p redis-cluster[root@localhost ~]# cd /usr/local/redis-cluster/[root@localhost redis-cluster]# mkdir -p 6380 6381[root@localhost redis-cluster]# /usr/src/redis-stable/utils/.原创 2020-06-18 11:46:29 · 494 阅读 · 0 评论 -
Redis5 教你一步一步搭建集群
集群环境6台机器,每台机器上跑一个redis实例 server1 192.168.179.99 redis1 server2 192.168.179.100 redis2 server3 192.168.179.101 redis3 server4 192.168.179.102..原创 2020-06-17 23:05:15 · 339 阅读 · 1 评论 -
Redis Sentinel部署规则和API使用
如何监控多个主节点Redis Sentinel可以同时监控多个主节点, 具体拓扑图类似于图。配置方法也比较简单, 只需要指定多个masterName来区分不同的主节点即可, 例如下面的配置监控monitor master-business-1(10.10.xx.1: 6379) 和monitor master-business-2(10.10.xx.2: 6379) 两个主节点:sentinel monitor master-business-1 10.10.xx.1 6379 2...转载 2020-06-16 21:01:34 · 352 阅读 · 0 评论 -
为什么要选Redis
最近阅读了《Redis开发与运维》,非常不错。这里对书中的知识整理一下,方便自己回顾一下Redis的整个体系,来对相关知识点查漏补缺。我按照五点把书中的内容进行一下整理:• 为什么要选择Redis:介绍Redis的使用场景与使用Redis的原因• Redis常用命令总结:包括时间复杂度总结与具体数据类型在Redis内部使用的数据结构• Redis的高级功能:包括持久...原创 2020-04-05 20:47:49 · 313 阅读 · 0 评论 -
Redis 数据结构:快速的Redis有哪些慢操作?
一提到 Redis,我们的脑子里马上就会出现一个词:“快。”但是你有没有想过,Redis 的快,到底是快在哪里呢?实际上,这里有一个重要的表现:它接收到一个键值对操作后,能以微秒级别的速度找到数据,并快速完成操作。数据库这么多,为啥 Redis 能有这么突出的表现呢?一方面,这是因为它是内存数据库,所有操作都在内存上完成,内存的访问速度本身就很快。另一方面,这要归功于它的数据结构。这是因为,键值对是按一定的数据结构来组织的,操作键值对最终就是对数据结构进行增删改查操作,所以高效的数据结构是 Redi..转载 2020-10-15 19:55:20 · 1052 阅读 · 0 评论 -
Redis为什么高并发而且这么快?
对于meger engine来说,但是底层是myisam的表结构,是由myisam的表拼接而成的。在磁盘上面表现为.frm的格式,还会有一个.mrg的文件,但是没有.MYD,.MYI的文件。.mrg就是一个清单,里面是底层表的名字。.frm和.mrg文件都是放在数据目录里面。平时去查询merge表,比如meger表是由a,b两张表构成,会去底层的A,B表的文件里面进行搜索。换句话说meger表原创 2017-11-03 16:33:17 · 1047 阅读 · 0 评论 -
Redis闲谈:你一定需要的知识图谱
场景:Redis面试原创 2020-05-18 10:30:52 · 926 阅读 · 0 评论 -
Redis 单机部署redis实例
Redis入门简介Redis是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。Redis是一个key-value存储系统。 和Memcached缓存类似,Redis支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、hash(哈希类型)。并且支持在服务器端计算集合的并,交和补集(difference)等,还支持多种排序功能。Redis也被看成是一个数据结构服务器。编译安..原创 2020-08-23 13:23:09 · 346 阅读 · 0 评论 -
Redis高级功能之慢查询日志
Redis高级功能 - 慢查询日志Redis提供了5种数据结构,但除此之外,Redis还提供了注入慢查询分析,Redis Shell、Pipeline、事务、与Lua脚本、Bitmaps、HyperLogLog、PubSub、GEO等附加功能,这些功能可以在某些场景发挥很重要的作用.慢查询分析许多存储系统(如:MySQL)提供慢查询日志帮助开发与运维人员定位系统存在的慢操作.所谓...原创 2020-04-12 13:13:10 · 210 阅读 · 0 评论 -
Redis 客户端的管理 输入缓冲区
应用层管理--CRS_STATcrs_stat– Crs_stat 这个命令用于查看CRS维护的所有资源的运行状态,如果不带任何参数时,显示所有资源的概要信息。[grid@RAC1 ~]$ crs_stat -tName Type Target State Host -------------------------------...转载 2018-05-30 22:20:12 · 951 阅读 · 0 评论 -
Redis 客户端管理 存活状态
client list中的age和idle分别代表当前客户端已经连接的时间和最近一次的空闲时间:id=2232080 addr=10.16.xx.55:32886 fd=946 name= age=603382 idle=331060 flags=N db=0sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=get例如上面这条记录代表当期客户端连接Redis的时间为603382秒, 其中空闲了3310转载 2020-05-17 22:24:53 · 2167 阅读 · 0 评论 -
Redis 客户端管理 输出缓冲区obl、 oll、 omem
输出缓冲区Redis为每个客户端分配了输出缓冲区, 它的作用是保存命令执行的结果返回给客户端, 为Redis和客户端交互返回结果提供缓冲, 如图所示:与输入缓冲区不同的是, 输出缓冲区的容量可以通过参数client-outputbuffer-limit来进行设置, 并且输出缓冲区做得更加细致, 按照客户端的不同分为三种: 普通客户端、 发布订阅客户端、 slave客户端, 如图所示:对应的配置规则是:client-output-buffer-limit <class> &转载 2020-05-16 21:44:16 · 2451 阅读 · 0 评论 -
Redis monitor 监控器
Redis有一个monitor命令,某个client执行monitor命令后,就成为了一个监控器,服务器端执行的所有命令都会发送给监控器monitor 是一个用来debug的命令,可以帮助我们了解服务器正在发生什么,例如我们打开monitor监控服务器20分钟,可以收集到期间服务器执行的所有命令,那么就可以分析出很多信息,例如:(1)什么命令执行得次数多(2)哪些key是热点(3)通过对get类型命令的提取,统计出发送流量……monitor命令使用127.0.0.1:63..原创 2020-05-18 20:43:07 · 1457 阅读 · 1 评论 -
Redis 使用monitor造成的内存飙升
美团在REDIS上踩过的一些坑 REDIS内存占用飙升一、现象: redis-cluster某个分片内存飙升,明显比其他分片高很多,而且持续增长。并且主从的内存使用量并不一致。二、分析可能原因:1. redis-cluster的bug (这个应该不存在)2. 客户端的hash(key)有问题,造成分配不均。(redis使用的是crc16, 不会出现这么不均的情况)3. 存在个别大的key-value: 例如一个包含了几百万数据set数据结构(这个有可能)...原创 2020-05-18 21:32:30 · 464 阅读 · 0 评论 -
看懂Redis持久化原理
Redis为持久化提供了两种方式:RDB:在指定的时间间隔能对你的数据进行快照存储(它是备份当前瞬间 Redis 在内存中的数据记录,通过快照(snapshotting)实现的)。AOF:记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据(只追加文件(Append-Only File,AOF),其作用就是当 Redis 执行写命令后,在一定的条件下将执行过的写命...原创 2020-04-04 11:55:58 · 712 阅读 · 0 评论 -
Redis AOF日志:宕机了,Redis如何避免数据丢失?
如果有人问你:“你会把 Redis 用在什么业务场景下?”我想你大概率会说:“我会把它当作缓存使用,因为它把后端数据库中的数据存储在内存中,然后直接从内存中读取数据,响应速度会非常快。”没错,这确实是 Redis 的一个普遍使用场景,但是,这里也有一个绝对不能忽略的问题:一旦服务器宕机,内存中的数据将全部丢失。我们很容易想到的一个解决方案是,从后端数据库恢复这些数据,但这种方式存在两个问题:一是,需要频繁访问数据库,会给数据库带来巨大的压力;二是,这些数据是从慢速数据库中读取出来的,性能肯定比不上从 R转载 2020-10-27 21:30:28 · 1756 阅读 · 1 评论 -
Redis 内存快照:宕机后,Redis如何实现快速恢复?
上节课,我们学习了 Redis 避免数据丢失的 AOF 方法。这个方法的好处,是每次执行只需要记录操作命令,需要持久化的数据量不大。一般而言,只要你采用的不是 always 的持久化策略,就不会对性能造成太大影响。但是,也正因为记录的是操作命令,而不是实际的数据,所以,用 AOF 方法进行故障恢复的时候,需要逐一把操作日志都执行一遍。如果操作日志非常多,Redis 就会恢复得很缓慢,影响到正常使用。这当然不是理想的结果。那么,还有没有既可以保证可靠性,还能在宕机时实现快速恢复的其他方法呢?当然有..转载 2020-11-03 22:45:47 · 554 阅读 · 0 评论 -
Redis AOF文件校验
验证快照文件和AOF文件无论是快照持久化还是AOF持久化,都提供了在遇到系统故障时进行数据恢复的工作。Redis提供了两个命令行程序redis-check-aof 和redis-check-dump,他们可以在系统故障发生之后,检查AOF文件和快照文件的状态,并在有需要的情况下对文件进行修复。在不给定任何参数的情况下运行这两个程序,就可以看见他们的基本使用方法:$ redis-check...原创 2020-05-04 16:08:50 · 2474 阅读 · 0 评论 -
Redis AOF之执行flushdb或flushall之后的后悔药
FLUSHALL ASYNC(Redis 4.0.0 or greater)Redis is now able to delete keys in the background in a different thread without blocking the server. AnASYNCoption was added toFLUSHALLandFLUSHDBin order to let the entire dataset or a single database to be f...原创 2020-07-18 12:42:13 · 1872 阅读 · 0 评论 -
Redis 持久化问题定位与优化
数据目录夹(在centos里面切换到mysql目录下面查看,可以看到许多数据文件。)[root@localhost lib]# cd[root@localhost ~]# cd /var/lib/mysql[root@localhost mysql]# ls auto.cnf ib_logfile0 mysql performance_schemaibdata转载 2017-10-09 14:20:44 · 2607 阅读 · 0 评论 -
LInux fork的写时复制(copy on write)
在读《Redis设计与实现》关于哈希表扩容的时候,发现这么一段话:执行BGSAVE命令或者BGREWRITEAOF命令的过程中,Redis需要创建当前服务器进程的子进程,而大多数操作系统都采用写时复制(copy-on-write)来优化子进程的使用效率,所以在子进程存在期间,服务器会提高负载因子的阈值,从而避免在子进程存在期间进行哈希表扩展操作,避免不必要的内存写入操作,最大限度地节约内存。Linux下的copy-on-write在说明Linux下的copy-on-write机制前,我们首.原创 2020-09-04 10:52:10 · 5426 阅读 · 4 评论 -
Redis 主从复制的搭建
一:概念:NFS(Network File System)即网络文件系统,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。最早由sun公司开发,是类unix系统间实现磁盘共享的一种方法。缺点:1:nfs属于本地文件系统,在高并发场景和大存储量下,需要使用分布式存储mfs,...原创 2018-09-19 16:05:38 · 378 阅读 · 0 评论 -
Redis 浅谈主从复制
Myisam特征从磁盘上表现来说以三种形态进行存放,无论什么引擎的表都会有一个表结构文件,表结构文件里面保存了表是怎么定义的信息。.MYD,.MYI结尾的就是MYISAM具有代表性的另外两个文件,一个是存放数据文件的,所谓的数据文件就是保存了每一行的内容,另外一个是索引文件,目的是加快查询表里面的内容的。索引就像字典里面的目录,是先查阅字典里面的目录再定位某个字在第几页。通过索引的搜索对数据进行搜原创 2017-10-30 16:19:22 · 714 阅读 · 0 评论 -
你一定能看懂的Redis主从复制流程
做到这一点,你也可以成为优秀的程序员 作为一个程序员,我经常会问自己一个问题:优秀的程序员都具备哪些特质? 我总结过很多特质,例如:有解决问题的能力有独立思考的能力有好奇心、有探索精神逻辑清晰,能够用通俗的语言把技术问题讲清楚有良好的英文阅读能力数学好,算法好 经过一段时间的观察,我发现这上面的所有特质,都可以由一种转载 2017-09-28 15:41:54 · 419 阅读 · 0 评论 -
Redis 聊聊主从复制需要注意的几个方面
linux服务器新添加一块硬盘,可以直接将盘格式化挂载就能用,比如挂载在/usr/local目录,但是这样有一个弊端,就是如果这一块磁盘满了,后续想要扩容的话,不能继续挂载这个/usr/local挂载点上,对扩容造成一定的麻烦,为此我们建议采用lvm的方式,这样可以支持动态扩容磁盘。下面介绍详细的操作方式。由于安装oracle之前的磁盘是没有LVM的,所以新添加了一块硬盘,要将/u01目原创 2017-12-08 10:11:27 · 888 阅读 · 0 评论 -
Redis 全量复制详解
windows 启动关闭Oracle监听和服务转自:http://taink.iteye.com/blog/1335742http://www.cnblogs.com/ljh22/archive/2012/03/16/2399781.html经常要用数据库,让他自己启动的话,开机太慢,所以用命令启动方便点。1.开启: 在运行中输原创 2017-11-29 16:01:29 · 2085 阅读 · 0 评论 -
Redis 部分复制详解
对数据库进行备份1.对数据库进行全备1.使用backup database 命令执行备份RMAN> BACKUP DATABASE;执行上述命令后将对目标数据库中的所有数据文件进行备份,由于没有显式指定FORMAT参数,rman会自动为每个备份片段命名,并保存在ORACLE_HOME/database目录下。当然,也可以通过显式指定format原创 2018-03-06 17:44:17 · 3983 阅读 · 0 评论 -
Redis的全量同步和增量同步
mysqlhotcopy使用lock tables、flush tables和cp或scp来快速备份数据库.它是备份数据库或单个表最快的途径,完全属于物理备份,但只能用于备份MyISAM存储引擎和运行在数据库目录所在的机器上.与mysqldump备份不同,mysqldump属于逻辑备份,备份时是执行的sql语句.使用mysqlhotcopy命令前需要要安装相应的软件依赖包.安装包包括:原创 2017-10-16 09:52:07 · 2511 阅读 · 0 评论 -
Redis 主从复制 心跳和异步复制
主从复制:心跳机制主从节点在建立复制后, 它们之间维护着长连接并彼此发送心跳命令,如图所示:主从心跳判断机制:1) 主从节点彼此都有心跳检测机制, 各自模拟成对方的客户端进行通信, 通过client list命令查看复制相关客户端信息, 主节点的连接状态为flags=M, 从节点连接状态为flags=S。2) 主节点默认每隔10秒对从节点发送ping命令, 判断从节点的存活性和连接状态。 可通过参数repl-ping-slave-period控制发送频率。3) 从节点在主线程中每隔1秒发送r.转载 2020-05-13 21:10:27 · 2105 阅读 · 0 评论 -
Redis 主从复制需要注意的问题(1)
通过复制机制, 数据集可以存在多个副本(从节点) 。 这些副本可以应用于读写分离、 故障转移(failover) 、 实时备份等场景。 但是在实际应用复制功能时, 依然有一些坑需要跳过。读写分离对于读占比较高的场景, 可以通过把一部分读流量分摊到从节点(slave) 来减轻主节点(master) 压力, 同时需要注意永远只对主节点执行写操作, 如图所示。当使用从节点响应读请求时, 业务端可能会遇到如下问题:·复制数据延迟。·读到过期数据。·从节点故障。数据延迟Redi..转载 2020-05-19 21:44:45 · 726 阅读 · 0 评论