Redis学习笔记

Redis学习笔记

1.持久化

1.1 redis 的持久化机制(如何保证 redis 挂掉再重启可以进行数据恢复)

Redis 是内存型数据库,为了保证数据在断电后不会丢失,需要将内存中的数据持久化到硬盘上。

  1. RDB 方式:(默认)

    • 某一时刻所有的 redis 内存数据生成快照映射到磁盘.
    • 如果系统发生故障,将会丢失最后一次创建快照之后的数据。
  2. AOF 方式(Append Only File): appendonly yes(命令开启)

    • 开启 AOF 持久化后每执行一条会更改 Redis 中的数据的命令,Redis 就会将该命令写入硬盘中的 AOF 文件。AOF 文件的保存位置和 RDB 文件的位置相同

    • 有三种不同的持久化方式

    • appendfsync always    #每次有数据修改发生时都会写入AOF文件,这样会严重降低Redis的速度
      appendfsync everysec  #每秒钟同步一次,显示地将多个写命令同步到硬盘
      appendfsync no        #让操作系统决定何时进行同步
      
    • 为了兼顾数据和写入性能,用户可以考虑 appendfsync everysec 选项 ,让 Redis 每秒同步一次 AOF 文件,Redis 性能几乎没受到任何影响。而且这样即使出现系统崩溃,用户最多只会丢失一秒之内产生的数据。当硬盘忙于执行写入操作的时候,Redis 还会优雅的放慢自己的速度以便适应硬盘的最大写入速度。

1.2 redis数据会丢失吗?

会有一些损失

1.3 简述Redis自动触发RDB机制

  • redis关闭后,如果没有设置默认支持RDB
  • 通过配置文件,设置一定时间后自动执行RDB
  • 如采用主从复制过程,会自动执行RDB

2.主从复制

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sYChw7kj-1627266335776)(/Users/yazhouheilong/Library/Application Support/typora-user-images/截屏2021-05-25 16.00.45.png)]

主服务器可以进行读写操作,从服务器只能进行读操作

一个从服务器只能有一个主服务器,并且不支持主主复制。

  • 完整重同步:

    1. 主服务器收到同步命令后,主服务进行 rdb 持久化操作,发送给从服务器,快照文件发送完毕之后,开始向从服务器发送存储在缓冲区中的写命令,从服务器接收快照,接收命令,丢弃原来的数据,达到同步
  • 部分重同步:

    1. 用于处理断线后重复制情况:当从服务器断线后重新连接主服务器时,主服务可以将主从服务器连接断开期间执行的写命令发送给从服务器,从服务器接收并执行这些写命令

2.1 redis数据是一致的嘛

是的

3.缓存血崩和缓存穿透和缓存击穿

  • 缓存血崩:是指缓存同一时间大面积失效,所以请求都落在了数据库上,造成短时间内承受了大量强求而崩掉

  • 解决方案:

    1. 缓存数据的过期时间设置随机,防止同一时间大量数据过期现象发生
    2. 热点数据永不过期
  • 缓存穿透:是指缓存和数据库中没有的数据,用户不断发起请求,例如请求 id 为-1的数据,导致数据库压力太大

  • 解决方案:

    1. 接口层增加校验:id 基础校验(id<=0),用户的权限校验
    2. 将这个值key-value 设置为 key-null,缓存有效时间设置短点,如30s,防止对一个 id 反复攻击
    3. 设置布隆过滤器将所有所有可能的数据存到 bitmap 里面,一个一定不存在的元素就会被这个 bitmap 拦截掉
  • 缓存击穿:缓存击穿指缓存中没有数据,但数据库中有该数据。一般这种情况指特定数据的缓存时间到期,但由于并发用户访问该数据特别多,因此去数据库去取数据,引起数据库访问压力过大

  • 解决方案:

    ​ 1.设置热点数据永不过期

    ​ 2. 对并发读数据设置并发锁,降低并发性

4.Redis的过期键的删除策略

​ Reids 的过期策略就是当 redis 的 key 过期后怎么处理这个 key。

  • 惰性删除:只有当访问一个 key 时候,才判断key 是否过期,过期的话就会清除,这种方法最大程度的节约了 cpu 资源,但是对内存不友好(可能出现大量的 key 没有被访问导致占用的大量内存)。
  • 定期删除:每隔100ms 检查一次,查看(随机抽查部分)是否有过期的 key,有过期的 key 则删除。通过调整扫描的间隔和扫描的时间,使 cpu 和内存的资源达到平衡

5.Redis 单线程为什么这么快

  1. 单线程模型,没有线程上下文切换,排队反而比并发更有效,尤其是又有一个cpu专门用来管理redis情况
  2. 内存级别的数据库
  3. 核心是非阻塞的io多路复用机制

6.redis和memcached的区别

缓存redismemcached
数据类型支持五种数据类型只支持字符串
数据持久化RDB和AOF
分布式redis cluster不支持
内存管理很久没用的会存在磁盘内一直在内存中

7.redis常用的数据类型

String:字符串类型,最简单的类型 Hash:类似于Map的一种结构。 List:有序列表。 Set:无序集合。 ZSet:带权值的无序集合,即每个ZSet元素还另有一个数字代表权值,集合通过权值进行排序。

8.为什么要用到redis

高性能:从缓存内取数据比从数据库硬盘内取数据快很多

高并发:redis支持的并发数量要高很多

9.redis内存淘汰机制

  • 目的:为了更好地使用内存,用一定的缓存miss来换取内存的使用效率
  1. allkeys-lru:如果我们的应用对缓存的访问符合幂律分布(也就是存在相对热点数据),也是项目使用的
  2. allkeys-random:如果我们的应用对于缓存key的访问概率相等,则可以使用这个策略。
  3. volatile-ttl:这种策略可以手动向Redis提示哪些key更适合被淘汰
尚硅谷是一个教育机构,他们提供了一份关于Redis学习笔记。根据提供的引用内容,我们可以了解到他们提到了一些关于Redis配置和使用的内容。 首先,在引用中提到了通过执行命令"vi /redis-6.2.6/redis.conf"来编辑Redis配置文件。这个命令可以让你进入只读模式来查询"daemonize"配置项的位置。 在引用中提到了Redis会根据键值计算出应该送往的插槽,并且如果不是该客户端对应服务器的插槽,Redis会报错并告知应该前往的Redis实例的地址和端口。 在引用中提到了通过修改Redis的配置文件来指定Redis的日志文件位置。可以使用命令"sudo vim /etc/redis.conf"来编辑Redis的配置文件,并且在文件中指定日志文件的位置。 通过这些引用内容,我们可以得出结论,尚硅谷的Redis学习笔记涵盖了关于Redis的配置和使用的内容,并提供了一些相关的命令和操作示例。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Redis学习笔记--尚硅谷](https://blog.csdn.net/HHCS231/article/details/123637379)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Redis学习笔记——尚硅谷](https://blog.csdn.net/qq_48092631/article/details/129662119)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值