一、redis对字符串的命令
1.redis的字符串就是一个由字节组成的序列,字符串可以存储3种类型的值:字符串、整数、浮点数。
命令 | 用例和描述 |
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
命令 | 用例和描述 |
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'])
命令 | 用例和描述 |
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
命令 | 用例和描述 |
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.一般来说,发布与订阅的特点是订阅者负责订阅频道,发送者负责向频道发送二进制字符串消息。每当有消息被发送给定频道时,频道的所有订阅者都会收到消息。
命令 | 用例和描述 |
subscribe | subscribe channel 【channel。。。】—— 订阅给定的一个或多个频道 |
unsubscribe | unsubscribe 【channel【channel。。。】】—— 退订给定的一个或多个频道,如果执行时没有给定任何频道,那么退订所有频道 |
publish | publish channel message —— 向给定频道发送消息 |
psubscribe | psubscribe pattern 【pattern。。。】—— 订阅与给定模式相匹配的所有频道 |
punsubscribe | punsubscribe 【pattern 【pattern。。。】】—— 退订给定的模式,如果执行时没有给定任何模式,那么退订所有模式 |
七、其他命令
1.排序:根据某种比较规则对一系列元素进行有序的排序。
命令 | 用例和描述 |
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.键的过去时间
命令 | 示例和描述 |
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或以上版本可用 |