表达式
set key value
127.0.0.1:6379> set mykey myvalue0
OK
set 会覆盖该key之前的值,如果不想数据被覆盖,可以用setnx
,表示如果key不存在,才设置这个值
127.0.0.1:6379> setnx mykey 11
(integer) 0
另外可以用setex
设置数据的有效期,表达式为
setex key [time] value
以下命令行表示有效时间为10秒
127.0.0.1:6379> setex name 10 lili
OK
表达式
get key
127.0.0.1:6379> get key001
(nil)
127.0.0.1:6379> keys mykey
1) "mykey"
返回结果为nil表示无数据
keys *
127.0.0.1:6379> keys *
1) "mykey"
127.0.0.1:6379>
exists mykey
如果存在,返回1
127.0.0.1:6379> exists mykey
(integer) 1
del key
127.0.0.1:6379> del mykey
(integer) 1
setrange key [index] value
index是从1开始数的,如下:
27.0.0.1:6379> set name qike@github
OK
127.0.0.1:6379> setrange name 5 qq.com
(integer) 11
127.0.0.1:6379> get name
"[email protected]"
批量设置:
mset k1 v1 k2 v2 k3 v3
批量获取:
mget k1 k2 k3
127.0.0.1:6379> mset name1 lili name2 zhangsan1 name3 wangwu
OK
127.0.0.1:6379> mget name1 name2 name3
1) "lili"
2) "zhangsan1"
3) "wangwu"
127.0.0.1:6379>
getset key newvalue
127.0.0.1:6379> getset name qike@github
"[email protected]"
127.0.0.1:6379>
递增+1,注意如果key对应的类型为字符串而不是数字的时候,会抛出异常
incr key
递增指定数字
incrby key [byvalue]
与递增相对应的,也有俩个
decr key
decyby key [byvalue]
append key value
strlen key
命令 | 表达式 | 说明 |
---|---|---|
hset | hset key field value | 给指定key为k-name的hash的field属性添加值 |
hget | hget key field | 获取某个hash值得fied属性值 |
hmset | hmset key f1 v1 f2 v1 | 批量设置 |
hmget | hmget key f1 f2 | 批量获取 |
hdel | hdel key f1 f2 | 批量删除指定hash的field属性 |
hlen | hlen key | 返回指定hash的键值对数目 |
hkeys | hkeys key | 返回指定hash的所有field名称 |
hvals | havals key | 返回指定hash的所有值 |
hincrby | hincrby key fied1 [num] | 将fied1的值加num |
hgetall | hgetall key | 获取指定hash的所有属性和属性值 |
表格中的所有命令按顺序如下示例:
127.0.0.1:6379> hset user1 name zhangsan
(integer) 1
127.0.0.1:6379> hget user1 name
"zhangsan"
127.0.0.1:6379> hmset user2 name li4 age 20
OK
127.0.0.1:6379> hmget user2 name age
1) "li4"
2) "20"
127.0.0.1:6379> hdel user1 name
(integer) 1
127.0.0.1:6379> hget user1 name
(nil)
127.0.0.1:6379> hlen user2
(integer) 2
127.0.0.1:6379> hkeys user2
1) "name"
2) "age"
127.0.0.1:6379> hvals user2
1) "li4"
2) "20"
127.0.0.1:6379> hincrby user2 age 3
(integer) 23
127.0.0.1:6379> hget user2 age
"23"
127.0.0.1:6379> hgetall user2
1) "name"
2) "li4"
3) "age"
4) "23"
命令 | 表达式 | 说明 |
---|---|---|
lpush | lpush key value1 [value…] | 将一个或多个值推入列表的左端,先进后出 |
rpush | rpush key value1 [value…] | 将一个或多个值推入列表的右端,先进先出 |
lpop | lpop key | 移除并返回列表最左端的元素 |
rpop | rpop key | 移除并返回列表最右端的元素 |
lindex | lindx key offset | 返回列表中偏移量为offset的元素 |
llen | len key | 返回元素的个数 |
lrange | lrange key start end | 返回列表中从start偏移量到end的元素,包含偏移量在start和end的元素 |
ltrim | ltrim key start end | 对列表进行修剪,只保留从start到end偏移量的元素,偏移量为start和end的元素也会被保留 |
lset | lset key 0 b | 替换指定下标的元素 |
lrem | lrem key 1 b | 移除列表中第一个值为b的元素 |
注意,偏移量中,-1表示最后一个,-2表示倒数第二个,以此类推。
插入示例代码
127.0.0.1:6379> clear
127.0.0.1:6379> lpush list1 hello redis
(integer) 2
127.0.0.1:6379> lrange list1 0 -1
1) "redis"
2) "hello"
127.0.0.1:6379> rpush list2 hello redis
(integer) 2
127.0.0.1:6379> lrange list2 0 -1
1) "hello"
2) "redis"
获取元素命令行示例代码:
127.0.0.1:6379> rpush list3 1 2 3 4
(integer) 4
127.0.0.1:6379> range list 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379> lpop list3
"1"
127.0.0.1:6379> rpop list3
"4"
127.0.0.1:6379> lrange list3 0 -1
1) "2"
2) "3"
元素裁剪示例代码:
127.0.0.1:6379> rpush list4 1 2 3 4 5
(integer) 5
127.0.0.1:6379> ltrim list4 2 3
OK
127.0.0.1:6379> lrange list4 0 -1
1) "3"
2) "4"
命令 | 表达式 | 说明 |
---|---|---|
blpop | blpop key [key …] timeout | 从第一个非空列表中弹出最左端的元素,或者在最左端阻塞并等待可弹出的元素 |
brpop | brpop key [key …] timeout | 从第一个非空列表中弹出最右端的元素,或者在最右端阻塞并等待可弹出的元素 |
rpoplpush | rpoppush src-key dest-key | 从src-key列表弹出最右端的元素,然后将该元素推入dest-key列表的最左端,并向用户返回列表的名称和该元素元素 |
brpoplpush | brpoppush src-key desy-key timeout | 从src-key列表弹出最右端的元素,然后将该元素推入dest-key列表的最左端,并向用户返回这个元素;如果src-key为空,那么在timeout秒内阻塞并等待可弹出的元素出现 |
示例代码如下:
127.0.0.1:6379> lpush listb 1 2 3
(integer) 3
127.0.0.1:6379> brpop listb 10
1) "listb"
2) "1"
127.0.0.1:6379> lpush list5 1
(integer) 1
127.0.0.1:6379> rpush list5 2
(integer) 2
127.0.0.1:6379> rpush list6 l1
(integer) 1
127.0.0.1:6379> brpoplpush list5 list6 1
"2"
列表的使用场景非常广泛:
- 记录论坛中用户最近发布的帖子,记录帖子最新的评论
- 使用生产者消费者模式进行线程间通信,生产者将数据添加到列表中,消费者从列表取出并执行任务
- 使用ltrim还可以限制列表中的数据个数
命令 | 表达式 | 说明 |
---|---|---|
sadd | sadd key item [item…] | 批量添加元素 |
srem | srem key item[item] | 批量移除元素 |
sismember | sismember key item | 检查集合中是否存在item元素 |
scard | scard key | 查询集合元素数量 |
srandmember | srandmember key [count] | 随机返回count个元素,如果集合元素不足count,返回元素会出现重复 |
spop | spop key | 随机移除一个元素,并返回 |
smove | smove src-key dest-key item | 从src集合中移除元素并添加到dest集合 |
命令 | 表达式 | 说明 |
---|---|---|
sdiff | sdiff key [key…] | 返回存在第一个集合,但是不存在与其他集合的数据,差集运算 |
sdiffstore | sdiffstore des-key key [key…] | 将那些存在于第一个集合但是不存在与其他集合的元素存储到dest集合中 |
sinter | sinter key [key…] | 取交集 |
sinterstore | sinterstore dest-key key [key…] | 将那些同时存在于所有集合中的元素存储到dest集合中 |
sunion | sunion key [key…] | 返回至少存在于一个集合中的元素,交集运算 |
sunionstore | sunionstore dest-key key [key…] | 将交集元素存储到dest中 |
set主用用于tag标签,比如我们保存博客的标签信息:
127.0.0.1:6379> sadd blog:1:tags java 基础面向对象
(integer) 2
127.0.0.1:6379> srandmember blog:1:tags 3
1) "\xe5\x9f\xba\xe7\xa1\x80\xe9\x9d\xa2\xe5\x90\x91\xe5\xaf\xb9\xe8\xb1\xa1"
2) "java"
命令 | 表达式 | 说明 |
---|---|---|
zadd | zadd key score member [score member…] | 添加元素,score可以用+inf和-inf分别表示正无穷和负无穷 |
zscore | zscore key member | 获取元素的分数 |
zcount | zcount key min max | 获取指定返回内的元素个数 |
zrem | zrem key item [item…] | 删除元素 |
zremrangebyrank | zremrangerank key start end | 删除指定排名范围的元素 |
zremrangebyscore | zremrangebyscore key min max | 删除指定分数范围的元素 |
zrank | zrank key item | 获取元素的排名(从小到大排序) |
zrevrank | zrevrank key item | 获取元素的排名(从大到小排序) |
zincrby | zrncyby key inscrscore item | 给元素item增加inscrsocre分数,如果inscrescore为复数,表示减 |
zrange | zrange key start stop [withscore] | 从小到大返回score分值在某个范围(包含俩端元素)的元素列表,需要同时返回分数的话在尾部添加withscore |
zrevrrange | zrevrange key start stop [withscore] | 类似于zrange,只不过返回的元素从大到小排列 |
zrangebyscore | zrangebyscore key min max [withscore] [limt offset count] | 从小到大返回min到max范围的元素 |
zrangebyscore
这里详细说下,zrangebyscore的表达式为
zrangebyscore key min max [withscore] [limt offset count]
意思为从小打到返回min到max范围(包含俩端)的元素,如果不希望包含俩端在分数前加”(“,比如希望返回80到100分数的数据,可包含100但是不包含80
zrangbyscore key-name (80 100
withscore
余zrange一样,表示分数也返回
limt offset count
类似于sql里面的分页,表示在新得到的元素列表的技术上向右偏移offset元素,并只获取前count个元素
Y有序集合的应用场景很多,比如文章的点击量排行
有序集合的交集运算表达式如下:
zinterstore des-key numkeys key[key…] [weights weight[weight…]] [aggeregate SUM|MIN|MAX]
该命令用于计算多个有序集合的交集并将结果储存在另外一个有序集合中,返回值是交集元素的个数。
aggeregate的默认值是sum(可以缺省),表示交集元素中的分数为每个集合中该元素的和。min、max分别表示取最小值和最大值。
weight表示每个集合中的交集元素的分值在计算时所占的 权重。
与交集对应的还有一个命令行zunionstore
用于取并集,表达式及用法与zintersore
类似