202109-13 比较几种Redis集群方案 目录一、概述二、Redis高可用集群搭建三、Redis集群节点间的通信机制3.1、集中式3.2、gossip四、网络抖动五、Redis集群选举原理分析5.1、集群是否完整才能对外提供服务5.2、Redis集群为什么至少需要三个master节点,并且推荐节点数为奇数?5.3、哨兵leader选举流程六、新增/删除节点一、概述在Redis3.0以前的集群一般是借助哨兵sentinel工具来监控主节点的状态,如果主节点异常,则会做主从切换,将某一台slave作为master。哨兵的... 继续阅读 >
202109-10 解析Redis Cluster原理 目录一、前言二、为什么需要RedisCluster三、RedisCluster是什么四、节点负载均衡五、什么是一致性哈希六、虚拟节点机制七、RedisCluster采用的什么算法八、RedisCluster如何做到高可用8.1、集群如何进行扩容8.2、高可用及故障转移九、简单了解gossip协议十、gossip协议消息类型十一、使用gossip的优劣十二、总结一、前言Sentinel集群会对Redis的主从架构中的Redis实例进行监控,一旦发现了master节点宕机了,就会选举出一个Se... 继续阅读 >
202109-09 详解基于redis实现的四种常见的限流策略 目录一、引言二、固定时间窗口算法三、滑动时间窗口算法四、漏桶算法五、令牌桶算法一、引言在web开发中功能是基石,除了功能以外运维和防护就是重头菜了。因为在网站运行期间可能会因为突然的访问量导致业务异常、也有可能遭受别人恶意攻击所以我们的接口需要对流量进行限制。俗称的QPS也是对流量的一种描述针对限流现在大多应该是令牌桶算法,因为它能保证更多的吞吐量。除了令牌桶算法还有他的前身漏桶算法和简单的... 继续阅读 >
202109-09 SpringBoot集成Redis数据库,实现缓存管理 目录一、Redis简介 二、Spring2.0集成Redis 1、核心依赖2、配置文件3、简单测试案例4、自定义序列化配置5、序列化测试三、源代码地址 一、Redis简介 SpringBoot中除了对常用的关系型数据库提供了优秀的自动化支持之外,对于很多NoSQL数据库一样提供了自动化配置的支持,包括:Redis,MongoDB,Elasticsearch。这些案例整理好后,陆续都会上传Git。SpringBoot2版本,支持的组件越来越丰富,对Redis的支持不仅... 继续阅读 >
202109-09 Redis基于Bitmap实现用户签到功能 目录功能分析更多应用场景总结参考资料很多应用上都有用户签到的功能,尤其是配合积分系统一起使用。现在有以下需求:签到1天得1积分,连续签到2天得2积分,3天得3积分,3天以上均得3积分等。如果连续签到中断,则重置计数,每月重置计数。显示用户某月的签到次数和首次签到时间。在日历控件上展示用户每月签到,可以切换年月显示。...功能分析对于用户签到数据,如果直接采用数据库存储,当出现高并发访问时... 继续阅读 >
202109-09 redis分布式锁RedissonLock的实现细节解析 redis分布式锁RedissonLock简单使用Stringkey="key-lock";RLocklock=redisson.getLock(key);lock.lock();try{//TODO}catch(Exceptione){log.error(e.getMessage(),e);}finally{lock.unlock();}Stringkey="key-tryLock";longmaxWaitTime=3_000;RLocklock=redisson.getLock(key);if(lock.tryLock(maxWaitTime,TimeUnit.MILLISECONDS)){try{//TODO}catch(Exceptione){... 继续阅读 >
202109-09 springboot利用redis、Redisson处理并发问题的操作 一、引入问题在工作中,遇到的接口基本都是长这样的:如下为一个库存扣减的接口。从redis中获取库存数量,然后扣减一个数量问题这个接口在并发的情况下是有问题,可以用jmeter测试一下(用postman压力测试了一下,没有测出并发问题。网上有的博客说postman没法测试并发)jmeter设置:100个并发打印结果:问题很严重呀解决方案,优化如下:jmeter设置:101个并发,stock=100,则正确结果是应该会出现一次“扣减失败,库存不足”打印... 继续阅读 >
202109-09 redis实现的四种常见限流策略 目录引言固定时间窗口算法实现滑动时间窗口算法实现漏桶算法实现令牌桶算法引言在web开发中功能是基石,除了功能以外运维和防护就是重头菜了。因为在网站运行期间可能会因为突然的访问量导致业务异常、也有可能遭受别人恶意攻击所以我们的接口需要对流量进行限制。俗称的QPS也是对流量的一种描述针对限流现在大多应该是令牌桶算法,因为它能保证更多的吞吐量。除了令牌桶算法还有他的前身漏桶算法和简单的计数算法... 继续阅读 >
202109-06 Redis 哨兵集群的实现 目录1、Sentinel哨兵2、Redis主从分离一、配置Master二、配置Slave1、在配置文件中配置从服务2、在服务启动后设置3、总结3、Sentinel哨兵1、配置端口2、配置主服务器的ip和端口3、启动Sentinel4、关闭Master5、重连Master4、Sentinel总结一、Sentinel的作用:二、Sentinel的工作方式:1、Sentinel哨兵Sentinel(哨兵)是Redis的高可用性解决方案:由一个或多个Sentinel实例组成的... 继续阅读 >
202108-10 详解基于redis实现分布式锁 目录前言原理剖析实现编写注解拦截器拦截上述提及工具问题分析前言为了保证一个在高并发存场景下只能被同一个线程操作,java并发处理提供ReentrantLock或Synchronized进行互斥控制。但是这仅仅对单机环境有效。我们实现分布式锁大概通过三种方式。redis实现分布式锁数据库实现分布式锁zk实现分布式锁原理剖析上述三种分布式锁都是通过各自为依据对各个请求进行上锁,解锁从而控制放行还是拒绝。redis锁是基于其提供的s... 继续阅读 >
202108-08 详解Redis复制原理 目录前言一.配置与实践配置实践只读二.工作原理三.数据同步全量复制部分复制前言本文主要介绍Redis复制机制一.配置与实践配置Redis实例分为主节点(master)和从节点(slave),默认情况下都是主节点。每一个从节点只能有一个主节点,但是每一个主节点可以有多个从节点(注意数量,多个从节点会导致主节点写命令多次发送从而过度消耗网络带宽,可用树状结构降低主节点负载)。复制是单向的,只能从主节点复制到从节点。配置复制的... 继续阅读 >
202108-08 详解PHP解决守护进程Redis假死 目录一、一个简单的守护进程示例二、一个不再假死(伪活)的Redis常驻进程示例一、一个简单的守护进程示例<?php$redis=new\Redis();$redis->connect('localhost',6379);$redis->auth('xxxxx');//Redis密码如果没有设置为空字符串。$redis->select(1);$queueKey='redis_queue_services_key';//业务数据队列。$queueIngKey='redis_queue_services_ing_key';//处理中的队列。try{while(true){... 继续阅读 >
202108-06 springboot2.5.0和redis整合配置详解 目录基本概况为什么使用缓存Redis缓存下载Redis1.pom添加依赖2.application.properties配置文件3.RedisConfig.java配置类4.调用redis基本概况为什么使用缓存缓存是在内存中存储的数据备份,当数据没有发生本质变化时就可以直接从内存中查询数据,而不用去数据库查询(在磁盘中)CPU读取内存的速度要比读取磁盘快,可以提高效率Redis缓存RemoteDictionnaryServer(远程数据服务),是一款内存高速缓存数据库。五种常用数据类型... 继续阅读 >
202108-06 深入理解redis中multi与pipeline 背景由于对redis缓存中数据有批量操作,例如预热缓存数据,或者在列表页批量去获取缓存数据,在使用了multi批量提交事务后,发现redis压力高居不下,而使用了pipeline之后压力回落了平常,也因为这个案例,特在此写个分析与笔记。multi简介标记一个事务块的开始。事务块内的多条命令会按照先后顺序被放进一个队列当中,最后由EXEC命令原子性(atomic)地执行。实现原理我用php扩展调起redis服务,执行,代码如下:$redis=newred... 继续阅读 >
202107-26 详解Redis基本命令与使用场景 目录Redis和Memcached对比基本命令场景1:统计每个用户的登录天数场景2:电商网站派发礼物更多命令通过管道连接Redis发送命令发布/订阅功能Redis的事务为什么Redis的事务不支持回滚(rollback)Redis和Memcached对比其中有一个比较重要的区别是关于其提供的数据结构区别Memcached在其数据结构中仅使用字符串和整数。因此,您保存的所有内容都可以是字符串或整数。它很复杂,因为对于整数,您可以做的唯一数据操作是添加或减去它... 继续阅读 >
202107-22 详解Redis集群搭建的三种方式 目录一、单节点实例二、主从模式(master/slaver)三、sentinel模式四、cluster模式一、单节点实例单节点实例还是比较简单的,平时做个测试,写个小程序如果需要用到缓存的话,启动一个Redis还是很轻松的,做为一个key/value数据库也是可以胜任的二、主从模式(master/slaver)redis主从模式配置主从模式:redis的主从模式,使用异步复制,slave节点异步从master节点复制数据,master节点提供读写服务,slave节点只提供... 继续阅读 >