一、写在前

知识学了就忘!不用就忘!我太健忘!特此记录!用于复习打卡!Redis干就完事了!

二、来辣!

  1. Redis做异步队列:一般list结构做队列,rpush生产消息,lpop消费消息,当lpop没有消息的时候,要适当sleep一会儿;如果不sleep,就用blpop,会阻塞;生产一次消费多次,使用pub/sub主题订阅模式,可以实现1:N的消息队列,缺点:消费者下线的时候,消息会丢。

  2. 延时队列:使用sortedset,拿时间戳作为score,消息内容作为key调用zadd来生产消息,消费者用zrangebyscore指令获取N秒前的数据轮询处理。

  3. Redis分布式锁:拿setnx来争抢锁,抢到之后再用expire给缩加一个过期时间防止锁忘记释放。如果在setnx之后,expire之前进程意外crash或者重要维护了,咋办:锁永远得不到释放,咋办:set指令有复杂的参数,可以把setnx和expire合成一条指令执行哒。

  4. memched与redis区别:redis支持string,list,set,zset,hash,HyperLogLog,Geo,Pub/Sub。memcached支持简单字符串;redis更快;redis支持持久化。

  5. redis没有使用一致性hash,而是引入哈希槽的概念:redis集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放哪个槽,集群的每一个节点负责一部分hash槽。

  6. redis集群方案什么情况下会导致整个集群不可用:三个节点的集群,在没有复制模型的情况下,如果B节点挂了,整个集群会因为缺少5501-11000这个范围的槽而不可用。

  7. 为什么这么快:完全基于内存;数据结构简单,对数据操作简单;采用单线程,避免不必要的上下文切换和竞争条件,也不存在多进程和多线程导致的切换而消耗CPU,不存在加锁释放锁操作,也不会死锁;使用I/O复用模型,非阻塞IO;自己构建了VM机制,一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。

  8. 场景:计数器;缓存;session缓存;全页缓存(FPC);消息队列(发布订阅);分布式锁(setnx或RedLock);set交集、并集找共同好友;zset可以实现有序,排行榜等功能。

  9. RDB:默认,将内存中的数据以快照方式保存到硬盘,产生dump.rdb文件。优点:只有一个文件,方便持久化;容灾性好,一个文件可以保存到安全的磁盘。性能最大化,fork子进程完成写,主进程继续处理命令,IO最大化,主进程没有任何IO,高性能。缺点:安全性低,如果持久化之间挂了,丢一部分数据。

  10. AOF:append-only file。两种方式同时开启,恢复数据会先用AOF。优点:数据安全,可以配置appendfsync属性,有always,每进行一次命令就记录一次;通过append模式写文件,即时中途宕机,可以通过redis-check-aof工具解决一致性问题;rewrite模式,(文件过大时会对命令进行合并重写),没有rewrite之前,可以删除某些命令,(比如误操作的flushall)。缺点:文件大,恢复慢;数据集大的时候,比rdb启动效率低。

  11. 当做缓存时如何扩容:使用一致性哈希实现动态的扩容缩容。

  12. 当做持久化存储使用,必须使用固定的keys-to-nodes映射关系,节点的数量一旦确定就不能变。

  13. 过期键的删除策略:1)定时过期:每个设置过期时间的key都要创建一个定时器,到过期时间就会立即清除。立即清除,对内存友好。但会占用大量的cpu资源,影响响应时间和吞吐量。2)惰性过期:当访问的时候,才去判断是否已过期,过期就清除。可最大化节省cpu资源,对内存不友好;但是极端情况下,可能出现大量过期的key未被清理,占用大量内存。3)定期过期:折中方案,每隔一定时间,会扫描一定数量的expires字典中一定数量的key,并清除其中过期的。(expires字典会保存所有设置了过期时间的key的过期时间数据,其中,key是指向键空间中某个键的指针,value是该键的毫秒精度的UNIX时间戳表示的过期时间。键空间是指redis中存储的所有键。)默认同时使用了惰性过期和定期过期。

  14. expire设置过期时间,persist设置永久有效。

  15. 内存淘汰策略:(用于缓存的内存不足时,怎么处理新写入且需要额外申请空间的数据)。1)noevication,禁止淘汰,写入会报错。2)allkeys-lru:全键空间内,移除最近最少使用的(常用)。3)allkeys-random:随机移除。4)volatile-lru:设置了过期的键空间中,移除最近最少使用的。5)volatile-random:随机移除。6)volatile-ttl:设置了过期的键空间中,优先移除有更早过期时间的key。

  16. 内存优化:合理利用集合类型,小的k/v可以以更紧凑的方式存放,尽可能使用散列表(hashes),散列表使用的内存小。尽可能将数据抽象到一个散列表,比如用户,的名称,密码等所有信息存储到一个散列表。

  17. 事务:事务中的所有命令都会被序列化,就是一次性、顺序性、排他性的执行一个队列中的一系列命令。三个阶段:事务开始MULTI-命令入队-事务执行EXEC。执行过程中,如果服务端收到EXEC、DISCARD、WATCH、MULTI之外的请求,会把请求放入对列中排队。WATCH命令是一个乐观锁,可以为redis事务提供CAS行为。可以监控一个或多个键,一旦其中有一个键被修改、删除,之后的事务不会被执行,监控一直持续到EXEC命令。MULTI用于开启事务,总是返回OK,开启后,可以继续向服务器发送任意多行命令,不会立即执行,被放队列,当EXEC被调用时才执行。EXEC用于执行事务块内的命令,返回所有事务块中命令的返回值,按命令执行的先后顺序排序,当操作被打断,返回空值。DISCARD可以清空事务列表,并放弃执行事务,并且客户端会从事务状态中退出。UNWATCH可以取消watch对所有key的监控。

  18. redis的事务总是支持ACID中的一致性和隔离性,其他不支持。当运行在_AOF_持久化模式下,且appendfsyn选项为always时,事务也具有 耐久性。

  19. 单条命令是原子性执行的,基于Lua脚本,可以保证脚本内命令一次性、顺序执行完成。但是事务不保证原子性,且没有回滚。事务的任意命令执行失败,其余命令也会继续执行。

三、写在后

只是简要知识点概括,看到就能回忆起相关内容为最妙~~直接评论打卡,开整!!!

Redis--回顾提要的更多相关文章

  1. Redis回顾

    之前有两篇文章着重介绍了redis集群的搭建和redis与spring的整合,一个月过去了,现在有些忘记了,今天又拿过来稳固一下,发现有很多的东西都忘记了. 资料汇总下载 首先安装ruby环境 安装过 ...

  2. 大数据入门第十五天——HBase整合:云笔记项目

    一.功能简述 1.笔记本管理(增删改) 2.笔记管理 3.共享笔记查询功能 4.回收站 效果预览: 二.库表设计 1.设计理念 将云笔记信息分别存储在redis和hbase中. redis(缓存):存 ...

  3. $Django 路飞之显示视频,Redis存购物车数据,优惠卷生成表,优惠卷的一个领取表。(知识小回顾)

    知识小回顾之json序列化问题 精髓:支持python的几种数据类型(注意不是对象,不能放对象),其次是tuple变list. ensure_ascii:默认值True,如果dict内含有non-AS ...

  4. $Django redis内存数据库 (知识回顾cmd切换目录)

    知识小回顾 #切换盘 C:\Users\WangDong>f: F:\> #切换文件 F:\>cd redis F:\redis> #返回上一级 F:\DJ\dj8>cd ...

  5. python开发学习-day10(select/poll/epoll回顾、redis、rabbitmq-pika)

    s12-20160319-day10 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: ...

  6. 第2节 storm实时看板案例:10、redis的安装使用回顾

    2.redis的持久化机制: redis支持两种持久化机制:RDB  AOF RDB:多少秒之内,有多少个key放生变化,将redis当中的数据dump到磁盘保存,保存成一个文件,下次再恢复的时候,首 ...

  7. [项目回顾]基于Redis的在线用户列表解决方案

    迁移:基于Redis的在线用户列表解决方案 前言: 由于项目需求,需要在集群环境下实现在线用户列表的功能,并依靠在线列表实现用户单一登陆(同一账户只能一处登陆)功能: 在单机环境下,在线列表的实现方案 ...

  8. Memcached与Redis对比,Redis基础笔记回顾

    Memcached 1.为什么要把数据存入内存?快 2.Memcached和Redis的区别 (1)Memcached缓存.Redis数据库,Memcached不支持持久化到磁盘 (2)Redis提供 ...

  9. redis linux安装过程回顾

    1,官网wget http://download.redis.io/releases/redis-3.2.9.tar.gz 2,解压 tar zxf redis-3.2.9.tar.gz 后进入解压后 ...

  10. 13 110内容回、111内容回顾、redis操作

    redis加入路飞项目

随机推荐

  1. 6.-Django设计模式及模版层

    一.MVC (java等其他语言) MVC代表Model-view-Contorller(模型-视图-控制器)模式 M模型层主要用于对数据库层的封装 V视图层用于向用户展示结果 C控制器用于处理请求. ...

  2. 我终于会写 Java 的定时任务了!

    前言 学过定时任务,但是我忘了,忘得一干二净,害怕,一直听别人说: 你写一个定时任务就好了. 写个定时任务让他去爬取就行了. 我不会,所以现在得补回来了,欠下的终究要还的,/(ㄒoㄒ)/~~ 定时任务 ...

  3. N32G4系列——复用功能重映射(USART为例)

    开发测试环境:SDK,N32G455x系列芯片 在国民MCU中G系列IO口有第二复用功能,这时需要用到重映射功能. 一.系列芯片手册定义 1.1.芯片IO口默认功能查看 如图,在该系列芯片的数据手册中 ...

  4. 三十一、kubernetes网络介绍

    Kubernetes 网络介绍 Service是Kubernetes的核心概念,通过创建Service,可以为一组具有相同功能的容器应用提供一个统一的入口地址,并且将请求负载分发到后端的各个容器应用上 ...

  5. 二、Django下载与运行

    二.Django下载与运行 2.1.Django的下载 目前我们学习和使用的版本是3.2LTS版本 目前开源软件发布一般会有2个不同的分支版本: 1. 普通发行版本: 经常用于一些新功能,新特性,但是 ...

  6. GNN 101

    GNN 101 姚伟峰 http://www.cnblogs.com/Matrix_Yao/ GNN 101 Why Graph无处不在 Graph Intelligence helps It's t ...

  7. Archlinux配置fcitx5

    fcitx5--Linux中最好用的中文输入法 ArchLinux配置fcitx5 输入法 本文基于archlinux + dwm.其他的桌面环境以及窗口管理器,配置选项差不多. 安装基础包 fcit ...

  8. Go语言核心36讲11

    至今为止,我们讲过的集合类的高级数据类型都属于针对单一元素的容器. 它们或用连续存储,或用互存指针的方式收纳元素,这里的每个元素都代表了一个从属某一类型的独立值. 我们今天要讲的字典(map)却不同, ...

  9. layui的switch监听事件无用

    像layui的这种表单事件是属于表单,而不是表格,所以操作是layui.form.on监听事件,而不是用layui.table.on table = layui.table , form = layu ...

  10. hashlib加密模块、加密补充说明、subprocess模块、logging日志模块

    目录 hashlib加密模块 加密补充说明 subprocess模块 logging日志模块 日志的组成 日志配置字典 hashlib加密模块 1.何为加密 将明文数据处理成密文数据 让人无法看懂 2 ...