redis常用数据类型
这里只说常用的几种数据类型,redis是以k v键值对的形式存储数据,数据类型针对的都是v来说的。redis数据是以字节存储的
通过type命名可查看key的类型,object encoding查看key内部存储数据的类型
1、string
string又可以具体分为string,数值,bitmap三种
string
value是string类型,type 查看key 结果是 string,object ecoding 查看key 结果是 emdstr
SET key value [EX seconds] [PX milliseconds] [NX|XX]
SETRANGE key offset value
set k1 abcdefg
SETRANGE k1 3 x
get k1
"abcxefg"
SETRANGE k1 3 xxxx
get k1
"abcxxxx"
SETEX key seconds value
单位 s
PSETEX key milliseconds value
单位 ms
SETNX key value
GET key
APPEND key value
GETRANGE key start end
闭区间
GETSET key value
MSET key value [key value ...]
STRLEN key
数值
type查看key 结果是 string ,object ecoding 查看key 结果是 int
好处是可以有一些计算操作,避免一些错误
DECR key
DECRBY key decrement
INCR key
INCRBY key increment
INCRBYFLOAT key increment
bitmap
type查看key 结果是 string ,object ecoding 查看key 结果是 raw
SETBIT key offset value
GETBIT key offset
BITCOUNT key [start end]
start和end指的是位
BITPOS key bit [start] [end]
start和end指的是字节
BITOP operation destkey key [key ...]
operation: and(与) or(或) xor(异或) not(非)
setbit k1 0 1
setbit k1 9 1
这两条指令的意思是
setbit k1 0 1
setbit k1 3 1
setbit k1 5 1
setbit k1 7 1
setbit k2 1 1
setbit k2 3 1
setbit k2 6 1
BITOP and k3 k1 k2
2、list
可以重复、存入有顺序,像数据结构中的数组
BLPOP key [key ...] timeout
当多个客户端阻塞同一个key,结果会FIFO,类似单播
LLEN key
LINSERT key BEFORE|AFTER pivot value
LINDEX key index
BRPOPLPUSH source destination timeout
阻塞
BRPOP key [key ...] timeout
阻塞
LRANGE key start stop
LREM key count value
count > 0: 从头往尾移除值为 value 的元素。
count < 0: 从尾往头移除值为 value 的元素。
count = 0: 移除所有值为 value 的元素。
LSET key index value
LPOP key
LPUSH key value [value ...]
LPUSHX key value
key存在才插入
LTRIM key start stop
RPOP key
RPOPLPUSH source destination
RPUSH key value [value ...]
RPUSHX key value
key存在才插入
3、hash
是以k v键值对存储,像map数据结构
4、set
元素去重,无序
SADD key member [member ...]
SCARD key
统计数量
SISMEMBER key member
SMEMBERS key
SMOVE source destination member
SPOP key [count]
返回并移除元素,可指定count个数
SRANDMEMBER key [count]
返回但不移除元素,可指定count个数
SREM key member [member ...]
SDIFF key [key ...]
差集
SDIFFSTORE destination key [key ...]
SINTER key [key ...]
交集
SDIFF destination key [key ...]
SUNION key [key ...]
并集
SUNION destination key [key ...]
5、zset
默认按照score值从小到大排序
ZADD key [NX|XX] [CH] [INCR] score member [score member ...]
ZCARD key
统计数量
ZCOUNT key min max
统计指定score范围的数量
ZINCRBY key increment member
ZLEXCOUNT key min max
要求score相同,成员按字典序排列,返回范围成员类的数量,- +代表头和尾,min max是成员 必须以[开头
ZADD myzset 0 a 0 b 0 c 0 d 0 e
127.0.0.1:6379> ZLEXCOUNT myzset - +
(integer) 5
127.0.0.1:6379> ZLEXCOUNT myzset [b [d
(integer) 3
ZPOPMAX key [count]
zadd k1 1 a 2 b 3 c 4 d
(integer) 4
127.0.0.1:6379> ZPOPMAX k1 2
1) "d"
2) "4"
3) "c"
4) "3"
127.0.0.1:6379>
ZPOPMIN key [count]
ZRANGE key start stop [WITHSCORES]
zadd k1 1 a 2 b 3 c 4 d
(integer) 2
127.0.0.1:6379> ZRANGE k1 0 -1 withscores
1) "a"
2) "1"
3) "b"
4) "2"
5) "c"
6) "3"
7) "d"
8) "4"
127.0.0.1:6379>
ZRANGEBYLEX key min max [LIMIT offset count]
score必须相同 按字典序排序
ZREVRANGEBYLEX key max min [LIMIT offset count]
score必须相同 按字典序倒序
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
min 和 max代表score
zadd k1 1 a 2 b 3 c 4 d
127.0.0.1:6379> ZRANGEBYSCORE k1 1 3
1) "a"
2) "b"
3) "c"
127.0.0.1:6379>
ZRANK key member
返回排序集合的索引
zadd k1 1 a 2 b 3 c 4 d
127.0.0.1:6379> ZRANK k1 b
(integer) 1
127.0.0.1:6379>
ZREM key member [member ...]
删除元素
ZREMRANGEBYLEX key min max
删除名称按字典由低到高排序成员之间所有成员 min和max是成员 以[开头 ,- +代表头尾
ZREMRANGEBYRANK key start stop
根据排序后的索引删除
ZREMRANGEBYSCORE key min max
根据score删除
ZREVRANGE key start stop [WITHSCORES]
其中成员的位置按score值递减(从大到小)来排列
ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]
ZREVRANK key member
获得成员按score值递增(从小到大)排列的索引
ZSCORE key member
获取成员member的score值
ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight] [SUM|MIN|MAX]
ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight] [SUM|MIN|MAX]
交集
ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight] [SUM|MIN|MAX]
并集
keys和scan
使用keys匹配key会造成阻塞,生产中建议使用scan
SCAN cursor [MATCH pattern] [COUNT count]
SCAN 0 match * count 5
1) "17"
2) 1) "key:12"
2) "key:8"
3) "key:4"
4) "key:14"
5) "key:16"
17是返回的游标,当服务器向用户返回值为 0 的游标时, 表示迭代已结束