你未必出类拔萃,但一定与众不同
接入以前的redis数据类型
redis
1.切换数据库
每个redis都有 自己的目标数据库 通过select index 来进行切换数据库
默认情况下 redis客户端的目标数据库为 0 号数据库
以下为 在0号数据库设置键值,到达2号数据库 1号数据库读取的例子
127.0.0.1:6379> SET msg "hello world"
OK
127.0.0.1:6379> get msg
"hello world"
127.0.0.1:6379> select 2
OK
127.0.0.1:6379[2]> get msg
(nil)
127.0.0.1:6379[2]> set msg "two hello world"
OK
127.0.0.1:6379[2]> get msg
"two hello world"
127.0.0.1:6379[2]> select 1
OK
127.0.0.1:6379[1]> get msg
(nil)
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> msg
(error) ERR unknown command 'msg'
127.0.0.1:6379> get msg
"hello world"
而在服务器内部 客户端状态redisClient结构的db属性记录了客户端当前的目标数据库,这个属性是一个指向redisDb结构的指针。
redisClient.db 指针指向redisServer.db数组的其中一个元素,而被指向的元素就是客户端的目标数据库
2.数据库键空间
键空间和用户所见的数据都是对应的
键空间的键就是数据库的键,每个键都是一个字符串对象
健空间的值就是数据库的值,每个值都都可以是字符串对象,也可以是列表对象 哈希表对象 集合对象 有序集合对象中的任何一种对象
3.添加新键 获取键值
通过set添加新键
get得到键对应的值
127.0.0.1:6379> set todayDate "20210416"
OK
127.0.0.1:6379> get todayDate
"20210416"
127.0.0.1:6379>
4.删除键
del todayDate
127.0.0.1:6379> del todayDate
(integer) 1
127.0.0.1:6379> get todayDate
(nil)
5.更新键
set todayDate “20210416 16:00:00”
127.0.0.1:6379> get todayDate
"20210416"
127.0.0.1:6379> set todayDate "20210416 16:00:00"
OK
127.0.0.1:6379> get todayDate
"20210416 16:00:00"
127.0.0.1:6379>
6.获取数据库键数量
dbsize
127.0.0.1:6379> dbsize
(integer) 5
7.设置过期时间总共四种
expire 设置过期时间为ttl秒
pexpire 设置过期时间为ttl毫秒
expireat 设置过期时间为时间戳
pexpireat 设置过期时间毫秒时间戳
expire 或者 pexpire
127.0.0.1:6379> expire todayDate 10
(integer) 1
127.0.0.1:6379> get todayDate
"20210416 16:00:00"
127.0.0.1:6379> get todayDate
(nil)
127.0.0.1:6379>
8.查看剩余过期时间
ttl 秒 pttl 毫秒
127.0.0.1:6379> set todayDate "20210416 16:20:00"
OK
127.0.0.1:6379> expire todayDate 1000
(integer) 1
127.0.0.1:6379> ttl todayDate
(integer) 987
127.0.0.1:6379> pttl todayDate
(integer) 976268
9.移除过期时间
persist
127.0.0.1:6379> ttl todayDate
(integer) 739
127.0.0.1:6379> persist todayDate
(integer) 1
127.0.0.1:6379> ttl todayDate
(integer) -1
过期键删除策略(1,3为主动删除策略,2为被动删除)
1.定时删除
在设置键的过期时间的同时 创建一个定时器 让定时器在键的过期时间来临时,立即执行对键的删除操作
优点:定时删除策略对内存是最友好的,通过使用定时器 定时删除策略可以保证过期键会尽可能快的被删除,并且释放过期键所占的内存
缺点: 对cpu的时间不友好,过期键过多 删除过期键可能占用过多的cpu时间。
2.惰性删除
放任键过期不管,但是每次从键空间取值的时候。都检查是否键过期,过期就删除键,没有过期就返回键
优点:对cpu时间来说最友好,取键的时候才会对键进行过期检查,并且删除目标只限于当前的键,对其他的键不会产生影响
缺点 :对内存不友好,一个键已经过期,而这个键还保存在数据库中,只要过期键不被删除 那么占用的内存就不会释放
3.定期删除
每隔一段时间,对数据库进行一次检查 删除其中的过期键
定期删除是1,2 的整合和折中
这个策略的难点是 确定删除操作执行的时长和频率
删除操作过于频繁 或者执行时间过长 就会退化为定时删除
操作执行较少,执行时间太短,又会变成惰性删除
因此必须根据使用场景以及服务器的情况 进行定义删除执行的时长和频率