本文概览:介绍redis五种数据类型常用的命令。
1 简介
Redis作用和其他缓存一样,就是为了减少读取数据库读取次数。通过保存一个键值对来实现,但是Redis相对于其他缓存具有两种属性,这两种属性是Redis的标识:
(1)对于值的类型,提供了五种类型:字符串、list、set(相对于list优点就是数据不可以重复)、HashMap、有序集合(也是一个map结构,key是保存的对象,value是分数)。
(2)支持持久化。
2 五种数据类型和相应命令行
2.1 字符串
主要包含字符串、整数、浮点数 三种类型。
1、初始化
最开始初始化一个key时,需要如下命令
1 |
set key value |
2、整数
(1)incr
解释:将整数自动加1
命令格式为:
1 |
incr key |
举例:
1 2 3 4 5 6 7 |
#初始化 127.0.0.1:6379> set key 10 OK #加1 127.0.0.1:6379> incr key (integer) 11 |
(2)decr
解释:将整数减1。
命令格式:
1 |
decr key |
举例:
1 2 3 4 5 |
127.0.0.1:6379> set key 10 OK 127.0.0.1:6379> decr key (integer) 9 |
(3)incrby
解释:将整数增加指定的amount
命令格式:
1 |
incrby key amount |
举例:
1 2 3 4 5 6 |
#初始化 127.0.0.1:6379> set key 10 OK 127.0.0.1:6379> incrby key 2 (integer) 12 |
(3)decrby
解释:将整数减去指定的amount
命令格式:
1 |
decrby key amount |
举例为
1 2 3 4 5 6 |
# 初始化 127.0.0.1:6379> set key 10 OK 127.0.0.1:6379> decrby key 2 (integer) 8 |
3、浮点数
(1)incrbyfloat
解释: 将浮点数增加指定amount,可以正数,也可以是负数。
命令格式为
1 |
incrbyfloat key amount |
举例为:
1 2 3 4 5 6 7 8 9 |
# 初始化 127.0.0.1:6379> set key 10.1 OK 127.0.0.1:6379> incrbyfloat key -2.1 "8" 127.0.0.1:6379> incrbyfloat key 3.2 "11.2" |
4、字符串
(1)setnx
解释:将 key 的值设为 value ,当且仅当 key 不存在。如果设置成功返回1,否则返回0.
命令格式为:
1 |
SETNX key value |
举例:
1 2 3 4 5 6 7 8 9 10 11 |
127.0.0.1:6379> exists lockkey #检查是否存在key (integer) 0 127.0.0.1:6379> setnx lockeky 111 #为key进行赋值 (integer) 1 127.0.0.1:6379> setnx lockeky 1112 #再次为key赋值失败 (integer) 0 127.0.0.1:6379> get lockeky #获取key的值 "111" |
(2)append
解释: 在key对应的value后面拼接字符串
命令格式:
1 |
append key str |
举例:
1 2 3 4 5 6 7 8 |
127.0.0.1:6379> set key hello OK 127.0.0.1:6379> append key " ketty" (integer) 11 127.0.0.1:6379> get key "hello ketty" |
(3)getrange
解释:获取字符串偏移量start到偏移量end的值
命令格式:
1 |
getrange key start end |
举例:
1 2 3 4 5 |
127.0.0.1:6379> set key hello OK 127.0.0.1:6379> getrange key 1 3 "ell" |
(4)setrange
解释:把字符串start偏移量start后面的值替换为value。
命令格式:
1 |
setrange key start value |
举例:
1 2 3 4 5 6 7 8 |
127.0.0.1:6379> set key hello OK 127.0.0.1:6379> setrange key 1 test (integer) 5 127.0.0.1:6379> get key "htest" |
2.2 列表List
分为阻塞和非阻塞两类。
1、初始化
通过 rpush 和 lpush来进行初始化,不能通过set 命令,因为set命令是针对String类型的。
同样获取list元素时,也不能使用get命令,因为 “get key”也是针对String类型的,对于List需要通过lindex和lrange命令来查看元素。
2、非阻塞
(1)rpush 和 lpush
解释:用于初始化和新增元素。rpush从 右端添加元素;lpush从左端添加元素。
命令格式:
1 2 3 4 5 |
# rpush命令 rpush kye value1 value2 # lpush命令 lpush key value1 value2 |
举例:
1 2 3 4 5 6 7 |
# 初始化 127.0.0.1:6379> rpush listkey 11 12 (integer) 2 127.0.0.1:6379> lrange listkey 0 1 1) "11" 2) "12" |
(2)lindex 和 lrange
解释:用于查询列表的元素。lindex用于返回偏移量为index的数据;lrange用来返回偏移量start到偏移量end的元素。
命令格式:
1 2 3 4 5 |
#lindex命令 lindex key index #lrange命令 lrange key start end |
举例:
1 2 3 4 5 6 7 8 9 |
127.0.0.1:6379> rpush listkey 11 12 (integer) 2 127.0.0.1:6379> lrange listkey 0 1 1) "11" 2) "12" 127.0.0.1:6379> lindex listkey 1 "12" |
(3)rpop和lpop
解释:用于查询和删除列表元素。rpop从列表右边查询并删除元素;lpop 从列表左边查询并删除元素。
命令格式:
1 2 3 4 5 |
#rpop rpop key #lpop lpop key |
举例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# 初始化 127.0.0.1:6379> rpush listkey 11 12 13 14 15 (integer) 5 # rpop命令 127.0.0.1:6379> rpop listkey "15" # lpop命令 127.0.0.1:6379> lpop listkey "11" 127.0.0.1:6379> lrange listkey 0 2 1) "12" 2) "13" 3) "14" |
(4)ltrim
解释:用于截取队列中元素
命令格式:
1 |
ltrim key start end |
举例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# 当前列表 127.0.0.1:6379> lrange listkey 0 2 1) "12" 2) "13" 3) "14" # 执行ltrim 127.0.0.1:6379> ltrim listkey 0 1 OK # 展示最新列表 127.0.0.1:6379> lrange listkey 0 2 1) "12" 2) "13" |
2、阻塞
当使用rpop和lpop获取元素时,如果key对应的列表list是空的,则此时直接返回null。如果在列表为空时,我们希望可以等待一段时间,然后才返回值,此时引入了阻塞类型的命令blpop和brpop命令
(1)blpop和brpop命令
除了阻塞,blpop和brpop相比lpop/rpop还有一个属性就是可以对多个队列顺序执行操作。命令格式:key1、key2等标识多个队列
1 2 3 4 5 |
#blpop ,timeout单位是秒 blpop key1 [key2 ...] timeout #brpop,timeout单位是秒 brpop key1 [key2 ...] timeout |
举例:
1 2 |
#等待10s blpop listkey 10 |
2.3 集合Set
1、初始化
通过sadd命令来初始化set。
2、基本操作
(1)SADD
解释:将一个元素添加到set中
命令格式:
1 |
sadd key value1 ... valuen |
举例:
1 2 3 4 5 6 7 8 9 10 11 12 |
# 初始化 127.0.0.1:6379> sadd setkey 23 44 (integer) 2 # 显示所有成员 127.0.0.1:6379> smembers setkey 1) "23" 2) "44" # 显示成员总个数 127.0.0.1:6379> scard setkey (integer) 2 |
(2)smembers
解释:获取key对应set中所有元素
命令格式:
1 |
smembers key |
举例:
参考 sadd命令中例子
(3)scard
解释:获取 key对应set包含元素的个数
命令格式:
1 |
scard key |
举例:
参考 sadd命令中例子。
(4)srem
解释:删除key对应set中指定的元素,可以是多个
命令格式:
1 |
srm key value1 .... valuem |
举例:
1 2 3 4 5 6 7 8 9 10 |
# 初始化 127.0.0.1:6379> sadd setkey 23 44 (integer) 2 # 删除成员 127.0.0.1:6379> srem setkey 23 (integer) 1 127.0.0.1:6379> smembers setkey 1) "44" |
2、集合操作
(1)sidff
解释:返回存在第一个集合,但是不存在其他集合的元素
命令格式:
1 |
sdiff set1 set2 .... setn |
举例:
1 2 3 4 5 6 7 8 9 10 11 |
# 初始化三个集合 127.0.0.1:6379> sadd setkey 23 44 55 (integer) 3 127.0.0.1:6379> sadd setkey1 23 (integer) 1 127.0.0.1:6379> sadd setkey2 44 (integer) 1 # 执行sdiff命令 127.0.0.1:6379> sdiff setkey setkey1 setkey2 1) "55" |
(2) sinter
解释:不同集合的交集
命令格式:
1 |
sinter set1 .... setn |
举例:
1 2 3 4 5 6 7 8 9 |
# 初始化两个集合 127.0.0.1:6379> sadd setkey 23 44 55 (integer) 3 127.0.0.1:6379> sadd setkey1 23 (integer) 1 # 交集 127.0.0.1:6379> sinter setkey setkey1 1) "23 |
(3)sunion
解释:不同集合的并集
命令格式:
1 |
sunion set1 .. setn |
举例:
1 2 3 4 5 6 7 8 9 10 |
# 初始化两个集合 127.0.0.1:6379> sadd setkey1 23 (integer) 1 127.0.0.1:6379> sadd setkey2 44 (integer) 1 # 取并集 127.0.0.1:6379> sunion setkey1 setkey2 1) "23" 2) "44" |
2.4 HashMap
1、初始化
使用hmset命令进行初始化
2、hmset
解释:新增或者更新key对应map的键值对.可以指定多个键值对
命令格式:
1 |
hmset key mapkey mapvalue ... mapkeyn mapkeyvalue2 |
举例:
1 2 3 4 5 6 7 8 9 |
# 初始化 127.0.0.1:6379> hmset keymap liming 20 yuanyuan 30 OK # 执行hmget查看某一个成员的值 127.0.0.1:6379> hmget keymap liming 1) "20" 127.0.0.1:6379> hmget keymap yuanyuan 1) "30" |
3、hget和hgetall
解释:获取key对应的hashmap的键对应的值
命令格式:
1 2 3 |
hmget key mapkey [mapkey ...] # 获取map中一个或多个mapkey的值 hmgetall key # 获取map中所有键值对 |
举例:
参考hmset中例子
4、hdel
解释:删除key对应的hashmap中的键
命令格式:
1 |
hdel key mapkey |
举例:
1 2 3 4 5 6 7 8 9 |
127.0.0.1:6379> hmset keymap liming 20 yuanyuan 30 OK # 执行删除 127.0.0.1:6379> hdel keymap liming (integer) 1 127.0.0.1:6379> hkeys keymap 1) "yuanyuan" |
5、hkeys和hvals
解释:hekys返回所有键值,hvals,返回所有values.
命令格式:
1 2 3 4 5 |
# hkeys命令 hkeys key #hvals 命令 hvals key |
举例:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# 初始化 127.0.0.1:6379> hmset keymap liming 20 yuanyuan 30 OK # 查看所有key 127.0.0.1:6379> hkeys keymap 1) "yuanyuan" 2) "liming" # 查看所有values 127.0.0.1:6379> hvals keymap 1) "30" 2) "20" |
6、hexists
解释:在key对应的hashmap中是否包含某一个键。如果存在返回1,否则返回0
命令格式:
1 |
hexists key mapkey |
举例
1 2 3 4 5 |
127.0.0.1:6379> hmset keymap liming 20 yuanyuan 30 OK 127.0.0.1:6379> hexists keymap liming (integer) 1 |
2.5 有序集合
1、初始化
通过zadd操作
2、基本操作
(1)zadd
解释:初始化或者新增元素
命令格式:
1 |
zadd key score1 member1 .... scoren membern |
举例:
# 新增或者初始化
1 2 |
127.0.0.1:6379> zadd keyscore 69 123.com 78 wangyi.com (integer) 2 |
(2)zincrby
解释:给成员的积分累加amount。对于成员的积分的值都是整型。
命令格式:
1 |
zincrby key incrscore member |
举例:
1 2 3 4 5 |
127.0.0.1:6379> zadd keyscore 69 123.com 78 wangyi.com (integer) 0 127.0.0.1:6379> zincrby keyscore 20 123.com "89" |
2、获取成员总数信息
(1)zcard
解释:获取key对应的有序集合中成员总数
命令格式:
1 |
zcard key |
举例:
1 2 3 4 5 6 7 |
# 新增或者初始化 127.0.0.1:6379> zadd keyscore 69 123.com 78 wangyi.com (integer) 2 # 获取成员总个数 127.0.0.1:6379> zcard keyscore (integer) 2 |
(2)zcount
解释:返回介于min和max之间的成员变量,包含积分等于min和max的成员
命令格式:
1 |
zcount key minscore maxscore |
举例:
1 2 3 4 5 6 7 |
# 新增或者初始化 127.0.0.1:6379> zadd keyscore 69 123.com 78 wangyi.com (integer) 2 # 获取积分在一个区间内成员总数 127.0.0.1:6379> zcount keyscore 70 80 (integer) 1 |
3、获取一个成员排名和积分信息
(1)zrank
解释:返回成员的排名
命令格式:
1 |
zrank key member |
举例:
1 2 3 4 5 6 7 8 9 |
# 新增或者初始化 127.0.0.1:6379> zadd keyscore 69 123.com 78 wangyi.com (integer) 2 # 获取一个成员的名次, 127.0.0.1:6379> zrank keyscore 123.com (integer) 0 127.0.0.1:6379> zrank keyscore wangyi.com (integer) 1 |
(2)zscore
解释:返回一个成员积分
命令格式:
1 |
zscore key member |
举例:
1 2 3 4 5 6 7 |
# 新增或者初始化 127.0.0.1:6379> zadd keyscore 69 123.com 78 wangyi.com (integer) 2 # 获取积分在一个区间内成员总数 127.0.0.1:6379> zcount keyscore 70 80 (integer) 1 |
4、获取成员
(1)zrevrange
解释:获取排名在min和start之间的成员
命令格式:
1 |
zrevrange key rankmin rankmax |
举例:
1 2 3 4 5 6 7 8 |
# 初始化 127.0.0.1:6379> zadd keyscore 69 123.com 78 wangyi.com (integer) 0 # 获取排名[0,1]之前的成员 127.0.0.1:6379> zrevrange keyscore 0 1 1) "wangyi.com" 2) "123.com" |
(2) zrangebyscore
解释:获取积分在min和start之间的成员
命令格式:
1 |
zrangebyscore key scoremin scoremax |
举例:
1 2 3 4 5 6 7 8 |
# 初始化 127.0.0.1:6379> zadd keyscore 69 123.com 78 wangyi.com (integer) 0 # 获取积分在[69,78]之间的成员 127.0.0.1:6379> zrangebyscore keyscore 69 78 1) "123.com" 2) "wangyi.com" |
3 关于key操作的命令
1、DEL
解释:删除一个key
命令格式
1 |
del key |
2、expire
解释:设置key的过期时间
命令格式:
1 |
expire key seconds |
3、exists
解释:判断key是否存。如果存在返回1,否则返回0。
命令格式:
1 |
exists key |
(全文完)