redis基础篇~内存篇
`database_redis` varchar(255) DEFAULT NULL,
` type_redis` varchar(255) DEFAULT NULL,
`key_redis` text,
`size_in_bytes_redis` int(11) DEFAULT NULL,
`encoding_redis` varchar(255) DEFAULT NULL,
`num_elements_redis` varchar(255) DEFAULT NULL,
`len_largest_element_redis` varchar(255) DEFAULT NULL,
`expiry_redis` varchar(255) DEFAULT NULL,
KEY `idx_type` (`type_redis`),
KEY `idx_size` (`size_in_bytes_redis`),
KEY `idx_expire` (`expiry_redis`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
LOAD DATA LOCAL INFILE 'csv_name' INTO TABLE table_name FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' IGNORE 1 LINES
3 sql语句查看select key_redis,concat(round(size_in_bytes_redis/1024/1024,2),'MB') as key_size from redis_db order by size_in_bytes_redis desc limit 100; 查看top100
select type_redis,count(*) from redis_db group by type_redis; 查看redis key类型数量
select key_redis from redis_db where expiry_redis is null ; 查看没有设置过期时间的key
0 del/unlink 删除keys的命令
1 针对过期keys的处理
1 惰性删除-程序get|scan 查询命令 对于大部分过期的keys,如果没有get,是不会主动删除.一旦并发get过期keys,就会发生大量过期keys被主动删除情况
scan 0 match "aaa" count 10000 根据提示继续 scan index match "aaa" count 10000 通过主动scan 可以短时间内释放大量的过期keys
2 主动删除-后台任务后台任务每十秒执行进行主动性的key删除,可以理解成为一个crontab,通过调整hz参数可以提高主动删除key的频率
2 内存一旦到达max_memory时会采用特殊策略,1 是要到达内存限制 2 是 evict 也有表现,驱逐keys数就是特殊策略采取的动作
在设置了过期时间的数据中进行淘汰:
volatile-random:随机淘汰设置了过期时间的任意键值;
volatile-ttl:优先淘汰更早过期的键值。
volatile-lru(Redis3.0 之前,默认的内存淘汰策略):淘汰所有设置了过期时间的键值中,最久未使用的键值;
volatile-lfu(Redis 4.0 后新增的内存淘汰策略):淘汰所有设置了过期时间的键值中,最少使用的键值;
在所有数据范围内进行淘汰:
allkeys-random:随机淘汰任意键值;
allkeys-lru:淘汰整个键值中最久未使用的键值;
allkeys-lfu(Redis 4.0 后新增的内存淘汰策略):淘汰整个键值中最少使用的键值