redis理解

redis数据库的结构其实是一个大的hash表,key-value,保存的都是引用,key的引用指向字符串对象?。而value的引用指向各种数据结构:字符串,链表,跳跃表,hash表等等。

redis中的数据结构

-----简单字符串:一个对象,保存有字符串长度,可用长度,并提前分配多余内存(也叫惰性空间,是为了用空间换取字符串改变时候的消耗的时间)。之所以保存字符串长度,是为了获取长度的时候高效。

-----链表,关键字:双向,无环,list对象保存listnode的指针,保存节点个数。为列表list的实现之一。

-----hash表:和hashmap的数据结构一样。

-----跳跃表:

-----整数集合:

rdb持久化:保存的是键值对,按一定频率自动保存,所以有一定概率丢失数据,可以用master-slave模式,减小数据丢失,save会阻塞主进程,besave 新开一个进程不阻塞。

AOF持久化:保存redis的写命令,appendfsync决定什么时候把内核缓冲区的页刷新到磁盘中,always:每个loop(事件循环)都保存,persec和no:每秒和不自动保存。所以丢失数据的概率由小到大,然后效率由低到高。AOF重写:比如对一个key修改n次,那么需要保存n个命令,不如只保存存入这个key的命令。所以要定期重新写新的aof,再用原子的命令替换掉当前aof。在重写新aof的时候,旧的aof会有写的命令,那么让它写两份,一份新,一份旧,所以新的aof其实还有一部分可以优化,不过已经是很小一部分了。

redis的网络io模式和netty的是不一样的,netty是两个线程池,多个线程select,redis只有一个selector,每一个select出来的key处理完毕之后再处理下一个。因为都是在内存中操作,所以响应时间比较快,又不用处理并发、加锁等等。

转载于:https://www.cnblogs.com/chuliang/p/8371269.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值