
Redis
CCCCCCCYYY_
不会翻身的咸鱼一条
展开
-
【Redis】Redis配置多数据源
Redis配置多数据源一般来说单个服务都是只配置一个Redis地址端口指定数据库和一个关系型数据库。但是也偶尔会出现一个服务需要连接不同的两个或以上的Redis地址进行读写数据,比如说最近的公司需求:员工分散在两个相似的单体服务,在新增员工时,要保证在两个数据库内的工号不重复且自增。其实这种情况我觉得还是利用消息队列如RabbitMQ好处理的,但苦于目前的小中台内没有搭建完善的消息队列,所以暂时还是只能从数据源下手,再考虑到暂时以后也不会再新增类似服务,且管理新增员工的同事只有一个人,所以暂时不考虑原创 2020-08-16 18:56:22 · 919 阅读 · 0 评论 -
【Redis】Redis的淘汰策略
Redis的内存淘汰当Redis的实际使用内存超出Redis配置参数maxmemory后,Redis会根据配置来决定如何腾出新的空间来继续提供读写服务。这和Reids的过期策略不一样,过期策略是设置了过期时间的key的删除策略,而内存淘汰是当内存溢出时发生的事件。几种可选淘汰策略:通过maxmemory-policy进行设置:1、noeviction(默认):写请求不可用,读请求可用(del指令也可用),保证了数据不丢失,但线上业务不可持续进行。2、volatile-lru:尝试淘汰设置了过期时原创 2020-06-08 00:17:04 · 278 阅读 · 0 评论 -
【Redis】Redis过期策略
Redis的过期策略Redis中所有数据结构都可以设置过期时间,在一个key设置了过期时间后,Redis会将该key放入一个独立的字典中,并定时遍历这个字典来删除到期的key(定时删除)。也可以在客户端访问这个key的时候,对key 的过期时间进行判断,过期了再删除(惰性删除)。定时扫描策略1、先从过期字典随机选出20个key(扫描耗时上限25ms);2、判断并删除已经过期的key;3、如果过期key的比例超过25%,回到步骤1;需要注意的是,从节点不会进行过期扫描,而是主节点key到期时删除原创 2020-06-07 01:47:11 · 140 阅读 · 0 评论 -
【Redis】Redis集群:Sentinel
Redis Sentinel基本原理Redis提供的一种高可用方案:类似于监控器,当故障发生时可以自动进行主从切换(自动选择一个最优的从节点切换为主节点),一般由3-5个节点组成。客户端连接Redis集群时,会首先连接Redis Sentinel(如果有的话),再通过Sentinel查询主节点的地址进行连接。若主节点因各种原因不可用时,一个从节点会被提升为新的主节点,其他从节点开始和新的主节点建立主从关系。而客户端重新向Sentinel查询最新主节点的地址进行连接。而原先挂掉的主节点恢复后,变成从原创 2020-06-02 23:49:58 · 168 阅读 · 0 评论 -
【Redis】Redis集群:主从同步
当网络分区发生时,一致性和可用性两难全。Redis的一致性与可用性Redis的主从数据是异步同步的,分布式的Redis并不满足一致性要求。但Redis保证最终一致性,从节点会采用多种策略追赶,尽力保持和主节点一致。客户端在Redis主节点修改了数据后,立即返回,即使在主从网络断开的情况下,主节点依旧可以正常对外提供修改服务,所以Redis满足可用性。增量同步Redis同步的是指令流,主节点会将产生修改性影响的指令记录在本地内存buffer中,然后异步将buffer中的指令同步到从节点。从节点则一.原创 2020-05-31 22:52:27 · 467 阅读 · 0 评论 -
【Redis】Redis原理:事务
什么是事务?一系列操作要么全部执行,要么全部不执行。也就是保证连续多个操作的原子性。比如前面Redis分布式锁时提到的Setnx和Expire的问题Redis事务基本用法multi:事务的开始exec:事务的执行discard:事务的丢弃,用于丢弃事务缓存队列中的所有指令,在exec之前multi//事务开始SET page 20//指令incr pageexec//事务执行所有指令在exec执行前都不执行,而是缓存在服务器的一个事务队列中。直到收到exec指令,才开始执行整个事务队列原创 2020-05-31 20:09:54 · 164 阅读 · 0 评论 -
【Redis】Redis原理:持久化
为什么需要持久化?Redis数据都存在内存里,也就是说如果你不小心踢了电源,或者电脑突然宕机,数据就全部OVER了。所以就得有一种机制保证Redis的数据不会因为各种各样的故障丢失。Redis的持久化机制有两种机制,第一种RDB快照,对数据做一次全量备份,本质是内存数据的二进制序列化形式;第二种AOF日志,连续的增量备份,记录的是内存数据修改的指令记录文本。RDB原理Redis是单线程程序,也就意味着这个线程要同时负责多个客户端套接字的并发读写操作和内存数据结构的逻辑读写。而且RDB内存快照要求原创 2020-05-24 22:27:17 · 204 阅读 · 0 评论 -
【Redis】Redis原理:线程IO模型
Redis为什么快?1.Redis所有数据都在内存中存储,所以所有运算都是内存级别的运算。正因为避免了从磁盘中获取数据,Redis才会如此的快。2.还有一点就是因为Redis是单线程程序,从而避免了上下文切换的消耗。但也因为如此,时间复杂度高(O(n))的指令如keys 可能会导致Redis卡住。多路复用事件轮询也就是多路复用,是用来解决非阻塞IO的线程通知问题——当数据准备好,线程如何得到通知;缓冲区被写满,数据写不进去,剩下的数据该何时被写入,线程又如何得到通知。事件轮询API,操作系统提供的原创 2020-05-24 01:20:30 · 318 阅读 · 0 评论 -
【Redis】Redis分布式锁
为什么需要分布式锁?因为分布式系统中进行逻辑处理时会遇到并发问题。比如一个操作要修改某个订单的状态,而修改状态就需要先读出订单的状态,在内存里修改完了再存回Redis。如果同时有很多个这样的操作同时要修改同一个订单,并发问题就出现了。因为读取和修改并不是一个原子操作,当发生上下文切换的时候,读取和修改是可以被线程调度机制打断的。Redis分布式锁本质其实就是某个操作在操作前使用Redis的setnx指令占坑,操作完了再用del指令把门开了。而别的操作进来需要判断这个坑有没有被使用,被使用了则需要等待原创 2020-05-23 13:48:34 · 226 阅读 · 0 评论 -
【Redis】Redis基础(一):数据结构
Redis安装DOCKERdocker pull redisdocker run --name redis -d -p6379:6379 redisdocker exec -it redis redis-cliUbuntuapt-get install redisRedis数据结构String(字符串)内部表示是一个字符数组,是可以修改的字符串,类似于ArrayList,采...原创 2020-04-26 11:00:03 · 96 阅读 · 0 评论