redis存储long类型 redis存储对象的数据类型

您所在的位置:网站首页 redis存储对象集合 redis存储long类型 redis存储对象的数据类型

redis存储long类型 redis存储对象的数据类型

2023-12-04 17:01| 来源: 网络整理| 查看: 265

参考书籍:《Redis设计与实现》,《Redis运维与开发》

1.对象Redis基于基础的数据结构创建了五种不同类型的对象系统,分别是: 字符串对象,列表对象,哈希对象,集合对象和有序集合对象; Redis的对象系统实现了基于引用计数技术的内存回收机制; Redis对象带有访问时间记录信息。 数据结构如下:typedef redisObject{ unsigned type:4;//类型 unsigned encoding:4;//编码 void *ptr;//只想底层实现数据结构的指针 } robj;

其中,type属性记录的是对象的数据类型。因为键值总是字符串,而对象的数据类型就是上面的5种对象系统;(每种类型的对象都至少使用了两种不同的编码)

 

redis存储long类型 redis存储对象的数据类型_redis存储long类型

redis底层的数据结构:

 

redis存储long类型 redis存储对象的数据类型_数据结构_02

不同的对象可以使用的编码类型(encoding):

 可以通过OBJECT ENCODING key查看对应不同编码类型:

redis存储long类型 redis存储对象的数据类型_数据结构_03

 

redis存储long类型 redis存储对象的数据类型_字符串_04

1.字符串对象特点:

  1.字符串对象的编码可以是int,row,或embstr;

  2.最大值不能超过512M;

对象中被其他对象嵌套的对象

数据存取相关指令:

 

redis存储long类型 redis存储对象的数据类型_redis存储long类型_05

计数相关指令

 

redis存储long类型 redis存储对象的数据类型_redis存储long类型_06

注意:

1.SETEX,SETNX,可用于分布式场景,当多个客户端同时执行操作,只能有一个客户端执行成功;

2.尽量使用MSET和MGET批量处理,但是要注意数量不是无节制的,当数量太多时,可能会造成redis阻塞或网络阻塞;

3.redis是单线程架构,自增自减不会额外消耗CPU;

redis存储long类型 redis存储对象的数据类型_数据结构_07

 

redis存储long类型 redis存储对象的数据类型_redis_08

2.列表对象(REDIS_LIST)特点:

1.列表对象可以是ziplist或linkedlist,linkedList使用的是双端链表作为底层实现,每个双端链表的节点都保存一个对象; 

2.当满足单个字符长度小于64,元素数量小于512的时候,使用ziplist,不能就使用linkedlist

3.可以两端进行插入或弹出;

redis存储long类型 redis存储对象的数据类型_redis存储long类型_09

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一样的意思)

常用指令

redis存储long类型 redis存储对象的数据类型_字符串_10

4.集合对象特点:

1.集合对象的编码可以是inset或hasetable;(键值对值为null的hasetable)

redis存储long类型 redis存储对象的数据类型_redis_11

redis存储long类型 redis存储对象的数据类型_字符串_12

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根据对象分值进行排序;较小的放在表头位置;

redis存储long类型 redis存储对象的数据类型_redis_13

 

3.skiplist底层是通过dict和zset实现的;好处是降低了数据查询的复杂度;

(skiplist结构如下:)

 

redis存储long类型 redis存储对象的数据类型_字符串_14

 

 

 有序集合中,跳跃表和字典公用一份数据,但是同时各自有一份元素。

 

redis存储long类型 redis存储对象的数据类型_数据结构_15

 

 

 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