之前已经基本介绍过Redis的基本使用,本文继续基于《Redis起步安装及基本命令--JAVA(系列文章一)》继续编写,主要介绍redis的常用命令。
字符串类型
字符串类型基本上和编程语言的字符串类型相差无几,但是Redis中的字符串类型可以存储 字符串、整数、浮点数。我们可以为redis的字符串类型进行自增或者自减(整数或者浮点数),redis中整数的取值范围为CPU的位数的有符号整形(64位CPU 取值范围为有符号64位),浮点数为double类型的双精度浮点数,Redis能够明确地区分字符串和整数和浮点数是一大优势。
INCR --- INCR key-name 将KEY存储的值+1
DECR --- DECR key-name 将KEY存储的值-1
INCRBY --- INCRBY key-name value 将KEY存储的值加上value
DECRBY --- DECRBY key-name value 将KEY存储的值减去value
INCRBYFLOAT ---- INCRBYFLOAT key-name 不用多说这个是float类型的自增 redis2.6以上的命令
如果值不存在自增会在0的基础上自增,如果不能自增的类型(字符串)直接报错。
127.0.0.1:6379> SET A_KEY 10
OK
127.0.0.1:6379> INCR A_KEY
(integer) 11
127.0.0.1:6379> INCRBY A_KEY 30
(integer) 41
127.0.0.1:6379> DECR A_KEY
(integer) 40
127.0.0.1:6379> DECRBY A_KEY 10
(integer) 30
127.0.0.1:6379> INCRBYFLOAT A_KEY 2.2
"32.2"
redis提供子串和二进制的命令
APPEND --- APPEND key-name value 将值value追加到指定的KEY的值上。
GETRANGE ---- GETRANGE key-name start end 获得KEY中的指定范围的子字符串 包含start 和 end
SETRANGE ---- SETRANGE key-name offset value 将从指定的offset偏移位置开始替换为value的值
SETBIT --- SETBIT key-name offset value 将字符串看做二进制位串,并将位串偏移量为offset的中设置为value
BITCOUNT ---- BITCOUNT key-name [start end] start和end为可选项,统计KEY中二进制位1的数量。
BITOP ----- BITOP operation dest-key key-name 对二进制位字符串进行操作(AND[并] OR[或] XOR[异或] NOT[非]) 将结果保存在dest-key中
127.0.0.1:6379> SET STRING_kEY ABC
OK
127.0.0.1:6379> APPEND STRING_kEY 123
(integer) 6
127.0.0.1:6379> GET STRING_kEY
"ABC123"
127.0.0.1:6379> GETRANGE STRING_kEY 2 5
"C123"
127.0.0.1:6379> SETRANGE STRING_kEY 5 EEEE
(integer) 9
127.0.0.1:6379> GET STRING_kEY
"ABC12EEEE"
列表类型
之前的文章都说过部分的命令了,这里贴出一下
Redis 中的列表【LIST】
RPUSH 向列表右边放入一个值
LPUSH 向列表左边放入一个值
LPOP 在列表左边弹出一个值
RPOP 在列表右边弹出一个值
LINDEX 获得列表中指定下标的值
LRANGE 获得列表中一定范围的值
127.0.0.1:6379> RPUSH MY_LIST_KEY VALUE_1 VALUE_2 VALUE_3
(integer) 3
127.0.0.1:6379> LRANGE MY_LIST_KEY 0 -1 注意开启值为0 结束值为-1 可以范围列表中所有数据
1) "VALUE_1"
2) "VALUE_2"
3) "VALUE_3"
127.0.0.1:6379> LPUSH MY_LIST_KEY VALUE_-1
(integer) 4
127.0.0.1:6379> LRANGE MY_LIST_KEY 0 4
1) "VALUE_-1"
2) "VALUE_1"
3) "VALUE_2"
4) "VALUE_3"
127.0.0.1:6379> LPOP MY_LIST_KEY
"VALUE_-1"
127.0.0.1:6379> RPOP MY_LIST_KEY
"VALUE_3"
127.0.0.1:6379> LRANGE MY_LIST_KEY 0 -1
1) "VALUE_1"
2) "VALUE_2"
列表类型还有如下这些常用命令
LTRIM --- LTRIM key-name start end 对列表进行修剪 保留start到end的元素 (start和end也会保留)
127.0.0.1:6379> RPUSH TEST_LIST A B C D
(integer) 4
127.0.0.1:6379> LTRIM TEST_LIST 2 3
OK
127.0.0.1:6379> LRANGE TEST_LIST 0 -1
1) "C"
2) "D"
阻塞列表操作,用于实现消息队列功能
BLPOP --- BLPOP key-name [key-name ....] timeout 从第一个非空列表中弹出位于最左边的元素,或者阻塞等待可弹出元素,timeout代表等待超时
BRPOP ---- BRPOP key-name [key-name ...] timeout 同上不过是弹出最右边的元素
RPOPLPUSH ---- RPOPLPUSH source-key dest-key --- 从source-key 列表中最右边弹出一个元素 然后将这个元素push到dest-key 的最左边
BRPOPLPUSH ---- BRPOPLPUSH source-key dest-key timeout 同上,但是这个是阻塞的命令
127.0.0.1:6379> DEL TEST_LIST
(integer) 1
127.0.0.1:6379> RPUSH TEST_LIST A B C D E F G
(integer) 7
127.0.0.1:6379> RPOPLPUSH TEST_LIST DEST_LIST
"G"
127.0.0.1:6379> LRANGE DEST_LIST 0 -1
1) "G"
集合类型
之前的文章都说过部分的命令了,这里贴出一下
SADD 为指定的SET添加元素
SMEMBERS 返回指定SET的所有元素
SISMEMBER 检查给定元素是否存在于集合当中。
SREM 如果给定的元素存在于集合中,那么移除这些元素。
127.0.0.1:6379> SADD MY_SET A1 A2 A3 A4 A5
(integer) 5
127.0.0.1:6379> SMEMBERS MY_SET
1) "A3"
2) "A4"
3) "A2"
4) "A1"
5) "A5"
127.0.0.1:6379> SISMEMBER MY_SET A3
(integer) 1
127.0.0.1:6379> SISMEMBER MY_SET A8
(integer) 0
127.0.0.1:6379> SREM MY_SET A1
(integer) 1
127.0.0.1:6379> SMEMBERS MY_SET
1) "A4"
2) "A3"
3) "A2"
4) "A5"
127.0.0.1:6379> SREM MY_SET A8
(integer) 0
SREM --- SREM key-name item [item ...] 从集合中移除item
SCARD --- SCARD key-name --- 返回集合的元素数量
SRANDMEMBER ---- SRANDMEMBER key-name [count] 从集合中随机获得一个或者多个元素,当count为正数时 返回的元素不重复,当count为负数时 返回的随机元素有可能会重复
SPOP ---- SPOP key-name 随机弹出一个元素
SMOVE --- SMOVE source-key dest-key item 将source-key中的item元素移动到 dest-key集合当中
127.0.0.1:6379> SADD TEST_SET A B C D E
(integer) 5
127.0.0.1:6379> SCARD TEST_SET
(integer) 5
127.0.0.1:6379> SRANDMEMBER TEST_SET 3
1) "A"
2) "B"
3) "D"
127.0.0.1:6379> SRANDMEMBER TEST_SET -3
1) "E"
2) "C"
3) "C"
127.0.0.1:6379> SPOP TEST_SET
"C"
127.0.0.1:6379> SMOVE TEST_SET DEST_SET A
(integer) 1
127.0.0.1:6379> SMEMBERS TEST_SET
1) "B"
2) "D"
3) "E"
127.0.0.1:6379> SMEMBERS DEST_SET
1) "A"
SDIFF --- SDIFF key-name [key-name ...] 返回那些存在于第一个集合、但不存在于其他的集合当中的元素(数学上的差集运算)
SDIFFSTORE --- SDIFFSTORE dest-key key-name [key-name ...] 将那些存在于第一个集合、但不存在于其他的集合当中的元素 存储在dest-key(数学上的差集运算)
SINTER ---- SINTER key-name [key-name ...] 返回存在所有集合中的元素(获得所有集合的并集)
SINTERSTORE ---- SINTERSTORE dest-key key-name [key-name ...] 将存在所有集合中的元素保存到dest-key中(保存所有集合的并集到dest-key集合中)
SUNION --- SUNION key-name [key-name ...] 返回所有集合的并集(至少在一个集合中出现一次的元素)
SUNIONSTORE ---- SUNIONSTORE dest-key key-name [key-name ...] 将所有集合的并集元素存储在dest-key(至少在一个集合中出现一次的元素)
127.0.0.1:6379> SADD A_SET A B C D 1 2 3
(integer) 7
127.0.0.1:6379> SADD B_SET C D E F G 3 4 5 6
(integer) 9
127.0.0.1:6379> SDIFF A_SET B_SET
1) "B"
2) "2"
3) "1"
4) "A"
127.0.0.1:6379> SDIFFSTORE DEST_SET A_SET B_SET
(integer) 4
127.0.0.1:6379> SINTER A_SET B_SET
1) "D"
2) "3"
3) "C"
127.0.0.1:6379> SINTERSTORE DEST_SET A_SET B_SET
(integer) 3
127.0.0.1:6379> SUNION A_SET B_SET
1) "B"
2) "6"
3) "G"
4) "C"
5) "D"
6) "E"
7) "1"
8) "A"
9) "3"
10) "4"
11) "2"
12) "5"
13) "F"
127.0.0.1:6379> SUNIONSTORE DEST_SET A_SET B_SET
(integer) 13
散列类型
之前的文章都说过部分的命令了,这里贴出一下
HSET 在散列里面添加键值对。
HGET 获得指定HASH中的,指定的KEY的数据。
HGETALL 获得HASH中所有键值对
HDEL 删除指定HASH的某一键值对
127.0.0.1:6379> HSET MY_MAP SUB_KEY_1 SUB_VALUE_ABC
(integer) 1
127.0.0.1:6379> HSET MY_MAP SUB_KEY_2 SUB_VALUE_DDD
(integer) 1
127.0.0.1:6379> HGET MY_MAP SUB_KEY_2
"SUB_VALUE_DDD"
127.0.0.1:6379> HGETALL MY_MAP
1) "SUB_KEY_1"
2) "SUB_VALUE_ABC"
3) "SUB_KEY_2"
4) "SUB_VALUE_DDD"
127.0.0.1:6379> HDEL MY_MAP SUB_KEY_1
(integer) 1
127.0.0.1:6379> HGETALL MY_MAP
1) "SUB_KEY_2"
2) "SUB_VALUE_DDD"
127.0.0.1:6379>
散列类型还有如下这些常用命令
HLEN ---- HLEN key-name 返回散列的键值对数量
HEXISTS ---- HEXISTS key-name key 检查指定的key是否存在在散列当中
HKEYS --- HKEYS key-name 返回散列中所有的KEY
HVALS ---- HVALS key-name 返回散列中所有的VALUE
HINCRBY --- HINCRBY key-name key increment 为散列中指定的KEY的VALUE加上increment的值
HINCRBYFLOAT --- HINCRBYFLOAT key-name key increment 为散列中指定的KEY的VALUE加上increment的值(加上的是浮点数)
127.0.0.1:6379> HSET TEST_HASH KEYA VALUEA
(integer) 1
127.0.0.1:6379> HSET TEST_HASH KEYB VALUEB
(integer) 1
127.0.0.1:6379> HSET TEST_HASH KEYC VALUEC
(integer) 1
127.0.0.1:6379> HLEN TEST_HASH
(integer) 3
127.0.0.1:6379> HKEYS TEST_HASH
1) "KEYA"
2) "KEYB"
3) "KEYC"
127.0.0.1:6379> HVALS TEST_HASH
1) "VALUEA"
2) "VALUEB"
3) "VALUEC"
127.0.0.1:6379> HEXISTS TEST_HASH KEYB
(integer) 1
127.0.0.1:6379> HSET TEST_HASH KEYD 33
(integer) 1
127.0.0.1:6379> HINCRBY TEST_HASH KEYD 3
(integer) 36
127.0.0.1:6379> HINCRBYFLOAT TEST_HASH KEYD 5.3
"41.3"
有序集合类型
之前的文章都说过部分的命令了,这里贴出一下
ZADD 将带有分值的member(成员)添加到指定的有序集合中。
ZRANGE 根据元素在有序排序中所处的位置,从有序集合中获得一组数据。
ZRANGEBYSCORE 获得一组给定分值范围内的元素。
ZREM 从有序集合当中移除某个成员
127.0.0.1:6379> ZADD TEST_ZSET 123 KEYA 30 KEYB 20 KEYC
(integer) 3
127.0.0.1:6379> ZRANGE TEST_ZSET 0 -1
1) "KEYC"
2) "KEYB"
3) "KEYA"
127.0.0.1:6379> ZRANGEBYSCORE TEST_ZSET 30 200
1) "KEYB"
2) "KEYA"
127.0.0.1:6379> ZREM TEST_ZSET KEYC
(integer) 1
有序集合类型还有如下这些常用命令
ZCARD ---- ZCARD key-name 返回有序集合包含的成员数量
ZINCRBY ---- ZINCRBY key-name increment member 在有序集合中的某一个成员的分值上加上increment
ZCOUNT ----- ZCOUNT key-name min max 返回有序集合中分值 在 min 和 max 之间的元素数量
ZRANK ----- ZRANK key-name member 返回有序集合中指定成员的排名
ZSCORE ---- ZSCORE key-name member 返回成员member的分值
127.0.0.1:6379> ZADD TEST_ZSET 98 KEYC
(integer) 1
127.0.0.1:6379> ZCARD TEST_ZSET
(integer) 3
127.0.0.1:6379> ZINCRBY TEST_ZSET 10 KEYC
"108"
127.0.0.1:6379> ZCOUNT TEST_ZSET 50 200
(integer) 2
127.0.0.1:6379> ZRANK TEST_ZSET KEYB
(integer) 0
127.0.0.1:6379> ZRANK TEST_ZSET KEYC
(integer) 1
127.0.0.1:6379> ZSCORE TEST_ZSET KEYC
"108"
ZREVRANK ---- ZREVRANK key-name member 返回member的排名,按照从大到小进行排列
ZREVRANGE ----- ZREVRANGE key-name start stop [withscores] 返回指定范围的一组member 顺序从大到小
ZRANGEBYSCORE --- ZRANGEBYSCORE key-name min max 返回分值在min 到 max之间的member
ZREVRANGEBYSCORE ---- ZREVRANGEBYSCORE key-name max min 和上面一样 只不过顺序倒转
ZREMRANGEBYRANK --- ZREMRANGEBYRANK key-name start stop 移除有序集合中排名在start 到 stop之间的成员
ZREMRANGEBYSCORE ---- ZREMRANGEBYSCORE key-name min max 移除有序集合中分值在min 到 max 之间的成员
127.0.0.1:6379> ZADD ZKEY_A A 12 B 1 C22 D82 E15
(error) ERR syntax error
127.0.0.1:6379> ZADD ZKEY_A A 12
(error) ERR value is not a valid float
127.0.0.1:6379> ZADD ZKEY_A 12 A 23 B 93 C
(integer) 3
127.0.0.1:6379> ZADD ZKEY_B 22 A 66 D 11 C 55 D
(integer) 3
127.0.0.1:6379> ZREVRANK ZKEY_A C
(integer) 0
127.0.0.1:6379> ZREVRANK ZKEY_A B
(integer) 1
127.0.0.1:6379> ZREVRANGE ZKEY_A 0 -1 WITHSCORES
1) "C"
2) "93"
3) "B"
4) "23"
5) "A"
6) "12"
127.0.0.1:6379> ZREVRANGEBYSCORE ZKEY_A 100 0 WITHSCORES
1) "C"
2) "93"
3) "B"
4) "23"
5) "A"
6) "12"
127.0.0.1:6379> ZREMRANGEBYRANK ZKEY_A 0 1
(integer) 2
127.0.0.1:6379> ZREMRANGEBYSCORE ZKEY_B 0 50
(integer) 2
ZINTERSTORE ---- ZINTERSTORE dest-key key-count key [key...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX] 对指定的key进行有序集合的交集运算并存储在dest-key当中
ZUNIONSTORE ---- ZUNIONSTORE dest-key key-count key [key...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX] 对指定的key进行有序集合的并集运算并存储在dest-key当中
127.0.0.1:6379> ZADD ZKEY_A 10 A 20 B 30 C 40 D
(integer) 4
127.0.0.1:6379> ZADD ZKEY_B 10 C 20 D 30 E 40 F 50 G
(integer) 5
127.0.0.1:6379> ZINTERSTORE ZINTER_DEST 2 ZKEY_A ZKEY_B AGGREGATE SUM
(integer) 2
127.0.0.1:6379> ZRANGE ZINTER_DEST 0 -1
1) "C"
2) "D"
127.0.0.1:6379> ZRANGE ZINTER_DEST 0 -1 WITHSCORES
1) "C"
2) "40"
3) "D"
4) "60"
127.0.0.1:6379> ZUNIONSTORE ZUNION_DEST 2 ZKEY_A ZKEY_B AGGREGATE MIN
(integer) 7
127.0.0.1:6379> ZRANGE ZUNION_DEST 0 -1
1) "A"
2) "C"
3) "B"
4) "D"
5) "E"
6) "F"
7) "G"
127.0.0.1:6379> ZRANGE ZUNION_DEST 0 -1 WITHSCORES
1) "A"
2) "10"
3) "C"
4) "10"
5) "B"
6) "20"
7) "D"
8) "20"
9) "E"
10) "30"
11) "F"
12) "40"
13) "G"
14) "50"
需要注意的是,我们使用ZUNIONSTORE 或者 ZINTERSTORE 需要指定需要进行运算的集合数量。aggregate 如果不指定的情况下默认为sum,aggregate 主要的作用是那些SCORE之间的运算方式,上面使用SUM和MIN。如果我们两个集合都有A A这个成员在两个集合的score分别是 10 20 则合拼之后默认相加 在新的有序集合中A 的score为30
KEY有效期
我们通常希望一些KEY到一定时间后会自动删除,从而不会又太多的不使用数占用内存。
EXPIRE ---- EXPIRE KEY-NAME SECONDS 对一个已经存在的KEY 设置过期时间
TTL ---- TTL KEY-NAME 获得一个KEY距离过期时间还有多少秒
PERSIST --- PERSIST KEY-NAME 将一个KEY过期时间删除
EXPIREAT ---- EXPIREAT KEY-NAME TIMESTAMP 对已经存在的KEY 设置失效时间为UNIX时间戳 时间戳计算单位为秒
PTTL ----- PTTL KEY-NAME 获得一个KEY距离过期时间还有多少毫秒
PEXPIREAT --- PEXPIREAT KEY-NAME TIMESTAMP 对已经存在的KEY 设置失效时间为UNIX时间戳 时间戳计算单位为毫秒
127.0.0.1:6379> SET SKEY_A 1
OK
127.0.0.1:6379> EXPIRE SKEY_A 1000
(integer) 1
127.0.0.1:6379> TTL SKEY_A
(integer) 989
127.0.0.1:6379> PTTL SKEY_A
(integer) 973520
127.0.0.1:6379> PERSIST SKEY_A
(integer) 1
127.0.0.1:6379> TTL SKEY_A
(integer) -1