redis(4)——redia数据库

来源:互联网 发布:淘宝二手怎么找不到了 编辑:程序博客网 时间:2024/05/24 05:20

一、redis数据库

1、redis数据库的数据结构


2、切换数据库

        默认情况下,redis客户端的目标数据库为0号数据库,但客户端可以通过执行select命令来切换目标数据库

        在服务器内部,客户端状态redisClient结构的db属性记录了客户端当前的目标数据库,这个属性是一个指向redisDB结构的指针。


3、数据库键空间

        redisDb结构的dict字典保存了数据库中的所有键值对,这个字典称为键空间

        键空间的键也就是数据库的键,每个键都是一个字符串对象

        键空间的值也就是数据库的值,每个值可以是字符串对象、列表对象、哈希表对象、集合对象和有序集合对象中的任意一种redis对象。

        所有针对数据库的操作,比如添加一个键值对到数据库,或者从数据库删除一个键值对,又或者在数据库获取某个键值对等,实际上都是通过对键空间字典进行操作来实现的。

4、数据库操作原理

添加新建set

        实际上就是将新建值对添加到键空间字典里面,其中键为字符串对象,值为任意一种类型的redis对象

删除键 del

        在键空间里面删除键所对应的键值对对象

更新建 set

        对键空间里面键所对应的值对象进行更新,根据值对象的类型不同,更新的具体方法也会有所不同

对键取值 get/lrange

        在键空间查找键,找到键之后接着取得该键所对应的字符串对象值,之后再返回值/列表对象所包含的字符串。

清空整个数据库 flushdb:删除键空间所有的键值对

随机返回数据库中的某个键randomkey:通过在键空间中随机返回一个键来实现

返回数据库数量dbsize:返回键空间中包含的键值对的数量。

二、设置键的生存时间或过期时间

1、设置过期键

        expire <key> <ttl>命令用于将键key的生存时间设置为ttl秒

        pexpire <key> <ttl>命令用于将键key的生存时间设置为ttl毫秒

        expireat <key> <timestamp>命令用于将键key的过期时间设置为timestamp所指定的秒数时间戳

        pexpireat <key> <timestamp>命令用于将键key的过期时间设置为timestamp所指定的毫秒数时间戳

2、保存过期键

        在数据库结构 redisDb 中的expires 字典保存了数据库中所有键的过期时间,这个字典成为过期字典.

        过期字典是一个指针,指向键空间的某个键对象

        过期字典的值是一个 long long 类型的整数,这个整数保存了键所指向的数据库键的过期时间–一个毫秒级的 UNIX 时间戳

3、移除过期时间

        PERSIST 就是 EXPIRE命令的反操作: 在过期字典中查找给定的键,并解除键和值(过期时间)在过期字典中的关联。

4、计算并返回剩余生存时间

        TTL 命令以秒为单位返回键的剩余生存时间, PTTL以毫秒为单位返回键的剩余生存时间.

5、过期键的删除策略

        - 定时删除:在设置键的过期时间的同时,创建一个定时器,当过期时间到达时,由事件处理器自动执行键的删除操作。

        - 惰性删除:放任键过期不管,但是在每次从键空间中获取键值时,都要检查取得的键是否过期,如果过期的话,就删除它,并返回空;如果没过期,就返回键值。

        - 定期删除:每隔一段时间,程序就对数据库进行一次检查,删除里面的过期键。

6、Redis 使用的策略

        Redis 使用的过期键删除策略是惰性删除加上定期删除, 这两个策略相互配合,可以很好地在合理利用 CPU 时间和节约内存空间之间取得平衡。

 

原创粉丝点击