redis
mischen520
JAVA高级架构师
展开
-
如何实现分布式锁
基于zookeeper的实现方式,核心思想在zk中是为每个线程生成一个有序的临时节点,为确保有序性,在排序一次全部节点,获取全部节点,每个线程判断自己是否最小,如果是的话,获得锁,执行操作,操作完删除自身节点。如果不是第一个的节点则监听它的前一个节点,当它的前。基于redis实现分布式锁:核心思想是获取锁的时候,使用setnx加锁,并使用expire命令为锁添加一个超时时间,超过该时间则自动释放锁。使用redis的优点是性能高,缺点是特定情况下master宕机,数据没完成同步,其他客户端可以继续获取到锁。原创 2023-11-07 19:39:34 · 56 阅读 · 0 评论 -
redis集群节点间的内部通信机制
meet:某个节点发送meet给新加入的节点,让新节点加入集群中,然后新节点就会开始与其他节点进行通信,不需要发送形成网络的所需的所有CLUSTER MEET命令。奇数个master节点可以在满足选举该条件的基础上节省一个节点,比如三个master节点和四个master节点的集群相比,大家如果都挂了一个master节点都能选举新master节点,如果都挂了两个master节点都没法选举新master节点了,所以奇数的master节点更多的是从节省机器资源角度出发说的。消息的延迟 , 消息冗余。原创 2022-09-03 09:31:42 · 875 阅读 · 0 评论 -
Redis的过期键的删除策略
Redis是key-value数据库,我们可以设置Redis中缓存的key的过期时间。Redis的过期策略就是指当Redis中缓存的key过期了,Redis如何处理。惰性过期:只有当访问一个key时,才会判断该key是否已过期,过期则清除。该策略可以最大化地节省CPU资源,却对内存非常不友好。极端情况可能出现大量的过期key没有再次被访问,从而不会被清除,占用大量内存。定期过期:每隔一定的时间,会扫描一定数量的数据库的expires字典中一定数量的key,并清除其中已过期的key。该策略是一个折中方案。原创 2022-07-06 08:40:14 · 130 阅读 · 0 评论 -
docker容器中部署redis cluster集群的详细操作步骤(3主3从)
要部署redis-cluster集群模式,先来了解redis-cluster集群模式的两种实现原理,一种是使用槽的方式进行处理,需要计算16384个槽的位置,一种是使用一致性hash来计算hash环。两种方式大同小异,都是需要计算。下面详细的来说明一下:redis集群功能的限制:redis集群相对单机来说,在功能上存在一些限制。redis集群时使用 JAVA CRC16校验算法来计算槽位1.使用槽来实现key批量操作支持有限类似mset、mget操作,目前只支持对具有相同slot值的key进行批原创 2022-01-15 08:27:19 · 794 阅读 · 1 评论 -
redis分布式存储的常见方案,解释说明redis集群切片的几种常见方式
redis分布式存储的常见方案有3种:1.主从(Master/Slave)模式;2.哨兵(Sentinel)模式;3.集群(Cluster)模式redis集群切片的常见方式有:1.客户端切片。分区逻辑在客户端实现,客户端采用一致性哈希决定redis节点。2.中间件切片。在应用软件和redis之间,例如Twemproxy、Codis等,由中间件实现服务到后台redis节点的路由分派。3.客户端服务端协作分片。redis cluster集群模式,客户端采用一致性哈希,服务端提供错误节点的重定向服务原创 2022-01-01 09:33:31 · 1917 阅读 · 0 评论 -
什么是缓存穿透、缓存雪崩、缓存击穿以及他们的解决方案
1)缓存穿透是指查询一个一定不存在的数据。由于缓存命不中时会去查询数据库,查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,造成缓存穿透。解决方案:①是将空对象也缓存起来,并给它设置一个很短的过期时间,最长不超过5分钟② 采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被这个bitmap拦截掉,从而避免了对底层存储系统的查询压力2)如果缓存集中在一段时间内失效,发生大量的缓存穿透,所有的查询都落在数据库上,就会造成缓存雪崩。解决原创 2021-09-09 23:45:02 · 289 阅读 · 0 评论 -
redis为什么那么快
1)完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。2)数据结构简单,对数据操作也简单,Redis中的数据结构是专门进行设计的3)采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗4)使用多路I/O复用模型,非阻塞IO5)使用底层模型不同,它们之间底层实现方式以及与客户端之间通信的应用协议不一样,Redis直接自己构建了VM 机制 ,因为一般的系统调用系统函原创 2021-07-05 20:53:50 · 149 阅读 · 0 评论 -
说一说redis的持久化?
1)RDB持久化:在指定的时间间隔内持久化 服务shutdown会自动持久化③ 输入bgsave也会持久化2)AOF : 以日志形式记录每个更新操作Redis重新启动时读取这个文件,重新执行新建、修改数据的命令恢复数据。保存策略:推荐(并且也是默认)的措施为每秒持久化一次,这种策略可以兼顾速度和安全性。缺点:1 比起RDB占用更多的磁盘空间2 恢复备份速度要慢3 每次读写都同步的话,有一定的性能压力4 存在个别Bug,造成恢复不能选择策略:官方推荐:...原创 2021-07-05 20:47:27 · 113 阅读 · 0 评论 -
什么是缓存穿透?缓存雪崩?缓存击穿?以及它们各自的解决方案
1)缓存穿透是指查询一个一定不存在的数据。由于缓存命不中时会去查询数据库,查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,造成缓存穿透。解决方案:是将空对象也缓存起来,并给它设置一个很短的过期时间,最长不超过5分钟② 采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被这个bitmap拦截掉,从而避免了对底层存储系统的查询压力2)如果缓存集中在一段时间内失效,发生大量的缓存穿透,所有的查询都落在数据库上,就会造成缓存雪崩。原创 2021-07-03 15:15:40 · 268 阅读 · 0 评论 -
Twemproxy的部署和配置详解
Twemproxy 概述 Twemproxy(又称为nutcracker)是一个轻量级的Redis和Memcached代理,主要用来减少对后端缓存服务器的连接数。Twemproxy是由Twitter开源出来的缓存服务器集群管理工具,主要用来弥补Redis/Memcached 对集群(cluster)管理的不足。antirez(Redis作者)写过一篇对twemproxy的介绍,他...原创 2019-06-29 23:52:16 · 4560 阅读 · 0 评论 -
外部连接不上redis的解决方法
由于linux防火墙默认开启,redis的服务端口6379并不在开放规则之内,所有需要将此端口开放访问或者关闭防火墙。关闭防火墙命令:sevice iptables stop如果是修改防火墙规则,可以修改:/etc/sysconfig/iptables文件原创 2017-05-29 09:17:32 · 3559 阅读 · 0 评论 -
redis的应用场景
缓存(数据查询、短连接、新闻内容、商品内容等等)。(最多使用)分布式集群架构中的session分离。聊天室的在线好友列表。任务队列。(秒杀、抢购、12306等等)应用排行榜。网站访问统计。数据过期处理(可以精确到毫秒)原创 2017-05-29 09:14:17 · 329 阅读 · 0 评论 -
什么是redis
Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库。它通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止Redis支持的键值数据类型如下:字符串类型散列类型列表类型集合类型有序集合类型。原创 2017-05-29 09:10:31 · 264 阅读 · 0 评论