Open Danceiny opened 5 years ago
> object encoding KEY
geopos key member [member ...]
geodist key member1 member2 [unit]
unit: m, km, mi, ft
georadius key longtitude latitude radius m|km|ft|mi [withcoord] [withdist] [withhash] [COUNT count] [asc|desc] [store key] [storedist key]
georadiusbymember key member radius m|km|ft|mi [withcoord] [withdist] [withhash] [COUNT count] [asc|desc] [store key] [storedist key]
zrem key member
)*<参数数量> CRLF
$<参数1的字节数> CRLF
<参数1> CRLF
...
$<参数N的字节数> CRLF
<参数N> CRLF
每个客户端的输入缓冲区硬编码为1GB,一旦超过该值,客户端会被关闭。 输入缓冲区不受maxmemory限制,如果一个redis实例设置maxmemory为4G,已经存储2G数据库,此时输入缓冲区使用了3G,可能会导致数据丢失、键值淘汰、OOM等。 输入缓冲区过大的原因:
输出缓冲区由两部分组成:固定缓冲区(16KB)和动态缓冲区。
typedef struct redisClient {
// 动态缓冲区列表
list *reply;
// 动态缓冲区列表长度(对象个数)
unsigned long reply_bytes;
// 固定缓冲区已经使用的字节数
int bufpos;
// 字节数组作为固定缓冲区
char buf[REDIS_REPLY_CHUNK_BYTES];
} redisClient;
如何预防输出缓冲区出现异常?(比输入缓冲区异常概率更大)
对象内存 key对象和value对象。
缓冲内存
输入缓冲无法控制,最大1G;输出通过
client-output-buffer-limit
控制。
默认使用的内存分配器采用jemelloc
,可选的还有glibc
和tcmalloc
。
《Redis开发与运维 》Google Drive