Redis学习笔记五 运用篇

缓存策略

Cache-Aside

应用程序(Application)会与缓存(Cache)和数据源(Data Source)进行通信,请求在命中数据源之前先检查缓存是否存在,如果不存在则读取数据库再写入缓存,反之直接返回,需要修改数据库操作时删除相应的缓存数据

场景:最常用的缓存策略,基本都是使用这种策略

优点:当缓存发生故障后,系统任然可以直接访问数据库返回数据

缺点:首次请求的时候总会缓存未命中

注意:TTL


Read-Through

Cache-Aside 需要应用程序与缓存和数据库打交道,而ReadThrough无需引用程序管理缓存数据源和缓存,只需将数据源同步委托给缓存提供程序,所有数据交互通过抽象缓存层完成的

场景:数据预热

Write-Through Cache

首先将数据写入缓存,然后写入数据库。缓存与数据库保持一致,写操作总是通过缓存到达主数据库

Write-Around

数据直接写入数据库,只有读取的数据才能进入缓存。Write-around可以与read-through结合使用,并在数据只写一次、读取次数较少或从不读的情况下提供良好的性能。

Write-Back

应用程序将数据写入缓存,缓存会立即确认,并在延迟一段时间后将数据写入数据库,相当于一种异步回写操作(异步写可以减少与物理磁盘存储的交互,也可以进行合并写等优化)

场景:扣减库存

缓存穿透

概念:指在高并发长江下,一个key被高并发访问,没有被命中,会去后端数据库获取,从而导致了大量请求数据到达数据库,而当该key对应的数据本身为空的情况下,这就导致了不必要的查询操作从而导致巨大冲击和压力

解决方案

1.缓存空对象

空值做了缓存意味着缓存层中存了更多的建(内存空间)像缓存空对象要设置一个较短时间,缓存层和存储层会有一段时间窗口不一致,可能会对业务有一定的影响 如果此时存储的和缓存层不一致可以利用消息系统清空空对象

成本:代码简单,需要过多的缓存空间,数据不一致

2.布隆过滤器拦截

将存在的key用布隆过滤器提前保存起来做一层拦截

成本:代码维护复杂,缓存空间占用小

3.使用锁的互斥

互斥锁可以用代码的锁实现,也可以使用redis setnx命令实现

常用命令

congfig设置

获取配置

config get {param}

设置配置

config set {param}  {n}

maxmemory,最大内存

设置最大内存,最大内存默认为0,相当于和系统一样大

config set maxmemory {n}

 timeout,检测空闲连接超时时间

设置超时时间,默认为0 不会检测,建议可以设置为30

单位:秒

config set timeout {n}

tcp-keepalive,检测tcp连接活性的周期

查询tcp连接活性周期,默认为300,建议可以设置为60

单位:秒

config set tcp-keepalive {n}

slowlog,慢查询记录

查询慢查询配置

CONFIG GET slowlog-*

slowlog-log-slower-than  代表慢查询的阈值,单位微妙,当执行查询命令消耗大于配置的阈值会将改命令记录到慢查询的日志,默认为10毫秒

slowlog-max-len 记录慢查询日志最大条数,默认为128,不要设置过大,设置过大可能一条记录页不会记录

查询慢查询命令

# n 为条数 例如:slowlog get 5 查询前5条
slowlog get {n} 

查询内存使用情况

info memory

常用的参数如下:

used_memory    redis分配器分配的内存总量

used_memory_rss     由操作系统申请内存大小

used_memory_peak    redis内存消耗峰值

total_system_memory    系统内存总量

used_memory_lua     lua 脚本占用总量

maxmemory_policy     使用的策略 有6种,可以看基础篇了解maxmemory_policy     

mem_fragmentation_ratio    碎片率

   大于1.5,说明碎片率很大 最好的处理方式就是重启,

   小于1,说明操作系统吧Redis 做 内存交换(swap)redis性能会变得很差 甚至僵死

其中参数_human 是换算出来后的显示

查看主从关系

info replication
#主节点
role:master
# 从节点的连接数
connected_slaves:2
# 从节点详细信息 IP PORT 状态 命令(单位:字节长度)偏移量 延迟秒数
# 主节点每次处理完写操作,会把命令的字节长度累加到master_repl_offset中。
# 从节点在接收到主节点发送的命令后,会累加记录子什么偏移量信息slave_repl_offset,同时,也会每秒钟上报自身的复制偏移量到主节点,以供主节点记录存储。
# 在实际应用中,可以通过对比主从复制偏移量信息来监控主从复制健康状况。
slave0:ip=192.168.10.102,port=6379,state=online,offset=23866,lag=0
slave1:ip=192.168.10.103,port=6379,state=online,offset=23866,lag=0
# master启动时生成的40位16进制的随机字符串,用来标识master节点
master_replid:acc2aaa1f0bb0fd79d7d3302f16bddcbe4add423
master_replid2:0000000000000000000000000000000000000000
# master 命令(单位:字节长度)已写入的偏移量
master_repl_offset:23866
second_repl_offset:-1
# 0/1:关闭/开启复制积压缓冲区标志(2.8+),主要用于增量复制及丢失命令补救
repl_backlog_active:1
# 缓冲区最大长度,默认 1M
repl_backlog_size:1048576
# 缓冲区起始偏移量
repl_backlog_first_byte_offset:1
# 缓冲区已存储的数据长度
repl_backlog_histlen:23866


# 从节点
role:slave
# 主节点详细信息
master_host:192.168.10.101
master_port:6379
# slave端可查看它与master之间同步状态,当复制断开后表示down
master_link_status:up
# 主库多少秒未发送数据到从库
master_last_io_seconds_ago:1
# 从服务器是否在与主服务器进行同步 0否/1是
master_sync_in_progress:0
# slave复制命令(单位:字节长度)偏移量
slave_repl_offset:24076
# 选举时,成为主节点的优先级,数字越大优先级越高,0 永远不会成为主节点
slave_priority:100
# 从库是否设置只读,0读写/1只读
slave_read_only:1
# 连接的slave实例个数
connected_slaves:0
# master启动时生成的40位16进制的随机字符串,用来标识master节点
master_replid:acc2aaa1f0bb0fd79d7d3302f16bddcbe4add423
# slave切换master之后,会生成了自己的master标识,之前的master节点的标识存到了master_replid2的位置
master_replid2:0000000000000000000000000000000000000000
# master 命令(单位:字节长度)已写入的偏移量
master_repl_offset:24076
# 主从切换时记录主节点的命令偏移量+1,为了避免全量复制
second_repl_offset:-1
# 0/1:关闭/开启复制积压缓冲区标志(2.8+),主要用于增量复制及丢失命令补救
repl_backlog_active:1
# 缓冲区最大长度,默认 1M
repl_backlog_size:1048576
# 缓冲区起始偏移量
repl_backlog_first_byte_offset:1
# 缓冲区已存储的数据长度
repl_backlog_histlen:24076

查询状态

info stats 

total_connections_received:redis自启动以来处理的客户端连接总数

rejected_connection:redis自启动以来拒绝的客户端连接数,需要重点监控

查询客户端信息

info clients

maxclients: 默认最大客户端连接数,默认是10000

connected_clients:当前连接数

系列链接

Redis学习笔记一 入门基础_记性差的程序员的博客-CSDN博客

Redis学习笔记二 主从复制_记性差的程序员的博客-CSDN博客

Redis学习笔记三 哨兵(Sentinel)_记性差的程序员的博客-CSDN博客

Redis学习笔记四 集群(cluster)_记性差的程序员的博客-CSDN博客

参考

缓存使用过程中的五种策略总结及优缺点 - 进击的Ace - 博客园
《redis开发与运营》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
尚硅谷是一个教育机构,他们提供了一份关于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、付费专栏及课程。

余额充值