对象类型的操作

五种对象类型,对象结构中Type Redis_string Redis_list Redis_hash Redis_string Redis_zset
使用Type key 得到类型是string list hash set zset
对象结构中对应type的编码encoding
Type:Redis_string Redis_encoding_long
Redis_encoding_raw
Redis_encoding_embstr

Type:Redis_list Redis_encoding_encoding_ziplist
列表键中包含少量元素,元素是最小整数值或者是比较短的字符串
Redis_encoding_linkedlist
列表键中包含很多元素或者元素是长的字符串

Type:Redis_hash Redis_encoding_ht hash
键包含很多键值对或者是键值对中的键是长的字符串
Redis_encoding_ziplist
hash键包含少量键值对,键值对的键和值为整数值或者是长度比较短的字符串

Type:Redis_set Redis_encoding_intset
集合键中只包含整数元素并且元素的数量不多不超过512个
Redis_encoding_ht

Type:Redis_zset Redis_encoding_ziplist
Redis_encoding_skiplist

字符串对象:set key value get key append key value strlen key setrange key index getrange getrang start end del key
保存值,获取值,追加值,字符串长度,索引处设置值,取出索引之间的值,删除键
列表对象: lpush key value value rpush key value value lrange key start end lpop key rpop key linsert llen key lindex key index linsert key after|before value value lrem key count value lset key index value ltrim key start end del key
保存值到表头(有追加效果),保存值到表尾(有追加效果),获取值,弹出头节点并删除 ,弹出尾节点并删除,列表中元素数目,指定索引的值,指定的值前或者值后插入值 ,删除包含给定节点的元素count>0,从列表头开始删除count个与value相同的元素,count<0从列表尾开始删除count个与value值相同的元素,count=0删除列表中所有与value值相同的值,指定索引赋值,删除不在索引范围的值,删除键
hash对象: hset key filed value hmset key filed value filed value hget key filed hgetalll key hdel key filed filed hlen key hexits key filed
保存单个值(同一个键保存将实现追加的效果),保存多个值(可实现追加的效果),获取值,获取全部值,删除值,键值对个数,否存在键值对
hsetziplist实现,分别将键和值压入列表中,hsethashtable实现,将新节点添加到字典中
hget调用find方法找到指定的节点,移动节点指针到旁边值节点,hashtable实现查找到键直接返回值
集合对象:sadd key value value spop key spop key count scard key sinter key key smember key sismembers key value srandmember key count srem key srem key value del key
保存值(分三步,扩展空间元素转换类型并放在正确位上将新元素添加上),随机删除一个元素,随机删除集合中的两个元素,集合中元素的数目,两个集合的交集,集合中的所有元素,集合中是否包含value,集合中随机返回几个元素,集合中删除value,删除键

通过对象结构中的type属性判断是否可以执行特定的命令。类型不对返回类型错误不执行命令,同一种类型有不同的编码但是可以执行相同的命令,这种命令就是多态命令比如type del等

内存回收:redis对象系统的引用计数技术实现内存回收机制,跟踪对象的引用计数信息,适当时候自动释放对象并进行内存回收
对象结构redisObject中的refcount属性记录引用计数信息
redisObject{
int refcount;
type;
encoding;
ptr;
}
对象的引用计数信息随使用状态不断变化,创建对象的时候引用计数的值会被初始化为1,对象被一个新程序使用的时候计数值会加1,对象不被程序使用时候引用计数值减1,对象引用计数值为0的时候对象占用的内存会被释放。对象的生命周期是:创建对象,操作对象,释放对象
object refcount key
对象结构中type encoding refcount 和ptr lru属性,该属性记录了对象最后一次被命令程序访问的时间
redisobject{
type:对象类型
encoding:编码类型
ptr:保存地址
refcount:被引用的数
lru:最后一次被命令程序访问的时间
}
object encoding key编码类型
object idletime key 键的空转时长,等于当前时间减去键的值对象的lru时间,object ideltime在访问键值对象的时候不会修改lru属性
如果服务器打开了maxmemory选项,并且回收内存的算法是volatile-lru或者是allkeys-lru ,服务器占用的内存超过了maxmemory选项所设置的上限时候,空转较高的那部分键就会优先被释放,回收内存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值