redis存储long类型 redis存储对象的数据类型 |
您所在的位置:网站首页 › redis存储对象集合 › redis存储long类型 redis存储对象的数据类型 |
参考书籍:《Redis设计与实现》,《Redis运维与开发》 1.对象Redis基于基础的数据结构创建了五种不同类型的对象系统,分别是: 字符串对象,列表对象,哈希对象,集合对象和有序集合对象; Redis的对象系统实现了基于引用计数技术的内存回收机制; Redis对象带有访问时间记录信息。 数据结构如下:typedef redisObject{ unsigned type:4;//类型 unsigned encoding:4;//编码 void *ptr;//只想底层实现数据结构的指针 } robj;其中,type属性记录的是对象的数据类型。因为键值总是字符串,而对象的数据类型就是上面的5种对象系统;(每种类型的对象都至少使用了两种不同的编码)
redis底层的数据结构:
不同的对象可以使用的编码类型(encoding): 可以通过OBJECT ENCODING key查看对应不同编码类型:
1.字符串对象的编码可以是int,row,或embstr; 2.最大值不能超过512M; 对象中被其他对象嵌套的对象 数据存取相关指令:
1.SETEX,SETNX,可用于分布式场景,当多个客户端同时执行操作,只能有一个客户端执行成功; 2.尽量使用MSET和MGET批量处理,但是要注意数量不是无节制的,当数量太多时,可能会造成redis阻塞或网络阻塞; 3.redis是单线程架构,自增自减不会额外消耗CPU;
1.列表对象可以是ziplist或linkedlist,linkedList使用的是双端链表作为底层实现,每个双端链表的节点都保存一个对象; 2.当满足单个字符长度小于64,元素数量小于512的时候,使用ziplist,不能就使用linkedlist 3.可以两端进行插入或弹出; 4.列表类型的两个特点:1.有序;2.可重复; 常用操作指令命令 描述 用法 LPUSH (1)将一个或多个值value插入到列表key的表头(2)如果有多个value值,那么各个value值按从左到右的顺序依次插入表头(3)key不存在,一个空列表会被创建并执行LPUSH操作(4)key存在但不是列表类型,返回错误 LPUSH key value [value ...] LPUSHX (1)将值value插入到列表key的表头,当且晋档key存在且为一个列表(2)key不存在时,LPUSHX命令什么都不做 LPUSHX key value LPOP (1)移除并返回列表key的头元素 LPOP key LRANGE (1)返回列表key中指定区间内的元素,区间以偏移量start和stop指定(2)start和stop都以0位底(3)可使用负数下标,-1表示列表最后一个元素,-2表示列表倒数第二个元素,以此类推(4)start大于列表最大下标,返回空列表(5)stop大于列表最大下标,stop=列表最大下标 LRANGE key start stop LREM (1)根据count的值,移除列表中与value相等的元素(2)count>0表示从头到尾搜索,移除与value相等的元素,数量为count(3)count (无数个键值对 )->这无数个键值对中,key必定是string对象 ,java中就是Map一样的意思) 常用指令1.集合对象的编码可以是inset或hasetable;(键值对值为null的hasetable) 2.当集合对象都是int类型且当总长度不超过512;使用intset否则hashtable 常用指令命令 描述 用法 SADD (1)将一个或多个member元素加入到key中,已存在在集合的member将被忽略(2)假如key不存在,则只创建一个只包含member元素做成员的集合(3)当key不是集合类型时,将返回一个错误 SADD key number [member ...] SCARD (1)返回key对应的集合中的元素数量 SCARD key SDIFF (1)返回一个集合的全部成员,该集合是第一个Key对应的集合和后面key对应的集合的差集 SDIFF key [key ...] SDIFFSTORE (1)和SDIFF类似,但结果保存到destination集合而不是简单返回结果集(2) destination如果已存在,则覆盖 SDIFFSTORE destionation key [key ...] SINTER (1)返回一个集合的全部成员,该集合是所有给定集合的交集(2)不存在的key被视为空集 SINTER key [key ...] SINTERSTORE (1)和SINTER类似,但结果保存早destination集合而不是简单返回结果集(2)如果destination已存在,则覆盖(3)destination可以是key本身 SINTERSTORE destination key [key ...] SISMEMBER (1)判断member元素是否key的成员,0表示不是,1表示是 SISMEMBER key member SMEMBERS (1)返回集合key中的所有成员(2)不存在的key被视为空集 SMEMBERS key SMOVE (1)原子性地将member元素从source集合移动到destination集合(2)source集合中不包含member元素,SMOVE命令不执行任何操作,仅返回0(3)destination中已包含member元素,SMOVE命令只是简单做source集合的member元素移除 SMOVE source desination member SPOP (1)移除并返回集合中的一个随机元素,如果count不指定那么随机返回一个随机元素(2)count为正数且小于集合元素数量,那么返回一个count个元素的数组且数组中的元素各不相同(3)count为正数且大于等于集合元素数量,那么返回整个集合(4)count为负数那么命令返回一个数组,数组中的元素可能重复多次,数量为count的绝对值 SPOP key [count] SRANDMEMBER (1)如果count不指定,那么返回集合中的一个随机元素(2)count同上 SRANDMEMBER key [count] SREM (1)移除集合key中的一个或多个member元素,不存在的member将被忽略 SREM key member [member ...] SUNION (1)返回一个集合的全部成员,该集合是所有给定集合的并集(2)不存在的key被视为空集 SUNION key [key ...] SUNIONSTORE (1)类似SUNION,但结果保存到destination集合而不是简单返回结果集(2)destination已存在,覆盖旧值(3)destination可以是key本身 SUNION destination key [key ...] 5.有序集合对象特点:1.有序集合可以是ziplist或者skiplist; 2.ziplist根据对象分值进行排序;较小的放在表头位置;
3.skiplist底层是通过dict和zset实现的;好处是降低了数据查询的复杂度; (skiplist结构如下:)
有序集合中,跳跃表和字典公用一份数据,但是同时各自有一份元素。
4.保存的元素数量小于128且保存的所有元素长度都小于64字节使用ziplist,否则使用 skiplist 编码。 常用指令命令 描述 用法 ZADD (1)将一个或多个member元素及其score值加入有序集key中(2)如果member已经是有序集的成员,那么更新member对应的score并重新插入member保证member在正确的位置上(3)score可以是整数值或双精度浮点数 ZADD key score member [[score member] [score member] ...] ZCARD (1)返回有序集key的元素个数 ZCARD key ZCOUNT (1) 返回有序集key中,score值>=min且=min且 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |