Redis-客户端缓冲区 output buffer

Redis是一个移动服务器,客户端(通常)通过网络连接Redis。这种情况下,客户端请求返回客户端的时间将显著长于Redis CPU从RAM读取数据的时间。这意味着如果没有客户端缓冲区的话,Redis的主要差异与在该段时间对服务的响应有关。客户端缓冲区组成了服务客户请求所需的内存空间,Redis的每个连接都配有自己的缓冲区空间。处理请求后,Redis把响应数据复制到客户端缓冲区,然后继续处理下一个请求,与此同时,请求客户端通过网络连接读取数据。Redis客户端缓冲区配置在redis.conf文件:

config get client-output-buffer-limit
1) "client-output-buffer-limit"
2) "normal 0 0 0 slave 268435456 67108864 60 pubsub 33554432 8388608 60"</span>

该配置项格式如下:
client-output-buffer-limit <class> <hard limit> <soft limit> <soft seconds>
<class>:目前支持3种客户端:
1) normal => normal clients; 
2) slave clients and MONITOR clients; 
3) pubsub => clients subcribed to at least one pubsub channel or pattern
<hard limit>:若output buffer大小超过该值,Redis会立即关闭与对应client的连接
<soft limit> <soft seconds>:若output buffer大小超过soft limit且这种情况的持续时间超过soft seconds,则Redis会关闭与对应client的连接。
默认的配置如下:
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
这些数值分别代表缓冲区软限制,硬限制和以秒为单位的超时(类似于复制缓冲区)。当Redis终止连接时,这些值提供保护——不需要客户读取回复——当缓冲区尺寸达到a)软限制并且保持状态直到超时b)硬限制。将这些数值都设为0意味着关闭保护。
不过,和复制缓冲区不同的是客户端缓冲区来自Redis数据内存空间。可以通过maxmemory指令设置Redis的总内存值,达到极限后,Redis将应用其配置的驱逐策略(由maxmemory-policy 指令定义)。因此,低性能的客户或大量的同时连接可能会因为数据集尺寸和客户端缓冲区达到内存限制导致Redis实例过早的驱逐键或禁止更新。
由于生命周期的相对性,一个客户端不需要降低性能就可能导致这种现象。因为RAM读取和网络读取存在着很大的速度差异,过多的客户端缓冲区很可能耗尽Redis内存,即使是在高性能的客户端和网络连接中。例如,考虑下(万恶的)KEYS指令,这个指令触发后,Redis将会把整个键的名空间拷贝给客户端缓冲区。如果我们的数据库有很多键,这很可能导致驱逐。

原文:https://blog.csdn.net/jiangguilong2000/article/details/38436941

原文地址:https://www.cnblogs.com/any-way/p/10411592.html

时间: 2024-10-31 19:30:06

Redis-客户端缓冲区 output buffer的相关文章

Redis配置详解-客户端缓冲区 output buffer

Redis配置详解-客户端缓冲区  http://blog.csdn.net/jiangguilong2000/article/details/38436941 Redis异常及使用总结 http://blog.csdn.net/jiangguilong2000/article/details/45025355 客户端缓冲区 output buffer 大概已经知道Redis是一个内存数据库,这意味着所有的数据都由RAM直接管理和提供的.因此Redis有着卓越的交付性能,Redis可以以亚毫秒级

Redis02 Redis客户端之Java

1 查看支持Java的redis客户端 本博文采用 Jedis 作为redis客户端,采用 commons-pool2 作为连接redis服务器的连接池 2 下载相关依赖与实战 2.1 到 Repository官网下载jar包 jedis <!-- https://mvnrepository.com/artifact/redis.clients/jedis --> <dependency> <groupId>redis.clients</groupId> &

一文彻底理解Redis序列化协议,你也可以编写Redis客户端

前提 最近学习Netty的时候想做一个基于Redis服务协议的编码解码模块,过程中顺便阅读了Redis服务序列化协议RESP,结合自己的理解对文档进行了翻译并且简单实现了RESP基于Java语言的解析.编写本文的使用使用的JDK版本为[8+]. RESP简介 Redis客户端与Redis服务端基于一个称作RESP的协议进行通信,RESP全称为Redis Serialization Protocol,也就是Redis序列化协议.虽然RESP为Redis设计,但是它也可以应用在其他客户端-服务端(C

【重要】Nginx模块之————Lua-Resty-Redis的参数介绍 (Lua-Nginx-Module 模块的Redis客户端驱动程序)

一.描述 这个Lua库是ngx_lua nginx模块的Redis客户端驱动程序:https://github.com/openresty/lua-nginx-module/#readme,这个Lua库利用ngx_lua的cosocket API,确保100%的非阻塞行为.请注意,至少需要ngx_lua 0.5.14或OpenResty 1.2.1.14. 二.方法介绍 除了所有的小写字母外,所有的Redis命令都有自己的方法.您可以在这里找到完整的Redis命令列表:http://redis.

Java NIO (二) 缓冲区(Buffer)

缓冲区(Buffer):一个用于特定基本数据类型的容器,由 java.nio 包定义的,所有缓冲区都是 Buffer 抽象类的子类. Java NIO 中的Buffer 主要用于和NIO中的通道(Channel)进行交互, 数据从通道(Channel)读入缓冲区(Buffer)或者从缓冲区(Buffer)写入通道(Channel).如下,我画的一个简图,Chanenl直接和数据源或者目的位置接触,Buffer作为中介这,从一个Channel中读取数据,然后将数据写入另一个Channel中. Bu

Redisson Redis 客户端

Redisson 2.3.0 发布了,勤快学qkxue.net发现Redisson 是基于 Redis 服务之上构建的分布式.可伸缩的 Java 数据结构,高级的 Redis 客户端. 该版本更新内容如下: Feature - new service added RExecutorService. More info about it hereFeature - new service added RScheduledExecutorService. More info about it her

spring整合redis客户端及缓存接口设计(转)

一.写在前面 缓存作为系统性能优化的一大杀手锏,几乎在每个系统或多或少的用到缓存.有的使用本地内存作为缓存,有的使用本地硬盘作为缓存,有的使用缓存服务器.但是无论使用哪种缓存,接口中的方法都是差不多.笔者最近的项目使用的是memcached作为缓存服务器,由于memcached的一些限制,现在想换redis作为缓存服务器.思路就是把memached的客户端换成redis客户端,接口依然是原来的接口,这样对系统可以无损替换,接口不变,功能不变,只是客户端变了.本文不介绍缓存的用法,不介绍redis

1、GeometryService的缓冲区(Buffer)功能实现

1.创建地图,并创建load的响应函数initToolbar map = new Map("map", { basemap: "streets", center: [-111.5, 39.541], zoom: 7 }); map.on("load", initToolbar); 2.initToolbar函数,启用Draw对象,draw-end事件触发时响应doBuffer函数 function initToolbar(evtObj) { ap

Java的Redis客户端Jedis

Java的Redis客户端Jedis 一.用windows中的Eclipse连接虚拟机的Redis的注意事项 禁用Linux的防火墙:Linux里执行命令 service iptables  stop 我的是已经禁用的, 修改redis.conf中注释掉bind 127.0.0.1 ,然后 protect-mode no 二.新建动态java工程, ① 导包 吐槽一下,这个workspace里都是Maven工程,去别的工程复制个junit jar包都找不到,好不容易找到包导入后运行又报错, ja