redis- redis的类型检查和引用计数

771 阅读1分钟

世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。

在操作redis时如果类型不匹配就会报错

WRONGTYPE Operation against a key holding the wrong kind of value

这是因为在get之前会做类型检查,如果get的方式与实际类型不匹配就会抛出异常。
redis中键的类型由type标注,而值的类型由encoding标注,type标注的即为redis的对象类型,encoding标注的即为值的具体存储实现,如list有ziplist和linkedlist两种。

redis是由C语言实现的,C语言没有自动垃圾回收机制,redis通过引用计数实现了自动垃圾回收机制,即每一个对象有一个引用计数器,如果一个对象被引用一次,引用计数器就加1,如果引用失效,则减1,直到引用计数器计数为0,则该对象被认为是可以回收的垃圾对象。同时引用计数算法还有另外一个作用,即对象共享,在服务器启动时,会初始化0-9999共1万条数据作为共享对象,如果有键指向这个对象,则引用计数器加1,反之,如果删除,则引用计数器减一。目前只有对数字的共享,因为它的时间复杂度最低O(1),如果是字符串则会是O(n),列表和hash会是O(n^2)。

在这里插入图片描述