1.key里面有个基本属性type,描述的是value的类型(即数据类型)官网:https://redis.io/commands/type/命令:type k1 //查看指定key(比如:k1)的value类型
2.查看Redis某个key的内部编码,可以利用Redis命令OBJECT ENCODING key,返回存储在<key>的Redis工具的内部编码。官网:https://redis.io/commands/object-encoding/命令:help objectobject helpobject encoding k1FLUSHALL // 移除所有key
Redis源码encoding取值有如下几种:#define OBJ_ENCODING_RAW 0 / Raw representation /#define OBJ_ENCODING_INT 1 / Encoded as integer /#define OBJ_ENCODING_HT 2 / Encoded as hash table /#define OBJ_ENCODING_ZIPMAP 3 / Encoded as zipmap /#define OBJ_ENCODING_LINKEDLIST 4 / No longer used: old list encoding. /#define OBJ_ENCODING_ZIPLIST 5 / Encoded as ziplist /#define OBJ_ENCODING_INTSET 6 / Encoded as intset /#define OBJ_ENCODING_SKIPLIST 7 / Encoded as skiplist /#define OBJ_ENCODING_EMBSTR 8 / Embedded sds string encoding /#define OBJ_ENCODING_QUICKLIST 9 / Encoded as linked list of ziplists /
数据类型type

编码办法encoding(工具所利用的底层数据构造)
Strings (字符串)
int、embstr、raw
Hashes (哈希表)
ziplist、hashtable
Lists (列表)
ziplist、linkedlist、quicklist
Sets (凑集)
intset、hashtable
Sorted Sets (有序凑集)
ziplist、skiplist
字符串
字符串是Redis中最基本的数据类型,常日用于存储文本或二进制数据。Redis支持三种编码办法:
int:当字符串可以表示为整数时,Redis会将其转换为整数,并采取int编码办法存储。int编码办法的优点是存储空间小,操作效率高。缺陷是只能存储整数,不支持字符串操作。embstr:初始写入长度小于44字节(默认)的字符串,采取此编码办法存储,可以减少内存占用。由于初始设置保存时分配在与工具本身相同的内存中。raw:保存长度大于44字节的字符串,当一个字符串比较永劫,采取此编码办法存储。列表
列表是一系列有序的字符串凑集,可以添加、修正和删除元素。Redis支持三种编码办法:
ziplist:在Redis3.2版本之前,当List列表中每个字符串的长度都小于64字节并且List列表中元素数量小于512个时,List工具利用ziplist编码,其他情形利用linkedlist编码。ziplist是一种紧凑的、压缩的列表构造,可以节省内存。适用于小型列表。linkedlist:linkedlist是一种链表构造,支持任意大小的列表。但其内存占用会随着列表长度的增加而增加。quicklist:Redis 3.2版本引入,quicklist是一种由多个ziplist组成的列表构造,既能担保性能,又能节省内存。适用于大型列表。凑集
凑集是一系列无序的字符串凑集,支持添加、删除和查询元素。Redis支持两种编码办法:
intset:当凑集中的元素都是整数时,Redis会采取intset编码办法存储。intset编码办法的优点是存储空间小,操作效率高。hashtable:当凑集中的元素包含字符串时,Redis会采取hashtable编码办法存储。hashtable编码办法的优点是可以存储任意类型的元素,支持字符串操作。缺陷是存储空间相对较大,操作效率相对较低。有序凑集
有序凑集是一系列无序的字符串凑集,每个元素关联一个分数,可以根据分数排序。Redis支持两种编码办法:
ziplist:保存的元素少于128个并且所有元素大小都小于64字节利用ziplist编码,ziplist是一种紧凑的、压缩的列表构造,适用于小型有序凑集。skiplist:skiplist是一种跳跃表构造,支持快速查询和排序。适用于大型有序凑集。哈希表
哈希表是一系列键值对凑集,每个键关联一个值。Redis支持两种编码办法:
ziplist:哈希工具保存的所有键值的字符串长度小于64字节并且键值对数量小于512个,Redis会采取ziplist编码办法存储。ziplist编码办法的优点是存储空间小,操作效率高。缺陷是不支持快速的键查找操作。hashtable:除上述条件之外,Redis会采取hashtable编码办法存储。hashtable编码办法的优点是支持快速的键查找操作。缺陷是存储空间相对较大,操作效率相对较低。二进制安全redis是二进制安全的,redis的数据存储和读取是通过字节流的形式。在多措辞中的环境下,更安全。同时也哀求了写入和读取的编码解码办法要同等。
①:由于在不同的措辞中对int的宽度的理解是不同的,以是一样平常来讲跨措辞都比较喜好实用json,xml这种文本的传输,而不该用序列化,由于随意马虎发生数据的溢出截断。 由于这种情形,redis的二进制安全便是这种意思,redis只取字节流而不取字符流,由于编码、措辞的不同造成的数据截断等情形不会发生,给什么存什么,不会发生字节流转换字符流涌现溢出阶段,以是读取的时候客户真个编码和redis的编码同等就不会乱码,但内容实际上不会发生改变,即存的时候的编码风格只不过看的时候由于编码不一致而乱码,担保了数据存储的安全。②:key有type和encoding 两个过程: 1)前辈行type:value的过程,如果类型不对报错,防止程序中进行打算再涌现字符串和数值相加的非常2)再进行endcoding,防止后续字节流转换字符流打算问题,提速 当设置了一个key的value为int时,就会标记这个value为int,下次调用incr等打算时就直接判断encoding,就不须要转码,而是判断类型如果不得当打算就报错了,直接进入打算,这也便是redis快的一个缘故原由,跳过了一个转码过程③:以是在多人客户端连接一个redis时,客户端之间要沟通好编码解码
--raw编码集格式化,利用原始格式,会选择当前的客户端编码进行解码。
bitmap
linux下操作命令:
man ascii // linux命令,查看ascii码help @stringhelp setbitsetbit key offset valuehelp bitposbitpos key bit [start] [end] // 查找第一个bit(0或1)所在的位索引位置,start、end表示字节索引位置help bitcountBITCOUNT key [start end] // 统计位是1的个数help bitopBITOP operation destkey key [key ...] // 举例 bitop and newKey k1 k2表示k1和k2的value值按位与操作,写入newKey键里。