import redis import time import math import threading import typing from redis import Redis class _WatchThread(threading.Thread): def __init__(self, target, args=(), kwargs={}): super(_WatchThread, self).__init__() self.func = target self.args = args self.kwargs = kwargs self.result = None def run(self): # …
缓存的使用和设计 缓存的收益与成本 收益 加速读写 通过缓存加速读写:CPU L1/L2/L3 Cache,浏览器缓存,Ehcache缓存数据库结果 降低后端负载 后端服务器通过前端缓存降低负载:业务端使用Redis降低后端MySQL负载 成本 数据不一致 缓存层和数据层有时间窗口不一致,和更新策略有关 代码维护成本:多了一层缓存逻辑 运维成本:Redis Cluster 使用场景 降低后端负载 用于高消耗的SQL:join结果集/分组统计结果 加速请求响应 利用Redis/Memcache优化IO时间 大量写合并为批量写 计数器线Redis累加再批量更新到后端数据库 缓存更新策略 LRU/LFU/FIFO算法剔除:例 …
Redis Cluster 背景 并发量 <10万dps 数据量 单机内存<256G 带宽 网卡限制 解决方式 提高机器配置 分布式 数据分布 | 分布方式 | 特点 | 典型产品 | | ——– | —————– | ——– | | 哈希分布 | 数据分散度高数据分布业务无关无法顺序访问支持批量操作 | 一致性哈希MemcacheRedis Cluster缓存产品 | | 顺序分布 | 数据分散度易倾斜键值业务相关可顺序访问支持批量操作 | BigTableHBase | 哈希 …
集群伸缩 伸缩原理 伸:增加节点 缩:节点下线 集群伸缩:槽和数据在节点之间的移动 扩容集群 准备新节点 打开集群模式 配置和其他节点统一 启动后是孤立的节点 加入集群meet 在集群节点中配置:cluster meet 127.1 <newnodeport> 使用redis-trib.rb: redis-trib.rb ad-node new_host:new_port existing_host:existing_port --slave --master_id <arg>{扩展参数是配置为从节点} 为它迁移槽和数据可以实现扩容 可以作为从节点负责故障转移 迁移槽和数据 1). 对目标节点发 …