Redis数据库笔记(一)
博客专区 > FEINIK 的博客 > 博客详情
Redis数据库笔记(一)
FEINIK 发表于11个月前
Redis数据库笔记(一)
  • 发表于 11个月前
  • 阅读 50
  • 收藏 3
  • 点赞 1
  • 评论 1

【腾讯云】如何购买服务器最划算?>>>   

摘要: Redis是一个开源,高级的键值存储和一个适用的解决方案,用于构建高性能,可扩展的Web应用程序

一、对象

1. Redis数据库中的每个键值对的键和值都是一个对象

2. Redis共有字符串(string),哈希(hash),列表(list),集合(set),有序集合(zset)五种类型的对象,每种类型的对象都至少包含两种或以上的编码方式,不同的编码方式可以在不同的使用场景上优化对象的使用效率。

3. 内存回收:

    因为C语言并不支持内存的自动回收功能, 所以Redis在自己的对象系统中构建了一个引用计数技术实现的内存回收机制,通过这一机制,   程序可以通过跟踪对象的引用计数信息,在适当的时候自动释放对象并进行内存回收。

4. 对象共享:

    对象共享可以很大程度上节约内存,Redis只对包含整数值(0~9999)的字符串对象进行共享。

    如果键A创建了一个包含整数值100的字符串对象,键B也创建了一个整数值100的字符串对象,那么在Redis中键A与键B将共享同一个整数值100的字符串对象,如下图:

二、Redis过期键删除策略

如果一个键过期了,那么一般会有以下几种不同的删除策略:

1. 定时删除:在设置键的过期时间的同时,创建一个定时器,让定时器在键的过期时间到达时,立即执行键的删除操作。

2. 惰性删除:只有在获取键的时候,才检查键是否过期,如果过期就删除,否则返回该键。

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

以上三种删除策略某种程度上都存在一定的问题,定时删除可以最大程度的释放内存,但是如果过期键比较多的时候,在删除的时候会占用相当一部分的CPU时间,会造成服务器在响应时间与吞吐量会下降。惰性删除对CPU时间来说是友好的,但如果相当一部分键长时间未被访问,那么就会存在内存泄漏的问题。定期删除的难点是需要制定一个合理的执行时长与执行频率。

那其实Redis服务器实际使用的惰性删除与定期删除策略的结合,通过这两种策略的结合可以很好的合理使用CPU时间与和避免内存浪费之间取得平衡。

三、数据库

1. Redis数据库是由dict和expires两个字典组成,其中dict字典负责保存键值对,而expires字典负责保存键的过期时间。

2. 当主服务器删除一个过期键时,它会向所有从服务器发送一条DEL命令来显示的删除过期键。

3. 从服务器即使发现过期键也不会主动删除它,而是等待主节点发来DEL命令,这种删除策略保证了主从服务器数据的一致性。

四、数据持久化

1. RDB持久化:

RDB持久化既可以手动执行,也可以根据服务器配置选项定期执行,该功能可以将某个时间点的数据库状态保存到RDB文件中,避免数据意外丢失。

RDB文件的创建可以通过SAVE与BGSAVE两个命令来生成,SAVE命令会阻塞Redis服务器进程,在SAVE命令执行期间,客户端发送的任何请求都会被服务器拒绝。而BGSAVE命令则不会阻塞,因为BGSAVE命令的保存工作是由子进程来完成的,在 执行BGSAVE命令的时候客户端的SAVE, BGSAVE, BGREWRITEAOF命令都会被阻塞。

RDB文件载入,服务器在载入RDB文件时会一直处于阻塞状态,直到载入完成。

自动间隔性保存配置:

save 900 1

save 300 10

save 60 10000

只要满足以上任何一个条件BGSAVE就会被执行。

2. AOF持久化

与RDB持久化通过保存数据库中的键值对来记录数据库状态不同的是,AOF持久化是通过保存Redis服务器所执行的写命令来记录数据库状态的。

标签: Redis 持久化 AOF RDB
共有 人打赏支持
粉丝 191
博文 47
码字总数 41439
评论 (1)
qb11
条理清晰,很容易看懂,涵盖的也比较全面,:+1:
×
FEINIK
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: