Redis一些常用知识点
2021-01-25 15:32:09   15  举报             
     
         
 AI智能生成
  Redis一些常用知识点
    作者其他创作
 大纲/内容
  MemCache    
     只支持KV的存储形式  
     key的大小不能超过250直接
  
     值的大小不能超过1M  
     最大过期时间为30天  
     没有持久化和主从同步功能  
     准备工作
    
     DockerRedis安装
    
     子主题  
     linux安装  
     redis.conf详解    
     daemonize no
    
     是否启用守护进程    
     也叫Daemon 进程,是linux中的后台服务进程  
     就相当于开启后台运行  
     设置为Yes    
     Redis采用的是单进程多线程的方式,设置后采用后台运行的方式  
     会将进程号写入 pidfile /var/run/redis_6379.pid中  
     除非手动Kill掉该进程  
     默认否    
     exit或者关闭终端都会导致Redis进程退出
  
     bind 127.0.0.1    
     只能通过本机客户端连接,而无法通过远程连接  
     loglevel notice
    
     日志级别默认verbose  
     debug
    
     输出大量信息,一般在开发和调试时使用  
     verbose    
     比debug稍微好些,剔除了一些不必要的日志
  
     notice    
     适用于生产环境  
     warning
    
     仅记录一些重要的信息  
     dir    
     指定本地数据库位置  
     maxclients
    
     最大连接数(默认10000 ,设置0表示不作限制)
  
     超出限制报错(max number of clients reached)
  
     maxmemory <bytes>    
     最大内存限制  
     Redis 在启动时会把数据加载到内存中,达到最大内存后,会尝试清除已到期或者即将到期的Key
  
     清除后如果任然是最大内存,将会变成只读不可写操作
  
     在64位下,不设置或者设置为0,默认无限制内存,在32位下,限制为3GB  
     一般为了最大性能,配置为3/4的内存  
     进阶    
     持久化    
     RDB和AOF是可以共存的,备份时,先备份的为AOF文件  
     在备份恢复时,假设AOF文件有问题(有些错误的命令,或者因为上次备份时未完全写全),出现文件破损,Redis是有自动修复文件的,会将错误的命令删除  
     RDB(Redis Data Base)
    
     存储方式
    
     就是每隔时间段会将内存中的数据快照写入到磁盘,然后恢复的时候直接将快照恢复到Redis
  
     整个过程,主进程不进行IO操作,会覆盖之前的文件,RDB会存在数据丢失最后一次的情况,对数据要求性不高的话可以使用
  
     保存的是Rdb.dump文件
  
     存储触发条件
    
     save <秒数> <变更次数>  
     优势    
     适合大规模数据恢复  
     对数据的完整性和一致性要求不高
  
     劣势    
     因为是一段时间内备份一次数据,所以可能会存在丢失最后一次数据的可能性  
     由于备份时是需要Fork一个新的进程去处理,所以在资源方面是也需要双份的
  
     总结    
     Rdb在保存文件时,父进程唯一要做的就是fork出一个子进程,事情全部使用子进程来处理,可以最大化Redis的性能,  
     与AOF相比,由于不是一条一条语句备份,所以会比RDB快一些  
     AOF(Appen Only File)
    
     存储方式    
     以日志的形式记录每一次写的操作命令,恢复时也通过命令恢复  
     Rewrite
    
     概念
    
     就是当文件过大时,会对内容进行压缩,只保留可恢复数据的最精简指令集
  
     重写原理
    
     其实是新Fork了一个子进程,并没有去读旧的aof文件,而是重新整理出一份命令指令
  
     auto-aof-rewrite-percentage 100 100% 一倍
auto-aof-rewrite-min-size 64mb 重写文件日志大小(一般3G起步)
  
    auto-aof-rewrite-min-size 64mb 重写文件日志大小(一般3G起步)
 配置策略    
     appendonly 是否开启aof  
     appendfilename 名字  
     appendfsync  追加方式
    
     always
    
     同步追加、数据完整性较好,但性能消耗过大  
     EverySec默认
    
     异步追加、间隔一秒、那么就存在一秒的数据丢失
  
     NO
  
     如何选择    
     如果对数据完整性不高,而且数据又很多,而且又追求效率,那么可以使用RDB
  
     如果只做缓存的话,可以都不选择使用  
     建议两种都选用 也不要仅仅只使用AOF来作为唯一方式,因为RDB更适合于数据库备份
  
     用RDB时,只在从机器上持久化RDB文件,时间间隔也不要太短,15分钟差不多了,而且值保留Save 900 1规则即可  
     用AOF时,对重写基础值大小可以更改为5G左右,64太小了  
     如果不用AOF  仅靠主从复制也可以实现高可用,代价是如果主从同时停掉,则会丢失10多分钟的数据,恢复时也会比较两个RDB文件,恢复较新的文件  
     总结    
     Rdb是全量持久化、AOF是增量持久化,因为RDB比较耗时,不够实时,停机时会导致大量数据丢失,所以一般配合AOF使用,先恢复RDB的内存数据,在恢复最近的AOF命令
  
     事务    
     可以顺序的执行一组命令,批处理执行任务
  
     操作命令  
     Redis支持事务,但是是支持部分事务  
     发布和订阅机制    
     一种进程间的通信模式  
     类似于消息机制,pub推送 sub接收命令
  
     主从复制    
     一主二仆  
     作用    
     读写分离  
     容灾备份  
     查看角色命令    
     info repliation  
     指定主机命令    
     slaveof 主机
  
     机制    
     丛机会从头到尾复制主机的数据  
     只有主机才能写,丛机无法写入  
     假设主机挂了之后,丛机还是从机,不会由从变主,主机恢复后还是主机身份  
     如果从机挂了之后,需要重新连接进主机,不然不会变成原来的主机
  
     薪火相传    
     就是从也可以做为其他从的主机  
     反客为主 salveof no one    
     就是与其他数据库脱离关系,变身为主机  
     复制原理    
     slaveof 首次全量复制、然后增量复制  
     哨兵模式    
     概念    
     哨兵模式就是监控模式  
     假设主机挂了,会选取出新的主机,可理解为自动 salveof no one  
     主机从新启动后,会被哨兵监控住变更成从机
  
     配置文件
    
     sentinel.conf
  
     缓存雪崩、穿透、击穿    
     雪崩    
     概念    
     同一时间,大多数缓存失效,导致压力全到数据库中  
     解决办法    
     给缓存加上随机时间,让缓存不会同时失效  
     将热点数据分步到不同的地方也行  
     穿透    
     概念    
     查询缓存和数据库中都不存在的数据  
     解决办法    
     返回不存在的缓存  
     使用布隆过滤器  
     击穿    
     概念    
     热点数据,如果失效了  
     解决办法    
     设置永不过期  
     读取方式    
     读的时候,先读缓存,缓存没有在去数据库中查询,然后设置到缓存中  
     写的时候先写数据库,在删除缓存  
     Redis做分布式锁    
     常用命令    
     setnx <key><value>    
     不存在值时则Set  
     setex <key> <secend><value>
    
     设置失效时间的Key  
     ttl<key>    
     查看剩余时间,为负数说明已经过期  
     需要注意什么问题?  
     单机版Redis会有什么问题?
  
     集群模式下(3主3从)有没有什么问题?
  
     高级用法    
     HyperLogLog  
     命令    
     查看Redis版本信息    
     redis -server -v  
     info  
     常用类型及用法    
     String
    
     做分布式锁  
     计数 incr  
     Hash    
     购物车就可以用这个来做  
     Map<String,Map<K,V>>  
     比如说存储一个人的某条记录信息  
     hset person age 18  
     hgetall person  
     List    
     有序的可有重复数据  
     Lpush Rpush  
     微信文章订阅公众号,存储用户编号+文章编号  
     Set    
     无序不可重复数据  
     随机弹出一个元素,但是不删除  
     随机弹出一个元素、删除  
     重要的集合运算
    
     差集
  
     交集  
     并集  
     抽奖
    
     点击参与抽奖-进入集合 Sadd  
     查看人数 Scard
  
     抽奖 随机抽出  
     朋友圈点赞功能    
     新增点赞 sadd
  
     取消点赞srem  
     互相关注的人    
     可以取交集的数据  
     Zset(有序集合)    
     比方说商品销售排行榜  
     热门视频排行  
     BitMap(位图)
  
     HyperLogLog(统计)
  
     GEO(地理)
  
     LRU    
     是什么    
     Least Recently Used
  
     选择最近最少使用的数据予以淘汰
  
     核心
    
     hash链表  
     手写LRU    
     LinkedHashMap实现    
     代码  
     依赖JDK  
     
    收藏 
     
 
 
 
 
  0 条评论
 下一页
 为你推荐
 查看更多
    
   
  
  
  
  
  
  
  
  
  
  
 