Middleware
共 56 篇文章
Redis内存回收
一,Redis内存回收 Redis之所以性能强,最主要的原因就是基于内存存储。然而单节点的Redis其内存大小不宜过大,会影响持久化或主从同步性能。 我们可以通过修改配置文件来设置Redis的最大内存: # 格式 # maxmemory <bytes> # 例如 maxmemory 1gb 当内存
Redis通信协议
一,RESP协议 1.1 介绍 Redis是一个CS架构的软件,通信一般分两步(不包括pipeline和Pubsub) 客户端(client)向服务端(server)发送一条命令 服务端解析并执行命令,返回响应结果给客户端 因此客户端发送命令的格式、服务端响应结果的格式必须有一个规范,这个规范就是通
Redis网络模型
一,用户空间和内核空间 二,阻塞IO(Blocking IO) 三,非阻塞IO(NonBlocking IO)
Redis数据结构
一,动态字符串SDS 我们都知道Redis中保存的Key是字符串,value往往是字符串或者字符串的集合。 可见字符串是Redis中最常用的一种数据结构,不过Redis没有直接使用C语言中的字符串,因为c语言字符串存在很多问题: 获取字符串的长度需要通过运算 非二进制安全 不可修改 Redis构建了
集群优化
一,引言 集群虽然具备高可用特性,能实现自动故障恢复,但是如果使用不当,也会存在一些问题: 集群完整性问题 集群带宽问题 数据倾斜问题 当数据出现BigKey,进行数据处理使用了Hash_tag都会出现数据倾斜问题,导致部分节点负担少,部分节点负担中。 客户端性能问题 客户端在访问集群时,需要做节点
服务端优化
一,持久化配置 Redis的持久化虽然可以保证数据安全,但是也会带来额外数据开销,因此持久化请遵守下列建议 用来做缓存的Redis实例尽量不要开启持久化功能 建议关闭RDB持久化功能,使用AOF持久化 利用脚本定期在slave节点做RDB,实现数据备份 设置合理的rewrite阈值,避免频繁的bgr
批处理优化
一,Pipline 1.1 为什么要优化批处理 单个命令的执行流程: N条命令依次执行流程: N条命令批量执行:
Redis键值设计与BigKey问题
一,设计Key结构 Redis的key虽然可以自定义,但是最好遵循以下几个最佳实践约定: 遵循基本格式:[业务名]:[数据名]:[id] value长度不超过44字节 不包含特殊字符 例如:登录业务,保存用户信息,key为:login:user:10 优点: 可读性强 避免key冲突 方便管理 更节
Redis通过HyperLogLog实现UV统计
一,HpyerLogLog Redis 的 HyperLogLog(HLL) 是一种概率型数据结构,用于高效地 统计大规模数据的唯一元素数量(基数估算)。它的核心特点是 占用固定极小内存(12KB),却能统计上亿级不重复元素,误差率仅约 0.81%。 HyperLogLog 的核心特性 特性 说明
Redis通过BitMap实现用户签到
一,BitMap用法 1.1 引言 假如我们用一张表来存储用户签到信息,其结构应该如下 字段 说明 id 主键 user_id 用户id year 签到的年 month 签到的月 date 签到的日期 is_backup 是否补签 假如有1千万用户,平均每人每年签到10次,则这张表一年数据量为1亿条