redis性能优化
2021-06-25 本文已影响0人
Geroge1226
1、redis性能优化
当前分布式、高并发应用系统的背景下,对于系统的稳定性,高性能要求越来越高,Redis
作为应用系统的环节也会遇到一些挑战,为了合理,高效应用Redis
这一内存存储数据库,在使用中需要注意以下这些优化点
2、减少通信次数
使用管道技术减少客户端与Redis服务器的通信次数,可以把多次请求合并在同一个请求,一次性返回所以请求的结果。注意,这里多次请求直接不能存在依赖关系,如:当前请求依赖上一次返回结果。
3、节省内存空间
3.1 精简键与键值长度。
使用可以准确表达意思的键,但键的长度可经量精短。
3.2 改写Redis
内部编码方式
redis每一个键值都是以一个redisObject 结构保存的,redisObject的定义:
typedef struct redisObject{
unsigned type : 4;
unsigned notused:2;
unsigned encoding:4;
unsigned lru:22;
int refcount';
void *ptr;
} robj;
使用object encoding key
每个键值可取值类型如下表:
4、设置内存淘汰机制
4.3、对键经量设置过期时间
redis可以执行过期策略:定时删除
+ 惰性删除
- 定时删除指的是redis会默认每过100ms随机抽取一些key(不是所有key)来检查与删除。
- 惰性删除指的是redis的key在使用时候进行检查是否过期,如果过期则不返回信息,同时做删除处理。
- 过期策略存在缺陷,如果key键比较多定时检查无法扫描到,而过期的key又长时间不使用,这样就会存在内存中,数据量大了就会内存撑爆。
4.2 redis
内存淘汰机制有以下几个:
noeviction
: 当内存不足以容纳新写入数据时,新写入操作会报错,这个一般没人用吧,实在是太恶心了。
allkeys-lru
:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的 key(这个是最常用的)。
allkeys-random
:当内存不足以容纳新写入数据时,在键空间中,随机移除某个 key,这个一般没人用吧,为啥要随机,肯定是把最近最少使用的 key 给干掉啊。
volatile-lru
:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的 key(这个一般不太合适)。
volatile-random
:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个 key。
volatile-ttl
:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的 key 优先移除。