文章分类 - 数据库 / Redis
摘要:一,Redis内存回收 Redis之所以性能强,最主要的原因就是基于内存存储。然而单节点的Redis其内存大小不宜过大,会影响持久化或主从同步性能。 我们可以通过修改配置文件来设置Redis的最大内存: # 格式 # maxmemory <bytes> # 例如 maxmemory 1gb 当内存使
阅读全文
摘要:一,RESP协议 1.1 介绍 Redis是一个CS架构的软件,通信一般分两步(不包括pipeline和Pubsub) 客户端(client)向服务端(server)发送一条命令 服务端解析并执行命令,返回响应结果给客户端 因此客户端发送命令的格式、服务端响应结果的格式必须有一个规范,这个规范就是通
阅读全文
摘要:一,用户空间和内核空间 二,阻塞IO(Blocking IO) 三,非阻塞IO(NonBlocking IO) 四,IO多路复用(IO Multiplexing) 4.1 介绍 4.2 select 4.3 poll 4.4 epoll select模式存在的三个问题: 能监听的FD最大不超过102
阅读全文
摘要:一,引言 集群虽然具备高可用特性,能实现自动故障恢复,但是如果使用不当,也会存在一些问题: 集群完整性问题 集群带宽问题 数据倾斜问题 当数据出现BigKey,进行数据处理使用了Hash_tag都会出现数据倾斜问题,导致部分节点负担少,部分节点负担中。 客户端性能问题 客户端在访问集群时,需要做节点
阅读全文
摘要:一,持久化配置 Redis的持久化虽然可以保证数据安全,但是也会带来额外数据开销,因此持久化请遵守下列建议 用来做缓存的Redis实例尽量不要开启持久化功能 建议关闭RDB持久化功能,使用AOF持久化 利用脚本定期在slave节点做RDB,实现数据备份 设置合理的rewrite阈值,避免频繁的bgr
阅读全文
摘要:一,Pipline 1.1 为什么要优化批处理 单个命令的执行流程: N条命令依次执行流程: N条命令批量执行: 1.2 Pipeline介绍 Pipeline的多个命令之间不具备原子性 二,集群下的批处理 如MSET或者Pipeline这样的批处理需要在一次请求中携带多条命令,而此时如果Redis
阅读全文
摘要:一,设计Key结构 Redis的key虽然可以自定义,但是最好遵循以下几个最佳实践约定: 遵循基本格式:[业务名]:[数据名]:[id] value长度不超过44字节 不包含特殊字符 例如:登录业务,保存用户信息,key为:login:user:10 优点: 可读性强 避免key冲突 方便管理 更节
阅读全文
摘要:一,安装OpenResty 安装步骤: 安装开发库 yum install -y pcre-devel openssl-devel gcc --skip-broken 安装OpenResty仓库 在Linux系统中添加OpenResty仓库,这样就可以方便未来安装或更新软件包(通过yum check
阅读全文
摘要:一,Lua介绍 快速入门 新建hello.lua文件 touch hello.lua 添加内容 print("Hello World!") 运行 lua hello.lua 二,变量和循环 2.1 数据类型 数据类型 描述 nill 只有值nil属于该类,表示一个无效值,在条件判断中相当于false
阅读全文
摘要:一,引言 传统缓存存在的问题 二,JVM进程缓存介绍 缓存在日常开发中起到至关重要的作用,由于是存储在内存中的,数据的读取速度是非常快的,能大量减少对数据库的访问,减少数据库的压力。我们把缓存分为两类: 分布式缓存,例如Redis 优点:存储量更大,可靠性更好,可以在集群间共享 缺点:访问缓存有网络
阅读全文
摘要:一,搭建分片集群 主从和哨兵可以解决高可用,高并发读的问题,但还有两个问题没有解决: 海量数据存储问题 高并发写的问题 使用分片集群可以解决上述问题,分片集群的特征: 集群中有多个master,每个master保存不同数据 每个master都可以有多个slave节点 master之间通过ping检测
阅读全文
摘要:一,哨兵的作用和原理 Redis提供了哨兵(Sentinel)机制来实现主从集群的自动故障恢复。哨兵的结构和作用如下: 服务状态监控: Sentinel基于心跳机制监测服务状态,每隔1秒向集群的每个实例发送ping命令: 主观下线:如果sentinel节点发现某实例未在规定时间响应,则认为该实例主观
阅读全文
摘要:一,搭建主从架构 1.1 主从集群结构 单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主从集群,实现读写分离。 主从集群架构如图: 1.2 准备实例和配置 在一台虚拟机开启3个实例,实例信息如下 IP port 角色 192.168.150.101 7001 ma
阅读全文
摘要:一,RDB RDB全称:Redis Database Backup file(Redis数据备份文件),也被叫做Redis数据快照。简单来说就是把内存中的所有数据都记录到磁盘。当Redis实例故障重启后,从磁盘中读取快照文件,恢复数据。 快照文件叫RDB文件,默认保存在Redis当前运行目录。 两种
阅读全文
摘要:一,HpyerLogLog Redis 的 HyperLogLog(HLL) 是一种概率型数据结构,用于高效地 统计大规模数据的唯一元素数量(基数估算)。它的核心特点是 占用固定极小内存(12KB),却能统计上亿级不重复元素,误差率仅约 0.81%。 HyperLogLog 的核心特性 特性 说明
阅读全文
摘要:一,BitMap用法 1.1 引言 假如我们用一张表来存储用户签到信息,其结构应该如下 字段 说明 id 主键 user_id 用户id year 签到的年 month 签到的月 date 签到的日期 is_backup 是否补签 假如有1千万用户,平均每人每年签到10次,则这张表一年数据量为1亿条
阅读全文
摘要:一,GEO数据结构 GEO就是Geolocation的简写,代表地理坐标。Redis在3.2版本加入了对GEO的支持,允许存储地理坐标信息,帮助我们根据经纬度来搜索数据 1.1 GeoAdd GeoAdd:添加一个地理空间信息,包含:经度(longitude),纬度(latitude),值(memb
阅读全文
摘要:一,关注和取关 基于该表结构,实现两个接口: 关注和取关接口 判断是否关注的接口 关注是User之间的关系,是博主与粉丝的关系,数据库中有一张tb_floow表来标识 字段 说明 id 编号 user_id 用户id follow_user_id 关联的用户id create_time 创建时间 关
阅读全文
摘要:一,点赞功能 需求: 同一个用户只能点赞一次,再次点击则取消点赞 如果当前用户已经点赞,则点赞按钮高亮显示(前端已实现,判断字段Blog类的isLike属性) 实现步骤: 给Blog类中添加一个isLike字段,标识是否被当前用户点赞 修改点赞功能,利用Redis的set集合判断是否点赞过,未点赞则
阅读全文
摘要:一,全局唯一ID 全局ID生成器: 在分布式系统下用来生成全局唯一ID的工具,一般要满足以下特性: 唯一性 高可用 高性能 递增性 安全性 全局唯一ID生成策略: UUID:生成的是16进制数值,返回的是String,不是单调递增的特性 Redis自增 snowflake雪花算法:不依赖redis,
阅读全文