Redis-相关概念记录
2019独角兽企业重金招聘Python工程师标准>>>
Redis内部数据类型
SDS(simple dynamic string)
通过SDS来存储String,优势:- 直接获取长度,效率更高;
- 防止溢出;
- 空间分配,释放策略更加高效;
- 二进制安全;
链表
字典 字典包含哈希表,哈希表再包含哈希节点。
- 自动扩容或者缩容,采取渐进式rehash;
跳表
只用于有序列表。整数集合
集合键的底层实现之一,可以升级或者降级优化空间。压缩列表
列表键和哈希键的底层实现之一,只包含少量的项,均是小整数值时,采用压缩列表来作为底层实现。
Redis对象
字符串对象
- 编码:int raw(SDS) embstr;
列表对象
- 编码:ziplist(压缩列表) linkedlist(链表);
哈希对象
- 编码:ziplist(压缩列表) hashtable(字典);
集合对象
- 编码:intset(整数集合) hashtable(字典);
有序集合
- 编码:ziplist(压缩列表) skiplist(跳表);
Redis持久化
RDB
- 将内存中的数据库状态保存到磁盘当中。
- 方式:SAVE(导致服务器阻塞) BGSAVE(子线程方式,服务器不会阻塞) 配置save参数设置自动触发条件;
AOF
- 通过保存服务器执行命令的写来记录数据库状态。
- 步骤:命令追加 文件写入 文件同步(always everysec no)
Redis事件
文件事件
- Reactor模型,同时支持多个客户端,所有的事件放入队列单线程处理。
时间事件
- 类型:定时时间,周期性事件;
- 所有的时间事件通过链表的形式组成,若是周期任务,处理完成后,新增加事件在链表当中;
Sentinel
基础概念
- 本质上是特殊模式下的Redis服务器;
- 通过配置文件制定监视的主服务器;
- 通过INFO命令从主服务器获取从服务器;
选举相关
- 与Redis服务器通信答复无效时判断为主观下线;
- 与其他Sentinel协商判断是否客观下线;
- 选举Leader(raft算法),进行故障转移;
集群
- 基础概念
- 各个节点通过Gossip协议传播;
- 集群中的数据库被分为16384个slot;
- 节点只能使用0号数据库;
事务
- 基础概念
- 事务提供一种将多个命令请求打包,然后一次性,按顺序地执行多个命令的机制;
- WATCH为乐观锁,若事务期间,WATCH监视的键至少有一个被修改,则事务失败;
- 事务的ACID
- 原子性:Redis事务不支持回滚;
- 一致性;
- 隔离性;
- 耐久性;
研发规范
- Key设计
- key的一个格式约定: object-type:id:field 。用":"分隔域,用"."作为单词间的连接, 如" comment:12345:reply.to "。不推荐含义不清的key和特别长的key。
Redis-Java客户端
- Jedis
- Spring-Data-redis
- Redisson
内存淘汰策略
- noeviction(默认):当内存使用达到阈值的时候,所有引起申请内存的命令会报错。
- allkeys-lru:在主键空间中,优先移除最近未使用的key。
- volatile-lru:在设置了过期时间的键空间中,优先移除最近未使用的key。
- allkeys-random:在主键空间中,随机移除某个key。
- volatile-random:在设置了过期时间的键空间中,随机移除某个key。
- volatile-ttl:在设置了过期时间的键空间中,具有更早过期时间的 key 优先移除。
内存使用相关
- 如果一个Redis实例的内存使用率超过可用最大内存 (used_memory > 可用最大内存),那么操作系统开始进行内存与swap空间交换,把内存中旧的或不再使用的内容写入硬盘上(硬盘上的这块空间叫Swap分区),以便腾出新的物理内存给新页或活动页(page)使用;
- mem_fragmentation_ratio>1:Redis没有内存回收机制,如果批量过期数据或者 删除数据,内存的碎片可能就比较大;
- mem_fragmentation_ratio<1:一般发生在内存紧张的服务器,就是本身内存剩余不 多,redis申请不到足够的内存,这样就会使用swap;
分片
- 优势
- 更多的内存;
- 更多的cpu,带宽;
- 劣势
- 不能直接的做多键相关的操作;
- 涉及多键的事务不支持;
- 分片是按照Key来划分,对单Key,但是value数据量很大的场景无效;
- 扩容有一定难度;
- 实现方式
- 客户端分片;
- 代理分片(Twemproxy)
- 查询路由(Redis cluster)
高可用
- 主备切换:Sentinel
- 分片采用:tewmproxy
- keepalived为tewmproxy提供VIP
- 直接使用Redis Cluster
- 其他公司提供:Codis
应用场景
- Redis存储会话
- 使用容器拓展实现;
- 自定义会话管理;
- 使用框架的会话管理工具;
参考列表:
- Redis内存优化
- Redis 高可用架构最佳实践
转载于:https://my.oschina.net/u/3052784/blog/1608747
Redis-相关概念记录相关推荐
- 2023年5月19日Redis学习记录(笔记md文档非本人亲自编写,仅作为个人学习记录,无其他目的)
Redis快速入门 Redis的常见命令和客户端使用 1.初识Redis Redis是一种键值型的NoSql数据库,这里有两个关键字: 键值型 NoSql 其中键值型,是指Redis中存储的数据都是以 ...
- Redis学习记录之Transaction简析(十九)
1.简介 MULTI . EXEC . DISCARD 和 WATCH 是 Redis 事务的基础. 事务可以一次执行多个命令, 并且带有以下两个重要的保证: 事务是一个单独的隔离操作:事务中的所有命 ...
- Redis学习记录(一)
Redis是什么 redis是一个开源的.使用C语言编写的.支持网络交互的.可基于内存也可持久化的Key-Value数据库.Redis像是一个HashMap,不过不是在JVM中运行,而是以一个独立进程 ...
- 狂神Redis学习记录 完整版
[狂神说Java]Redis最新超详细版教程通俗易懂_哔哩哔哩_bilibili笔记资料交流都在我们的平台:www.kuangstudy.com秦疆老师Java全栈系列课程之Redis讲解从Nosql ...
- Redis学习记录之Java中的初步使用
[html] view plain copy redis下载地址:<span style="font-family: Arial, Helvetica, sans-serif;&qu ...
- 如何使用RedisTemplate访问Redis数据结构-记录
Redis 数据结构简介 Redis 可以存储键与5种不同数据结构类型之间的映射,这5种数据结构类型分别为String(字符串).List(列表).Set(集合).Hash(散列)和 Zset(有序集 ...
- CentOS 6.6下Redis安装配置记录
这篇文章主要介绍了CentOS 6.6下Redis安装配置记录,本文给出了安装需要的支持环境.安装redis.测试Redis.配置redis等步骤,需要的朋友可以参考下 在先前的文章中介绍过redis ...
- 图解Redis 记录
小林coding + 尚硅谷 小林coding学习链接: https://www.xiaolincoding.com/ 一.Redis基础 NoSQL数据库简介 1.1 技术发展 web1.0 单点数 ...
- Redis 笔记(08)— 事务(一次执行多条命令、命令 watch/multi/exec/discard、错误处理)
1. 事务概念 Redis 中的事务 (transaction)是一组命令的集合.事务同命令一样是 Redis 的最小执行单位,一个事务中的命令要么都执行,要么都不执行.事务的原理是先将属于一个事务的 ...
- Redis 高级特性(1)—— 事务 过期时间 排序
1. Redis 高级特性 -- 事务 事务概念 Redis 中的事务 (transaction)是一组命令的集合.事务同命令一样是 Redis 的最小执行单位,一个事务中的命令要么都执行,要么都不执 ...
最新文章
- 如何使用Gradle的maven-publish将jar包或者war包上传到nexus仓库
- ICCV 2019 | 基于无标签单目视频序列的单帧三维人体姿态估计算法
- mysql5.7.14多实例安装
- windows 下cmd命令行的替换工具cmder
- Redis之压缩列表ziplist
- SLAM会议笔记(四)Lego-LOAM
- 编译型语言和解释性语言,c++和python
- php 方法注释代码规范,PHP开发代码规范
- hdu 1249 三角形 (递推)
- JVM对象内存分配机制之对象在Eden区分配(五)
- Git使用小记——复制粘贴快捷键的修改
- 比起高性能计算,高端存储才更亟待国产化
- 网络-DNS域名系统详解与DNS攻击
- 笔记︱盘点实验科学的三种实验模型(A/B实验、因果推断、强化学习)
- R语言实现决策树和朴素贝叶斯分类预测,并比较准确度(含数据集)
- 伍鸣博士受邀出席徐汇区住房租赁市场研讨会
- 每周分享第 31 期
- onlyOffice常用api整理(1)
- xshell免费版 正版,非xshell破解版
- 【多线程】多线程案例