redis-内存

如你所说,任何事情都不是绝对的。虽然说是内存数据库,但是真的是所有数据都放到内存中吗?应该是这样的吧,否则还叫什么内存数据库,其实错了,任何事情都有轻重缓急,而且内存不可能有硬盘那么大,不必要的数据还是放在了硬盘上面。

目标只有一个:提升速度。

那么就没必要将不经常使用的数据放内存里了,毕竟数据多了速度也会变慢。同时一些没必要存储的数据其实可以直接在内存中销毁,没必要写入磁盘。所以有两种策略来实现这一目标

设置过期时间–>临时数据自动销毁

1
2
3
4
expire key time # time单位为秒
setex(string key,int seconds,string value) # 字符串使用(特例)

ttl key # 查看过期时间

撤销设置的过期时间

1
persist key	# 如果不想销毁,可以撤销
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
eg:
127.0.0.1:6379> set name lanzhan # 插入数据key-value,name->lanzhan
OK
127.0.0.1:6379> ttl name # 查看过期时间,-1为永不过期
(integer) -1
127.0.0.1:6379> expire name 20 # 设置过期时间为20s
(integer) 1
127.0.0.1:6379> persist name # 撤销过期时间
(integer) 1
127.0.0.1:6379> ttl name # 现在又为永不过期
(integer) -1
127.0.0.1:6379> expire name 2 # 设置过期时间为2s
(integer) 1
127.0.0.1:6379> ttl name # 已经过期,-2为已过期
(integer) -2
127.0.0.1:6379> keys * # 数据已销毁,不存在了
(empty list or set)

适合场景:临时数据(验证码),中间数据(类似与oracle中建的那些临时表)

LRU动态算法–>不用数据不加载到内存

redis启动时默认会将所有数据都加载到内存中,lru算法会将不常用数据在内存中销毁,需要时才会从硬盘中再次读取