Redis常用的类型一
redis安装请移步至 01.linux下安装redis并做成服务
常用类型有字符串(strings),散列(hashes),列表(lists),集合(sets),有序集合(sorted sets)与范围查询,bitmaps。
String
String这个类型中包括字符类型、数值类型、bitmaps。
字符类型
因为Redis是二进制安全的,值取字节流,在字符类型这还是有点特殊的。先连接redis。
[root@basic ~]# redis-cli
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> set k2 中文
OK
127.0.0.1:6379> type k1
string
127.0.0.1:6379> type k2
string
127.0.0.1:6379> OBJECT encoding k1
"embstr"
127.0.0.1:6379> OBJECT encoding k2
"embstr"
127.0.0.1:6379>
在这里使用type和OBJECT encoding查看value的类型都为string。
将SecureCRT的字符集由UTF-8改成GBK。
退出客户端再次连接
[root@basic ~]# redis-cli
127.0.0.1:6379> OBJECT encoding k1
"embstr"
127.0.0.1:6379> OBJECT encoding k2
"embstr"
127.0.0.1:6379> APPEND k2 测试
(integer) 10
127.0.0.1:6379> OBJECT encoding k2
"raw"
127.0.0.1:6379> get k2
"\xe4\xb8\xad\xe6\x96\x87\xb2\xe2\xca\xd4"
127.0.0.1:6379>
由于两次操作字符集不同,OBJECT encoding 的类型变成了raw,get的值也看不到存入的值了。
退出客户端,以raw的形式连接
[root@basic ~]# redis-cli --raw
127.0.0.1:6379> get k2
涓枃测试
127.0.0.1:6379>
因为“测试”是以GBK编码的形式append到k2中的,所以在–raw模式下,Redis会尽力的将value以当前的字符集格式解码。
我们在退出,将SecureCRT的字符集由GBK改回UTF-8,再以默认的方式连接。
[root@basic ~]# redis-cli
127.0.0.1:6379> get k2
"\xe4\xb8\xad\xe6\x96\x87\xb2\xe2\xca\xd4"
127.0.0.1:6379>
由此可见,redis与外界交互的时候只取字节流,防止编码不一致,编码不影响数据的存储,客户端和服务端需要约定好编码规则即可。
数值类型
数值类型API操作成功后,会在内部将value变成int类型,方便下次计算,这里也用到了类型校验,如果类型不匹配,会直接报错,不会继续操作。
127.0.0.1:6379> set k1 1
OK
127.0.0.1:6379> APPEND k1 3
(integer) 2
127.0.0.1:6379> get k1
"13"
127.0.0.1:6379> INCR k1
(integer) 14
127.0.0.1:6379> APPEND k1 3
(integer) 3
127.0.0.1:6379> get k1
"143"
127.0.0.1:6379> type k1
string
127.0.0.1:6379> OBJECT encoding k1
"raw"
127.0.0.1:6379> incr k1
(integer) 144
127.0.0.1:6379> type k1
string
127.0.0.1:6379> OBJECT encoding k1
"int"
127.0.0.1:6379>
常用api包括,自增(INCR),自减(DECR)等操作。
bitmaps
setbit可以直接操作二进制码,效率非常高。
从左往右数第1个位置设置成1。
get key的时候回直接返回ACSII码对应的值。
STRLEN key的时候,会返回字节长度,不是位数,8位为一个长度。
127.0.0.1:6379> setbit k1 1 1
(integer) 0
127.0.0.1:6379> get k1
"@"
127.0.0.1:6379> setbit k1 7 1
(integer) 0
127.0.0.1:6379> get k1
"A"
127.0.0.1:6379> STRLEN k1
(integer) 1
127.0.0.1:6379>
BITPOS根据范围查找第一个bit所在的位置,返回的位置是全量的bit的位置,范围是字节位置的范围。
127.0.0.1:6379> BITPOS k1 1 0 1
(integer) 1
127.0.0.1:6379>
bitcount根据范围只计算1查询次数,范围也是字节范围。
127.0.0.1:6379> BITCOUNT k1 0 1
(integer) 2
127.0.0.1:6379> BITCOUNT k1 0 0
(integer) 2
127.0.0.1:6379>
bitop可以操作二进制的或与非计算
&
bitop and andkey k1 k2
|
bitop or orkey k1 k2
!
bitop not notkey k1 k2
andkey、orkey、notkey代表结果存入的key。