2019独角兽企业重金招聘Python工程师标准>>>

Redis内部数据类型

  • SDS(simple dynamic string)
    通过SDS来存储String,优势:

    1. 直接获取长度,效率更高;
    2. 防止溢出;
    3. 空间分配,释放策略更加高效;
    4. 二进制安全;
  • 链表

  • 字典 字典包含哈希表,哈希表再包含哈希节点。

    1. 自动扩容或者缩容,采取渐进式rehash;
  • 跳表
    只用于有序列表。

  • 整数集合
    集合键的底层实现之一,可以升级或者降级优化空间。

  • 压缩列表
    列表键和哈希键的底层实现之一,只包含少量的项,均是小整数值时,采用压缩列表来作为底层实现。

Redis对象

  • 字符串对象

    1. 编码:int raw(SDS) embstr;
  • 列表对象

    1. 编码:ziplist(压缩列表) linkedlist(链表);
  • 哈希对象

    1. 编码:ziplist(压缩列表) hashtable(字典);
  • 集合对象

    1. 编码:intset(整数集合) hashtable(字典);
  • 有序集合

    1. 编码:ziplist(压缩列表) skiplist(跳表);

Redis持久化

  • RDB

    1. 将内存中的数据库状态保存到磁盘当中。
    2. 方式:SAVE(导致服务器阻塞) BGSAVE(子线程方式,服务器不会阻塞) 配置save参数设置自动触发条件;
  • AOF

    1. 通过保存服务器执行命令的写来记录数据库状态。
    2. 步骤:命令追加 文件写入 文件同步(always everysec no)

Redis事件

  • 文件事件

    1. Reactor模型,同时支持多个客户端,所有的事件放入队列单线程处理。
  • 时间事件

    1. 类型:定时时间,周期性事件;
    2. 所有的时间事件通过链表的形式组成,若是周期任务,处理完成后,新增加事件在链表当中;

Sentinel

  • 基础概念

    1. 本质上是特殊模式下的Redis服务器;
    2. 通过配置文件制定监视的主服务器;
    3. 通过INFO命令从主服务器获取从服务器;
  • 选举相关

    1. 与Redis服务器通信答复无效时判断为主观下线;
    2. 与其他Sentinel协商判断是否客观下线;
    3. 选举Leader(raft算法),进行故障转移;

集群

  • 基础概念

    1. 各个节点通过Gossip协议传播;
    2. 集群中的数据库被分为16384个slot;
    3. 节点只能使用0号数据库;

事务

  • 基础概念

    1. 事务提供一种将多个命令请求打包,然后一次性,按顺序地执行多个命令的机制;
    2. WATCH为乐观锁,若事务期间,WATCH监视的键至少有一个被修改,则事务失败;
  • 事务的ACID
    1. 原子性:Redis事务不支持回滚;
    2. 一致性;
    3. 隔离性;
    4. 耐久性;

研发规范

  • Key设计

    1. key的一个格式约定: object-type:id:field 。用":"分隔域,用"."作为单词间的连接, 如" comment:12345:reply.to "。不推荐含义不清的key和特别长的key。

Redis-Java客户端

  1. Jedis
  2. Spring-Data-redis
  3. Redisson

内存淘汰策略

  1. noeviction(默认):当内存使用达到阈值的时候,所有引起申请内存的命令会报错。
  2. allkeys-lru:在主键空间中,优先移除最近未使用的key。
  3. volatile-lru:在设置了过期时间的键空间中,优先移除最近未使用的key。
  4. allkeys-random:在主键空间中,随机移除某个key。
  5. volatile-random:在设置了过期时间的键空间中,随机移除某个key。
  6. volatile-ttl:在设置了过期时间的键空间中,具有更早过期时间的 key 优先移除。

内存使用相关

  1. 如果一个Redis实例的内存使用率超过可用最大内存 (used_memory > 可用最大内存),那么操作系统开始进行内存与swap空间交换,把内存中旧的或不再使用的内容写入硬盘上(硬盘上的这块空间叫Swap分区),以便腾出新的物理内存给新页或活动页(page)使用;
  2. mem_fragmentation_ratio>1:Redis没有内存回收机制,如果批量过期数据或者 删除数据,内存的碎片可能就比较大;
  3. mem_fragmentation_ratio<1:一般发生在内存紧张的服务器,就是本身内存剩余不 多,redis申请不到足够的内存,这样就会使用swap;

分片

  • 优势

    1. 更多的内存;
    2. 更多的cpu,带宽;
  • 劣势
    1. 不能直接的做多键相关的操作;
    2. 涉及多键的事务不支持;
    3. 分片是按照Key来划分,对单Key,但是value数据量很大的场景无效;
    4. 扩容有一定难度;
  • 实现方式
    1. 客户端分片;
    2. 代理分片(Twemproxy)
    3. 查询路由(Redis cluster)

高可用

  1. 主备切换:Sentinel
  2. 分片采用:tewmproxy
  3. keepalived为tewmproxy提供VIP
  4. 直接使用Redis Cluster
  5. 其他公司提供:Codis

应用场景

  • Redis存储会话

    1. 使用容器拓展实现;
    2. 自定义会话管理;
    3. 使用框架的会话管理工具;

参考列表:

  1. Redis内存优化
  2. Redis 高可用架构最佳实践

转载于:https://my.oschina.net/u/3052784/blog/1608747

Redis-相关概念记录相关推荐

  1. 2023年5月19日Redis学习记录(笔记md文档非本人亲自编写,仅作为个人学习记录,无其他目的)

    Redis快速入门 Redis的常见命令和客户端使用 1.初识Redis Redis是一种键值型的NoSql数据库,这里有两个关键字: 键值型 NoSql 其中键值型,是指Redis中存储的数据都是以 ...

  2. Redis学习记录之Transaction简析(十九)

    1.简介 MULTI . EXEC . DISCARD 和 WATCH 是 Redis 事务的基础. 事务可以一次执行多个命令, 并且带有以下两个重要的保证: 事务是一个单独的隔离操作:事务中的所有命 ...

  3. Redis学习记录(一)

    Redis是什么 redis是一个开源的.使用C语言编写的.支持网络交互的.可基于内存也可持久化的Key-Value数据库.Redis像是一个HashMap,不过不是在JVM中运行,而是以一个独立进程 ...

  4. 狂神Redis学习记录 完整版

    [狂神说Java]Redis最新超详细版教程通俗易懂_哔哩哔哩_bilibili笔记资料交流都在我们的平台:www.kuangstudy.com秦疆老师Java全栈系列课程之Redis讲解从Nosql ...

  5. Redis学习记录之Java中的初步使用

    [html] view plain copy  redis下载地址:<span style="font-family: Arial, Helvetica, sans-serif;&qu ...

  6. 如何使用RedisTemplate访问Redis数据结构-记录

    Redis 数据结构简介 Redis 可以存储键与5种不同数据结构类型之间的映射,这5种数据结构类型分别为String(字符串).List(列表).Set(集合).Hash(散列)和 Zset(有序集 ...

  7. CentOS 6.6下Redis安装配置记录

    这篇文章主要介绍了CentOS 6.6下Redis安装配置记录,本文给出了安装需要的支持环境.安装redis.测试Redis.配置redis等步骤,需要的朋友可以参考下 在先前的文章中介绍过redis ...

  8. 图解Redis 记录

    小林coding + 尚硅谷 小林coding学习链接: https://www.xiaolincoding.com/ 一.Redis基础 NoSQL数据库简介 1.1 技术发展 web1.0 单点数 ...

  9. Redis 笔记(08)— 事务(一次执行多条命令、命令 watch/multi/exec/discard、错误处理)

    1. 事务概念 Redis 中的事务 (transaction)是一组命令的集合.事务同命令一样是 Redis 的最小执行单位,一个事务中的命令要么都执行,要么都不执行.事务的原理是先将属于一个事务的 ...

  10. Redis 高级特性(1)—— 事务 过期时间 排序

    1. Redis 高级特性 -- 事务 事务概念 Redis 中的事务 (transaction)是一组命令的集合.事务同命令一样是 Redis 的最小执行单位,一个事务中的命令要么都执行,要么都不执 ...

最新文章

  1. 如何使用Gradle的maven-publish将jar包或者war包上传到nexus仓库
  2. ICCV 2019 | 基于无标签单目视频序列的单帧三维人体姿态估计算法
  3. mysql5.7.14多实例安装
  4. windows 下cmd命令行的替换工具cmder
  5. Redis之压缩列表ziplist
  6. SLAM会议笔记(四)Lego-LOAM
  7. 编译型语言和解释性语言,c++和python
  8. php 方法注释代码规范,PHP开发代码规范
  9. hdu 1249 三角形 (递推)
  10. JVM对象内存分配机制之对象在Eden区分配(五)
  11. Git使用小记——复制粘贴快捷键的修改
  12. 比起高性能计算,高端存储才更亟待国产化
  13. 网络-DNS域名系统详解与DNS攻击
  14. 笔记︱盘点实验科学的三种实验模型(A/B实验、因果推断、强化学习)
  15. R语言实现决策树和朴素贝叶斯分类预测,并比较准确度(含数据集)
  16. 伍鸣博士受邀出席徐汇区住房租赁市场研讨会
  17. 每周分享第 31 期
  18. onlyOffice常用api整理(1)
  19. xshell免费版 正版,非xshell破解版
  20. 【多线程】多线程案例

热门文章

  1. 第二十二章 面向对象
  2. 声明式API replica controller vs replica set 对比
  3. 现代软件工程 作业 第一周博客作业
  4. shopping car 3.0
  5. c++ -- union介绍
  6. 一个Android开发者开博一周年的成长日记——送给不知如何下手的【初级开发者】和【在校生】...
  7. [转]为mysql数据库建立索引
  8. java批量转换图片格式
  9. 存储过程——创建通用存储过程(七)
  10. 【我解C语言面试题系列】003 死循环格式问题小结?