redis操作五种数据的命令说明

String字符串

赋值

表达式

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> 
是否存在改key的值

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

Hash类型

命令 表达式 说明
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"

list(列表)

常用命令
命令 表达式 说明
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还可以限制列表中的数据个数

set

常用set命令行
命令 表达式 说明
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集合
多个set集合组合操作命令行
命令 表达式 说明
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"

zset有序集合

常见操作
命令 表达式 说明
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类似

你可能感兴趣的:(redis,java架构)