对象
1. Redis数据库中的每个键值对的键和值都是一个对象。
2. Redis共有字符串、列表、哈希、集合、有序集合五种类型的对象,每种类型的对象至少都有两种或者以上的编码方式,不同的编码可以在不同的使用场景上优化对象的使用效率。
3. 服务器在执行某些命令之前,会先检查给定键的类型能否执行指定的命令,而检查一个键的类型就是检查键的值对象的类型。
4. Redis的对象系统带有引用计数实现的内存回收机制,当一个对象不再被使用时,该对象所占用的内存就会被自动释放。
5. Redis会共享值为0到9999的字符串对象。Redis只对包含整数值的字符串对象进行共享。
6. 对象会记录自己的最后一个被访问的时间,这个时间可以用于计算对象的空转时间,用以判断回收内存。
1. 每次当我们在Redis的数据库中新创建一个键值对时,我们至少会创建两个对象,一个对象用作键值对的键(键)对象,另一个对象用作键值对的值(值对象)
2. Redis中的每个对象都由一个redisObject结构表示,该结构中和保存数据相关的三个属性分别是type属性,encoding属性和ptr属性。
3. 对于Redis数据库保存的键值对来说,键总是一个字符串对象,而值则可以是字符串对象、列表对象、哈希对象、集合对象或者有序集合对象的其中一种。
4. type key 命令返回该键对应的值对象的类型,而不是键对象的类型。type的返回值:string,list,hash,set,zset
5. 对象的ptr指针指向对象的底层实现数据结构,而这些数据结构由对象的encoding属性决定。encoding属性记录了对象所使用的编码,也即是说这个对象使用什么数据结构
(字典,链表等)作为对象的底层实现。
6. 每种类型的对象都至少使用了两种不同的编码。Redis可以根据不同的使用场景来为一个对象设置不同的编码,从而优化对象在某一场景下的效率。
7. 使用OBJECT ENCODING命令可以查看一个数据库的值对象的编码。
8. 字符串的编码可以是int,raw 或者 embstr。在条件满足的情况下,int和embstr会被转换成raw编码的字符串对象。
9. 字符串常用命令:
SET , GET , APPEDN , INCRBYFLOAT(浮点数加法),INCRBY(整数加法),DECRBY(整数减法),STRLEN(返回字符串的长度),SETRANGE(设置特定索引的值),GETRANGE(获取特定索引的值)
10. 列表对象的编码可以是ziplist或者linkedlist。
11. 列表常用命令:
LPUSH(新元素添加到表头),RPUSH(新元素添加到表尾),LPOP(获取并删除表头节点),RPOP(获取并删除表尾节点),LINDEX(获取指定索引的元素),LLEN(获取列表长度),
LINSERT(在列表指定位置插入元素),LREM(删除不在指定索引范围内的节点),LSET(更新指定位置上的节点)
12. 哈希对象的编码可以是ziplist或者hashtable .
13. 哈希对象常用命令:
HSET(添加新节点),HGET(获取对应的值),HEXISTS(判断指定的键是否存在),HDEL(删除指定的节点),HLEN(返回键值对数量),HGETALL(返回所有键值对)
14. 集合对象的编码可以是intset或者hashtable
15. 集合对象常用命令:
SADD,SCARD(获取元素数量),SISMEMBER(判断元素是否存在),SMEMBERS(返回所有键值),SRANDMEMBER(随即返回一个元素),SPOP(随即获取并删除元素),SREM(删除所有给定元素)
16. 有序集合对象,编码可以是ziplist或者skiplist
17. 有序集合对象常用命令:
ZADD,ZCAR(获取集合元素数量),ZCOUNT(获取给定范围内节点数量),ZRANG(从表头到表尾,返回给定索引范围内的所有元素),ZREVRANGE(从表尾到表头,返回给定索引范围内的所有元素),
ZRANK(从表头向表尾,返回节点排名),ZREVRANK(从表尾到表头,返回节点排名),ZREM(删除),ZSCORE(获取分值)
18. Redis中用于操作键的命令基本上可以分为两种类型:
1). 可以对任何类型的键执行,比如:DEL命令,EXPIRE命令、RENAME命令、TYPE命令 、OBJECT命令等。
2). 只能对特定类型的键执行:
SET,GET,APPEND,STRLEN等命令只能对字符串键执行;
HDEL,HSET,HGET,HLEN等命令只能对哈希键执行;
RPUSH,LPOP,LINSERT,LLEN等命令只能对列表键执行;
SADD,SPOP,SINTER,SCARD等命令只能对集合键执行;
ZADD,ZCARD,ZRANK,ZSCORE等命令只能对有序集合键执行。
19. Redis除了会根据值对象的类型来判断键是否能够执行指定的命令之外,还会根据值对象的编码方式,选择正确的命令实现代码来执行命令,决定调用哪种结构的函数来执行。
20. 内存回收:当对象的引用计数值变为0时,对象所占用的内存会被释放。