redis从零开始学习系列(二)—— redis命令

一、redis对字符串的命令

    1.redis的字符串就是一个由字节组成的序列,字符串可以存储3种类型的值:字符串、整数、浮点数。    

redis的自增命令和自减命令
命令 用例和描述
incr incr  key-name—— 将键存储的值加上1
decr decr  key-name —— 将键存储的值减去1
incrby incrby  key-name  amount —— 将键存储的值加上整数amount
decrby decrby  key-name amount —— 将键存储的值减去整数amount
incrbyfloat incrbyfloat  key-name amount —— 将键存储的值加上浮点数amount (在redis2.6或以上的版本可用)

    其中只有当字符串存储的类型是整数或者浮点数的时候才可使用上述命令,如果对一个不存在的键或者一个保存了空串的键执行自增或者自减操作,那么redis在执行时会将这个键的值当作是0来处理;如果对一个保存了字符串的值进行自增或者自减命令,那么redis将会返回一个错误

代码实例:

Jedis conn = new Jedis("localhost"); //后续代码都会使用conn来代替
conn.get('key'); 
conn.incr('key'); //对一个空串进行自增 返回值为 1
conn.incr('key',15);  //对值进行增加15 返回值为16
conn.decr('key',5);  //对值进行减少5,返回值为11
conn.get('key');  //返回值为11
conn.set('key','13'); //将这个键值设置为13
conn.incr('key');  //将这个值进行自增,返回值为14
redis处理字符串和二进制位的命令
命令 用例和描述
append append  key-name value —— 将值value追加到给定键key-name 当前存储的值的末尾
getrange getrange  key-name  start end —— 获取一个由偏移量start至偏移量end范围内所有字符组成的字符串,包括start和end在内
setrange setrange  key-name  offset  value —— 将从start偏移量开始的字符串设置为给定值
getbit getbit  key-name  offset —— 将字符串看作是二进制位串,并返回位串中偏移量为offset的二进制位的值
setbit setbit  key-name offset value —— 将字符串看作是二进制位串,并将位串中偏移量为offset的二进制位的值设置为value
bitcount

bitcount key-name 【start end】—— 统计二进制位串里面值为1的二进制位的数量,如果给定了可选start偏移量和end偏移量

,那么只对偏移量指定范围内的二进制位进行统计

bitop

bitop  operation  dest-key  key-name 【key-name。。。】—— 对一个或多个二进制位串执行包括并、或、异或、非在内的任意一

种按位运算操作,并将计算得出的结果保存在dest-key键里面

    在使用setrange或者setbit命令对字符串进行写入的时候,如果字符串当前的长度不能满足写入的要求,那么redis会自动地使用空字节来将字符串扩展至所需的长度,然后在执行写入或者更新操作。在使用getrange读取字符串的时候,超出字符串末尾的数据会被视为是空串,而在使用getbit读取二进制位串的时候,超出字符串末尾的二进制位会被视为是0

代码实例:

conn.append('string-key','hello ');  //将字符串‘hello ’追加到‘string-key’键里 返回值为当前字符串的长度为 6L
conn.append('string-key',''world!);  //将字符串‘world!’追加到‘string-key’键里 返回值为 12L  
conn.getrange('string-key',3,7);  //获取3~7范围内的字符串,redis的索引是从0开始的 所以返回的值为 ‘lo wo’
conn.setrange('string-key',0,'H');  //将位置为0的字符替换为H 返回结果为当前字符串的长度,返回值为 12
conn.setrange('string-key',6,'W');  //将位置为6的字符替换为W 返回值为 12
conn.get('string-key');  //返回值为 ‘Hello World!’
conn.setrange('string-key',11,',how are you?');  //将位置为11的字符串替换为‘,how are you’
conn.get('string-key');  //返回值为 ‘Hello World,how are you?’
conn.setbit('new-key',2,1);  //对超出字符串长度的二进制位进行设置时,超出的部分被填充为空字节,返回值为被设置之前的值 返回值为 0
conn.setbit('new-key',7,1);  //同上
conn.get('new-key');  //返回值为‘!’

二、redis对列表的命令

    1.列表就是由多个字符串组成的有序序列。

一些常用的列表命令
命令 用例和描述
rpush rpush  key-name  value 【value。。。】 —— 将一个或多个值推入列表的右端
lpush lpush  key-name  value  【value。。。】—— 将一个或多个值推入列表的左端 
rpop rpop  key-name —— 移除并返回列表最右端的元素
lpop lpop  key-name —— 移除并返回列表最左端的元素
lindex lindex  key-name  offset —— 返回列表中偏移量为offset的元素
lrange

lrange  key-name  start  end —— 返回列表从start偏移量到end偏移量范围内的所有元素,其

中偏移量为start和偏移量为end的元素也会包含在被返回的元素之内

ltrim

ltrim  key-name  start  end —— 对列表进行修剪,只保留从start偏移量到end偏移量范围内的元素,其

中偏移量为start和偏移量为end的元素也会被保留

conn.rpush('list-key','last');  //向列表的右端添加值,返回结果为列表的当前长度。返回值为1L
conn.lpush('list-key','first');  //向列表的左端添加值,返回结果为列表的当前长度。返回值为2L
conn.rpush('list-key','new last');  //向列表的右端添加值,返回结果为列表的当前长度。返回值为3L
conn.lrange('list-key',0,-1);  //获取列表的范围值,0表示开始位置,-1表示结束位置。返回值为【‘first’,‘last’,‘new last’】
conn.lpop('list-key');  //移除列表最左端的元素,返回为被移除元素的值。返回值为‘first’
conn.lpop('list-key');  //移除列表最左端的元素,返回为被移除元素的值。返回值为‘last’
conn.lrange('list-key',0,-1);  //获取列表的范围值。返回值为【‘new last’】
conn.rpush('list-key','a','b','c');  //向列表的右端批量添加值。返回值为4L
conn.lrange('list-key',0,-1);  //获取列表的值。返回值为【‘new last’,‘a’,‘b’,‘c’】
conn.ltrim('list-key',2,-1);  //对列表的元素进行修剪。返回值为true
conn.lrange('list-key',0,-1);  //返回值为【‘b’,‘c’】
阻塞式的列表弹出命令以及在列表之间移除元素的命令
命令 用例和描述
blpop

blpop  key-name 【key-name 。。。】 timeout —— 从第一个非空列表中弹出位于最左端的元素,或

者在timeout 秒之内阻塞并等待可弹出的元素出现

brpop

brpop  key-name 【key-name。。。】 timeout —— 从第一个非空列表中弹出位于最右端的元素,或

者在timeout秒之内阻塞并等待可弹出的元素出现

rpoplpush

rpoplpush  source-key dest-key —— 从source-key列表中弹出位于最右端的元素,然

后将这个元素推入dest-key列表的最左端,并向用户返回这个元素

brpoplpush

brpoplpush  source-key  dest-key  timeout —— 从source-key列表中弹出位于最右端的元素,然

后将这个元素推入dest-key列表的最左端,并向用户返回这个元素;如果source-key为空,那么

在timeout秒之内阻塞并等待可弹出的元素出现

conn.rpush('list','item1');  //向列表最右端添加元素。返回值为1
conn.rpush('list','item2');  //向列表最右端添加元素。返回值为2
conn.rpush('list2','item3');  //向列表最右端添加元素。返回值为1
conn.brpoplpush('list2','list',1);  //将一个元素从一个列表移动到另一个列表,返回被移动的元素。返回值为‘item3’
conn.brpoplpush('list2','list',1);  //当列表中不包含任何元素时,阻塞弹出操作会在给定的时限内等待可弹出的元素出现,并在时限到达后返回none
conn.lrange('list',0,-1);  //获取列表中的所有元素。返回值为【‘item3’,‘item1’,‘item2’】
conn.brpoplpush('list','list2',1);  //将一个元素从一个列表移动到另一个列表,返回被移动的元素。返回值为‘item2’
conn.blpop(['list','list2'],1);  //命令会从左到右地检查传入的列表,并对最先遇到的非空列表执行弹出操作。 返回值为(‘list’,‘item3‘)
conn.blpop(['list','list2'],1);  //同上。 返回值为(’list‘,’item1‘)
conn.blpop(['list','list2'],1);  //同上。返回值为(’list2‘,’item2‘)

    列表的一个主要优点在于它可以包含多个字符串的值,这使的用户可以将数据集中在同一个地方。

三、redis对集合的操作

    1.redis的集合以无序的方式来存储多个各不相同的元素。

一些常用的集合命令
命令 用例和描述
sadd

sadd  key-name  item 【item。。。】—— 将一个或多个元素添加到集合里面,

并返回被添加元素当中原本并不存在于集合里面的元素数量

srem srem  key-name  item 【item。。。】—— 从集合里面移除一个或多个元素,并返回被移除元素的数量
sismember sismenber  key-name  item —— 检查元素item是否存在于key-name 里
scard scard  key-name —— 返回集合包含的元素的数量
smembers smembers  key-name —— 返回集合包含的所有元素
srandmember

srandmember  key-name 【count】—— 从集合里面随机地返回一个或多个元素。

当count为正数时,命令返回的随机元素不会重复;当count为负数时,命令返回的随机元素可能会出现重复

spop spop  key-name —— 随机地移除集合中的一个元素,并返回被移除的元素
smove

smove  source-key  dest-key  item —— 如果集合source-key包含元素item,那么从集合source-key里面移除元素item

,并将元素item添加到集合dest-key中;如果item被成功移除,那么命令返回1,否则返回0

conn.sadd('set-key','a','b','c');  //将元素添加到集合当中,返回被添加元素的数量。返回值为3
conn.srem('set-key','c','d');  //srem 函数在元素被成功移除时返回true,移除失败时返回false。返回值为true
conn.srem('set-key','c','d');  //返回值为false
conn.scard('set-key');  //查看集合包含的元素数量。返回值为2
conn.smembers('set-key');  //获取集合包含的所有元素。返回值set(['a','b'])
conn.smove('set-key','set-key2','a');  //将元素从一个集合移动到另一个集合。返回值为true
conn.smove('set-key','set-key2','c');  //返回为false
conn.smembers('set-key2');  //返回值为set(['a'])
用于组合和处理多个集合的redis命令
命令 用例和描述
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键里面
sunion sunion  key-name 【key-name。。。】—— 返回那些至少存在于一个集合中的元素(数学上的并集运算)
sunionstore sunionstore  dest-key  key-name 【key-name。。。】—— 将那些至少存在于一个集合中的元素,存储到dest-key键里面
conn.sadd('skey1','a','b','c','d');  //向集合添加元素。返回值为4
conn.sadd('skey2','c','d','e','f');  //返回值为4
conn.sdiff('skey1','skey2');  //差集运算。返回值为set(['a','b'])
conn.sinter('skey1','skey2');  //交集运算。返回值为set(['c','d'])
conn.sunion('skey1','skey2');  //并集运算。返回值为set(['a','c','b','e','d','f'])

四、redis对散列的操作

    1.redis的散列可以让用户将多个键值对存储到一个redis键里面。

用于添加和删除键值对的散列操作
命令 用例和描述
hmget hmget  key-name  key 【key。。。】—— 从散列里面获取一个或多个键的值
hmset hmset  key-name  key value 【key value。。。】—— 为散列里面的一个或多个键设置值
hdel hdel  key-name  key 【key。。。】—— 删除散列里面的一个或多个键值对,返回成功找到并删除的键值对数量
hlen hlen  key-name —— 返回散列包含的键值对数量
conn.hmset('hash-key',{'k1':'v1','k2':'v2','k3':'v3'});  //一次将多个键值对添加到散列里面。返回值为true
conn.hmget('hash-key',['k2','k3']);  //一次获取多个键的值。返回值为【‘v2’,‘v3’】
conn.hlen('hash-key');  //返回键值对的数量。返回值为3
conn.hdel('hash-key','k1','k3');  //删除键值对。返回值为true
展示redis散列的更高级特性
命令 用例和描述
hexists hexists  key-name  key —— 检查给定键是否存在于散列中
hkeys hkeys  key-name —— 获取散列包含的所有键
hvals hvals  key-name —— 获取散列包含的所有值
hgetall hgetall  key-name —— 获取散列包含的所有键值对
hincrby hincrby  key-name  key increment —— 将键key存储的值加上整数increment
hincrbyfloat hincrbyfloat  key-name  key  increment —— 将键key存储的值加上浮点数increment
conn.hmset('hash-key2',{'short':'hello','long':1000*'1'});  //对散列进行添加值
conn.hkeys('hash-key2');  //获取所有的键。返回值为【‘long’,‘short’】
conn.hexists('hash-key2','num');  //检查给定的键是否存在于散列。返回值为false
conn.hincrby('hash-key2','num');  //给键存储的值加上整数,和字符串一样,对散列中的一个不存在的键执行自增时,会把这个键的值当作0来处理。返回值为1L
conn.hexists('hash-key2','num');  //返回值为true

五、redis对有序集合的命令

    1.有序集合存储着成员与分值之间的映射。

一些常用的有序集合命令
命令 用例和描述
zadd zadd  key-name  score  member 【score member 。。。】—— 将带有给定分值的成员添加到有序集合里面
zrem zrem  key-name  member 【member。。。】—— 从有序集合里面移除给定的成员,并返回被移除成员的数量
zcard zcard  key-name —— 返回有序集合包含的成员数量
zincrby zincrby  key-name  increment  member —— 将member成员的分值加上increment
zcount zcount  key-name  min  max —— 返回分值介于min和max之间的成员数量
zrank zrank  key-name  member —— 返回成员member在有序集合中的排名
zscore zscore  key-name  member —— 返回成员member的分值
zrange

zrange  key-name  start  stop 【withscores】—— 返回有序集合中排名介于start和stop之间的成员,

如果给定了可选的withscores选项,那么命令将成员的分值也一并返回

conn.zadd('zset-key','a',3,'b','2','c',1);  //向有序集合添加元素。返回值为3
conn.zcard('zset-key');  //返回有序集合包含的成员数量。返回值为3
conn.zincrby('zset-key','c',3);  //将成员c的值加3.返回值为4.0
conn.zscore('zset-key','b');  //返回成员b的分值。返回值为2.0
conn.zrank('zset-key','c');  //返回c在有序集合中的排名。返回值为2
conn.zcount('zset-key',0,3);  //返回分值介于0~3的成员数量。返回值为2L
conn.zrem('zset-key','b');  //从有序集合中移除成员。返回值为true
conn.zrange('zset-key',0,-1,withscores=true);  //返回有序集合的成员和分值。返回值为【('a',3.0),('c',4.0)】
有序集合的范围型数据获取命令和范围型数据删除命令,以及并集合命令和交集命令
命令 用例和描述
zrevrank zrevrank  key-name  member —— 返回有序集合里成员member的排名,成员按照分值从大到小排序
zrevrange zrevrange  key-name  start  stop [withscores] —— 返回有序集合给定排名范围内的成员,成员按照分值从大到小排序
zrangebyscore zrangebyscore  key  min  max  【withscores】【limit  offset  count】—— 返回有序集合中,分值介于min和max之间的所有成员
zrevrangebyscore zrevrangebyscore  key  max  min [withscores] [limit  offset  count] —— 获取有序集合中分值介于min和max之间的所有成员,并按照分值从大到小的顺序来返回它们
zremrangebyrank remrangebyrank  key-name  start  stop —— 移除有序集合中排名介于start和stop之间的所有成员
zremrangebyscore zremrangebyscore  key-name  min  max —— 移除有序集合中分值介于min和max之间的所有成员
zinterstore zinterstore  dest-key  key-count  key 【key。。。】【weights weight【weight。。。】】【aggregate  sum | min | max】—— 对给定的有序集合执行类似于集合的交集运算
zunionstore zunionstore  dest-key  key-count  key 【key 。。。】【weights weight【weight。。。】】【aggregate sum | min | max】—— 对给定的有序集合执行类似于集合的并集运算
conn.zadd('zset-1','a',1,'b',2,'c',3);  //创建新的有序集合。返回值为3
conn.zadd('zset-2','b',4,'c',1,'d',0);  
conn.zinterstore('zset-i',['zset-1','zset-2']);  //对集合进行交集运算,默认为sum运算。返回值2L
conn.zrange('zset-i',0,-1,withscores=true);  //返回值为[(‘c’,4.0),(‘b’,6.0)]
conn.zunionstore('zset-u',['zset-1','zset-2'],aggregate='min');  //对集合进行并集运算,选择为min。返回值为4L
conn.zrange('zset-u',0,-1,withscores=true);  //返回值为[(‘d’,0.0),(‘a’,1.0),(‘c’,1.0),(‘b’,2.0)]
conn.sadd('set-1','a','d');  //返回值2
conn.zunionstore('zset-u2',['zset-1','zset-2','set-1']);  //可以将集合作为输入传给zinterstore和zunionstore,命令会将集合看作是成员分值全为1的有序集合来处理。
conn.zrange('zset-u2',0,-1,withscores=true);  //返回值为[(‘d’,1.0),(‘a’,2.0),(‘c’,4.0),(‘b’,6.0)]

六、发布与订阅

    1.一般来说,发布与订阅的特点是订阅者负责订阅频道,发送者负责向频道发送二进制字符串消息。每当有消息被发送给定频道时,频道的所有订阅者都会收到消息。

redis提供的发布与订阅命令
命令 用例和描述
subscribe subscribe  channel 【channel。。。】—— 订阅给定的一个或多个频道
unsubscribe unsubscribe 【channel【channel。。。】】—— 退订给定的一个或多个频道,如果执行时没有给定任何频道,那么退订所有频道
publish publish  channel  message —— 向给定频道发送消息
psubscribe psubscribe  pattern  【pattern。。。】—— 订阅与给定模式相匹配的所有频道
punsubscribe punsubscribe 【pattern 【pattern。。。】】—— 退订给定的模式,如果执行时没有给定任何模式,那么退订所有模式

七、其他命令

    1.排序:根据某种比较规则对一系列元素进行有序的排序。

sort命令的定义
命令 用例和描述
sort

sort  source-key 【by pattern】【limit  offset  count】【get  pattern【get pattern。。。】】【asc | desc】

 【alpha】【store  dest-key】—— 根据给定的选项,对输入列表、集合或者有序集合进行排序,然后返回或者存储排序的结果

    sort命令可实现如下功能:根据降序而不是默认的升序来排序元素;将元素看作是数字来进行排序,或者将元素看作是二进制字符串来进行排序(比如排序字符串‘110’和‘12’的结果就跟排序数字110和12的结果不一样);使用被排序元素之外的其他值作为权重来进行排序,甚至还可以从输入的列表、集合、有序集合以外的其他地方进行取值

conn.rpush('sort-input',23,15,110,7);
conn.sort('sort-input');  //根据数字大小对元素进行排序。返回值为【‘7’,‘15’,‘23’,‘110’】
conn.sort('sort-input',alpha=true);  //根据字母表顺序对元素进行排序。返回值为【‘110’,‘15’,‘23’,‘7’】

    2.基本的redis事务:这种事务可以让一个客户端在不被其他客户端打断的情况下执行多个命令。

        要在redis里面执行事务,首先执行multi命令,然后输入那些我们想要在事务里面执行的命令,最后在执行exec命令。

    3.键的过去时间

用于处理过期时间和redis命令
命令 示例和描述
persist persist  key-name —— 移除键的过去时间
ttl ttl  key-name —— 查看给定键距离过期还有多少秒
expire expire  key-name  seconds —— 让给定键在指定的秒数之后过期
expireat expireat  key-name  timestamp —— 将给定键的过期时间设置为给定的unix时间戳
pttl pttl  key-name —— 查看给定键距离过期时间还有多少毫秒,这个命令在redis2.6或以上版本可用
pexpire pexpire  key-name  milliseconds —— 让给定键在指定的毫秒数之后过期,这个命令在redis2.6或以上版本可用
pexpireat

pexpireat  key-name  timestamp-milliseconds —— 将一个毫秒级精度的unix时间戳设置为给定键的过期时间

这个命令在redis2.6或以上版本可用

上一篇






猜你喜欢

转载自blog.csdn.net/huxiaodong1994/article/details/80718756