Redis数据类型
字符串类型:
字符串类型是Redis最基础的数据类型,能够存储任何形式的字符串,包括二进制数据,JSON化的对象等等。
赋值与取值
set key value
get key
127.0.0.1:6380[4]> set foo hello OK 127.0.0.1:6380[4]> get foo "hello"
递增数字
INCR key
当存储的字符串是整数的形式时,可以用INCR命令,返回一个整数类型的值,值为当前value的递增,如果value当前不是整数形式时,就会报错,当要操作的key不存在时,默认value为0,所以第一次递增的结果是1
127.0.0.1:6380[4]> get foo "hello" 127.0.0.1:6380[4]> incr number (integer) 1
增加指定的整数
INCR命令返回当前value的递增,即为value+=1,而INCRBY命令可以指定每次增加的数值,如:
127.0.0.1:6380[4]> INCRBY bar 3 (integer) 3 127.0.0.1:6380[4]> INCRBY bar 5 (integer) 8
减少指定的整数
与INCR以及INCRBY相反,让value减少,具体用法如下:
127.0.0.1:6380[4]> decrby bar 5 (integer) 3 127.0.0.1:6380[4]> decr bar (integer) 2
增加指定浮点数
INCRBYFLOAT命令,类似之前两个命令,区别是这个命令可以递增一个双精度的浮点数
127.0.0.1:6380[4]> INCRBYFLOAT tag 4.5 "4.5"
向尾部追加值
127.0.0.1:6380[4]> set key hello OK 127.0.0.1:6380[4]> APPEND key " world" (integer) 11
append向key-value的末尾追加value,如果key不存在,则将该key的value设置为value,此时与set相同,若存在,则返回追加后字符串的总长度
获取字符串长度
127.0.0.1:6380[4]> strlen key (integer) 11
返回value的长度,不存在则返回0
同时设置/获得多个键值
127.0.0.1:6380[4]> mset k1 v1 k2 v2 k3 v3 OK 127.0.0.1:6380[4]> mget k1 k2 k3 1) "v1" 2) "v2" 3) "v3"
散列类型:
散列类型即hash,也是一种字典结构,存储了字段以及字段值的映射,但在Redis中,字段值只能是字符串,不能是其他类型,也就是说,散列类型不支持嵌套其他的数据类型
散列类型适合存储对象,用对象的类别和ID构成key名,用字段代表对象的属性,用字段的值存储具体的属性值
赋值与取值
HASH key field value
HGET key field
同时设置多个字段为
HMSET key field value [field value...]
HMGET key field [field...]
127.0.0.1:6380[4]> hset car price 233 (integer) 1 127.0.0.1:6380[4]> hset car name benz (integer) 1 127.0.0.1:6380[4]> hget car name "benz" 127.0.0.1:6380[4]> hmset car2 price 666 name 430 OK 127.0.0.1:6380[4]> hmget car2 price name 1) "666" 2) "430"
获取key中所有字段以及字段值
HGETALL key
127.0.0.1:6380[4]> hgetall car2 1) "price" 2) "666" 3) "name" 4) "430"
此外,HSET命令不区分插入与更新操作,当执行插入操作时,相当于当前字段不存在时,HSET命令返回1,当执行更新操作时,HSET命令返回0
判断字段是否存在
127.0.0.1:6380[4]> HEXISTS car2 data (integer) 0 127.0.0.1:6380[4]> HSET car2 data 123 (integer) 1 127.0.0.1:6380[4]> HEXISTS car2 data (integer) 1
如果存在,则返回1,否则返回0
增加数字
127.0.0.1:6380[4]> HINCRBY car2 data 233 (integer) 356
与字符串类型相似,但散列类型没有HINCR命令,可以通过HINCRBY key field 1来完成
删除字段
127.0.0.1:6380[4]> HDEL car2 data (integer) 1
只获取字段名或者字段值
127.0.0.1:6380[4]> HKEYS car2 1) "price" 2) "name" 127.0.0.1:6380[4]> HVALS car2 1) "666" 2) "430"
获得字段数量
127.0.0.1:6380[4]> HLEN car2 (integer) 2
此时只有两个字段,price与name,因此返回2
列表类型:
列表类型可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者获得列表的某一个分片
向列表两端添加元素
127.0.0.1:6380[4]> LPUSH num 1 (integer) 1 127.0.0.1:6380[4]> LPUSH num 2 3 (integer) 3 127.0.0.1:6380[4]> RPUSH num 3 (integer) 4
其中LPUSH是在列表的左端添加,RPUSH为在列表右端添加,比如说本来是一个空列表,现在我们在左端添加一个1,然后在左端添加2和3,此时列表内的元素为3 2 1,再往右端添加一个3,此时列表为3 2 1 3
从列表两端弹出元素
弹出即pop,与push操作相反
127.0.0.1:6380[4]> Lpop num "3" 127.0.0.1:6380[4]> Rpop num "3" 127.0.0.1:6380[4]> Rpop num "1"
获取列表中元素的个数
127.0.0.1:6380[4]> LLEN num (integer) 1
获得列表片段
与python中的分片类似,返回索引从第一个参数到第二个参数中的所有元素,但与python不同的是,会包含最右端的元素,而在Js跟python中,是不包含最右端的元素
127.0.0.1:6380[4]> LPUSH num 2 3 1 3 2 (integer) 6 127.0.0.1:6380[4]> LRANGE num 0 -1 1) "2" 2) "3" 3) "1" 4) "3" 5) "2" 6) "2"
其中-1表示右端第一个,0是列表的第一个索引
删除列表指定值
LREM key count value
其中第一个参数count表示前count个元素,如果是-1则为从右端数前一个,-2则为从右端数前两个,value指定要删的值
127.0.0.1:6380[4]> LREM num -1 2 (integer) 1 127.0.0.1:6380[4]> LRANGE num 0 -1 1) "2" 2) "3" 3) "1" 4) "3" 5) "2"
获得/设置指定索引的值
127.0.0.1:6380[4]> LINDEX num 0 "2" 127.0.0.1:6380[4]> LINDEX num 1 "3" 127.0.0.1:6380[4]> LSET num 0 5 OK 127.0.0.1:6380[4]> LINDEX num 0 "5"
只保留列表指定片段,删除其他所有元素
用法与LRANGE类似
127.0.0.1:6380[4]> LRANGE num 0 -1 1) "5" 2) "3" 3) "1" 4) "3" 5) "2" 127.0.0.1:6380[4]> LTRIM num 1 2 OK 127.0.0.1:6380[4]> LRANGE num 0 -1 1) "3" 2) "1"
向列表插入元素
after为向后插,before为向前插
127.0.0.1:6380[4]> LINSERT num after 3 2 (integer) 3 127.0.0.1:6380[4]> LRANGE num 0 -1 1) "3" 2) "2" 3) "1" 127.0.0.1:6380[4]> LINSERT num before 3 5 (integer) 4 127.0.0.1:6380[4]> LRANGE num 0 -1 1) "5" 2) "3" 3) "2" 4) "1"
将元素从一个列表移到另一个列表
实际上就是从需要移出的列表里RPOP一个值,然后LPUSH到移入的列表中
127.0.0.1:6380[4]> RPOPLPUSH num test "1" 127.0.0.1:6380[4]> LRANGE test 0 -1 1) "1"
集合类型:
集合与列表类似,区别在于,集合中的元素是唯一的,而且列表是有序的,集合是无序的
增加/删除元素
返回成功加入的元素数量
127.0.0.1:6380[4]> sadd st a (integer) 1 127.0.0.1:6380[4]> sadd st a b c d (integer) 3
127.0.0.1:6380[4]> srem st a (integer) 1
获得集合中所有元素
127.0.0.1:6380[4]> SMEMBERS st 1) "d" 2) "c" 3) "b"
判断元素是否在集合中
是则返回1,否则返回0
127.0.0.1:6380[4]> SISMEMBER st d (integer) 1 127.0.0.1:6380[4]> SISMEMBER st x (integer) 0
集合间运算之求差
127.0.0.1:6380[4]> sadd seta 1 2 3 (integer) 3 127.0.0.1:6380[4]> sadd setb 3 4 5 (integer) 3 127.0.0.1:6380[4]> sdiff seta setb 1) "1" 2) "2" 127.0.0.1:6380[4]> sdiff setb seta 1) "4" 2) "5"
集合间运算之求交集
127.0.0.1:6380[4]> SINTER seta setb 1) "3"
集合间运算之求并
127.0.0.1:6380[4]> SUNION seta setb 1) "1" 2) "2" 3) "3" 4) "4" 5) "5"
获得集合中元素的个数
127.0.0.1:6380[4]> SCARD seta (integer) 3
进行集合间运算并存入一个key中
SINTERSTORE与SDIFFSTORE同理
127.0.0.1:6380[4]> SUNIONSTORE setc seta setb (integer) 5 127.0.0.1:6380[4]> SMEMBERS setc 1) "1" 2) "2" 3) "3" 4) "4" 5) "5"
从集合中弹出一个元素
返回弹出的值,但由于集合是无序的因此随机从两端弹出一个
127.0.0.1:6380[4]> SPOP setc "5" 127.0.0.1:6380[4]> SPOP setc "1" 127.0.0.1:6380[4]> SPOP setc "2" 127.0.0.1:6380[4]> SPOP setc "4"
有序集合类型:
有序集合算是综合了列表的有序性跟集合的唯一性,是Redis中最高级的数据类型,有序集合在集合类型的基础上对每一个元素关联了一个分数,这使得在集合类型的基础上,可以根据分数获得排名前N个元素,和指定分数范围的元素
增加元素
ZADD key score member [socre membter...]
分数不仅可以是整数,也可以是浮点数
127.0.0.1:6380[4]> ZADD scoreb 87 By 23 ttt 99 Tim (integer) 3 127.0.0.1:6380[4]> ZADD scoreb 55 cat (integer) 1
获得元素的分数
127.0.0.1:6380[4]> ZSCORE scoreb Tim "99"
获得排名在某个范围的元素列表
这里指的是排名不是分数,用法与LRANGE差不多
注意:此时是按照分数从小到大排
127.0.0.1:6380[4]> ZRANGE scoreb 0 -1 1) "ttt" 2) "cat" 3) "By" 4) "Tim"
可以通过withscores参数附带上分数信息
127.0.0.1:6380[4]> ZRANGE scoreb 0 -1 withscores 1) "ttt" 2) "23" 3) "cat" 4) "55" 5) "By" 6) "87" 7) "Tim" 8) "99"
获得指定分数范围的元素
127.0.0.1:6380[4]> ZRANGEBYSCORE scoreb 20 85 1) "ttt" 2) "cat"
增加某个元素的分数
127.0.0.1:6380[4]> ZINCRBY scoreb 424 ttt "447" 127.0.0.1:6380[4]> ZRANGE scoreb 0 -1 withscores 1) "cat" 2) "55" 3) "By" 4) "87" 5) "Tim" 6) "99" 7) "ttt" 8) "447"
获得集合中元素数量
127.0.0.1:6380[4]> ZCARD scoreb (integer) 4
获得指定分数范围内的元素个数
127.0.0.1:6380[4]> ZCOUNT scoreb 20 100 (integer) 3
删除一个或多个元素
127.0.0.1:6380[4]> ZREM scoreb By cat (integer) 2
按照排名范围删除元素
127.0.0.1:6380[4]> Zadd zst 88 by 82 bz 12 bx (integer) 3 127.0.0.1:6380[4]> ZRANGE zst 0 -1 1) "bx" 2) "bz" 3) "by" 127.0.0.1:6380[4]> ZREMRANGEBYRANK zst 0 1 (integer) 2 127.0.0.1:6380[4]> ZRANGE zst 0 -1 1) "by"
按照分数范围删除元素
127.0.0.1:6380[4]> zadd stc 1 a 2 b 3 c 4 d 50 z (integer) 5 127.0.0.1:6380[4]> ZRANGE stc 0 -1 1) "a" 2) "b" 3) "c" 4) "d" 5) "z" 127.0.0.1:6380[4]> ZREMRANGEBYSCORE stc 0 10 (integer) 4 127.0.0.1:6380[4]> ZRANGE stc 0 -1 1) "z"
获得元素排名
ZRANK为从小到大排序的排名,ZREVRANK则相反
127.0.0.1:6380[4]> zadd stq 1 a 2 b 3 c 4 d 50 z (integer) 5 127.0.0.1:6380[4]> zrank stq a (integer) 0 127.0.0.1:6380[4]> ZREVRank stq a (integer) 4
计算有序集合的交集
ZINTERSTORE destination numkeys key[key...] [WEIGHTS weight[weight...]] [AGGREGATE SUM|MIN|MAX]
destination是存储结果,AGGREGATE默认为sum,意思是destination每个元素的分数是参与计算的两个集合中相对应的元素的和,
如果AGGREGATE显示指定为min时,则为相对应的元素的分数的最小值,max则为最大值
127.0.0.1:6380[3]> zadd st1 1 a 2 b (integer) 2 127.0.0.1:6380[3]> zadd st2 10 a 20 b (integer) 2 127.0.0.1:6380[3]> ZINTERSTORE res 2 st1 st2 (integer) 2 127.0.0.1:6380[3]> zrange res 0 -1 withscores 1) "a" 2) "11" 3) "b" 4) "22"
浙公网安备 33010602011771号