Redis基础
Posted forever_elf
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis基础相关的知识,希望对你有一定的参考价值。
Redis的字符串可以存储3种类型的值:字节串(byte string),整数和浮点数。用户可以通过给定任意的数值,对存储着整数或浮点数的字符串执行自增或自减。Redis还会在某些情况下将整数换成浮点数。整数的取值范围和系统的长整数的取值范围相同,而浮点数的取值范围和精度则与IEEE 754标准的双精度浮点数相同。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 |
当用户将值存储到Redis中时,Redis会自动解析这个值是否为十进制。若是十进制,则允许用户对这个字符串进行INCR*和DECR*操作。若用户对一个不存在的key或保存了空串的key执行自增或自减操作,那么Redis在执行操作时会将这个键的值当做是0。若用户尝试对一个值无法被解释为整数或浮点数的字符串key执行自增或自减,那么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 将字节串看成是二进制位串(bit string),并将位串中偏移量诶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会自动使用空字节(NULL)来将字符串扩展至所需的长度,然后才执行写入或更新操作。在使用GETRANGE读取字符串时,超出字符串末尾的数据会被视为空串,而是用GETBIT读取二进制位串时,超出字符串末尾的二进制位会被视为0。
列表(List)
Redis的列表允许用户从序列的两端推入或弹出元素么获取列表元素以及执行各种常见的列表操作。
命令 | 用例和描述 |
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的元素也会被保留 |
BLPOP | BLPOP key-name [key-name ..] timeout 从第一个非空列表中弹出位于最左端的元素或在timeout秒之内阻塞并等待可弹出的元素出现 |
BRPOP | BRPOP key-name [key-name ..] timeout 从第一个非空列表中弹出位于最右端的元素或在timeout秒之内阻塞并等待可弹出的元素出现 |
RPOPLPUSH | RPOPLUSH source-key dest-key 从source-key列表中弹出位于最右端的元素,然后将这个元素推入dest-key列表的最左端,并向用户返回这个元素 |
BRPOPLPUSH | BRPOPLUSH source-key dest-key timeout 从source-key列表中弹出位于最右端的元素,然后将这个元素推入dest-key列表的最左端,并向用户返回这个元素;若source-key为空,那么在timeout秒之内阻塞并等待可弹出的元素出现 |
集合
Redis的集合以无序的方式来存储多个各不相同的元素,用户可以快速地对集合执行添加元素操作,移除元素操作以及检查一个元素是否存在于集合里。
命令 | 用例和描述 |
SADD | SADD key-name item [item..] 将一个或多个元素添加到集合里面,并返回被添加元素当中原本并不存在于集合里面的元素的数量 |
SREM | SREM key-name item [item..] 从集合里面移除一个或多个元素,并返回被移除元素的数量 |
SISMEMBER | SISMEMBER 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 |
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 | SUNION dest-key key-name [key-name] 将那些至少存在于一个集合中的元素存储到dest-key键里面 |
散列
Redis的散列可以让用户将多个键值对存储到一个Redis键里面。若散列非常大,可以使用HKEYS取出散列中的所有的key,然后使用HGET一个一个取出键的值。防止一次获取多个大体积的值而导致服务器的阻塞。
命令 | 用例和描述 |
HMGET | HMSET key-name key [key..] 从散列里面获取一个或多个键的值 |
HMSET | HMSET key-name key value [key value..] 为散列里面的一个或多个键设置值 |
HDEL | HDEL key-name key [key..] 删除散列里面的一个或多个键值对,返回成功并删除的键值对的数量 |
HLEN | HLEN key-name 返回散列包含的键值对数量 |
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 |
有序集合
Redis的有序集合存储着成员与分值之间的映射,并且提供了分值处理命令,以及根据分值大小有序地获取(fetch)或扫描(scan)成员和分值的命令。ZINTERSTORE和ZUNIONSTORE会默认使用聚合函数为sum把各个有序集合的成员的分值加起来。用户可以把集合座位输入传给ZINTERSTORE和ZUNIONSTORE,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,那么成员的分值也一并返回 |
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 | ZREVRANGEBYSCORE key-name start stop 移除有序集合排名介于start和stop之间的所有成员 |
ZREMRANGEBYSCORE | ZRENRANGEBYSCORE 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] 对给定的有序集合执行类似于结合的并集运算 |
发布和订阅
发布和订阅的特点是订阅者负责订阅频道,发送者负责向频道发送二进制字符串消息。每当有消息被发送地址给定频道时,频道的所有订阅者会收到消息。在刚开始订阅一个频道时,客户端会接收到一条关于被订阅频道的反馈消息。在退订频道时,客户端会接收到一条反馈消息,告知被退订的时哪个频道,以及客户端目前仍在订阅的频道的数量。
命令 | 用例和描述 |
SUBSCRIBE | SUBSCRIBE channel [channel..] 订阅给定的一个或多个频道 |
UNSUBSCRIBE | UNSUBSCRIBE [channel [channel ..]] 退订给丁的一个或多个频道,若执行是没有给定任何频道,那么退订所有频道 |
PUBLISH | PUBLISH channel message 向给定频道发送消息 |
PSUBSCRIBE | PSUBSCRIBE pattern [pattern ..] 订阅与给定模式相匹配的所有频道 |
PUNSUBSCRIBE | PUNSUBSCRIBE [pattern [pattern ..]] 退订给定的模式,若执行时没有给定任何模式,那么退订所有模式 |
排序
命令 | 用例和描述 |
SORT | SORT source-key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ..]] [ASC|DESC] [ALPHA] [STORE dest-key] 根据给定的选项,对输入列表,集合或者有序集合进行排序,然后返回或者存储排序的结果 |
conn.rpush(‘sort-input‘, 23, 15, 110, 7);
conn.sort(‘sort-input‘); // 7 14 23 110
conn.sort(‘sort-input‘, alpha=True); // 110 15 23 7
conn.hset(‘d-7‘, ‘field‘, 5);
conn.hset(‘d-15‘, field, 1);
conn.hset(‘d-23‘, field, 9);
conn.hset(‘d-110‘, field, 3);
conn.sort(‘sort-input‘, by=‘d-*->field‘); // 15 110 7 23
conn.sort(‘sort-input‘, by=‘d-*->field‘, get=‘d-*->field‘); //1 3 5 9
事务
Redis的基本事务需要用到MULTI命令和EXEC命令,这种事务可以让一个客户端在不被其他客户端打断的情况下执行多个命令。被MULTI命令和EXEC命令包围的所有命令会一个接一个执行,直到所有命令都执行完毕为止。当一个事务执行完毕后,Redis才会处理其他客户端的命令。当Redis从一个客户端那里接受到MULTI命令时,Redis会根据这个客户端之后发送的所有命令都放到一个队列中,直到这个客户端发送EXEC命令为止。因此Redis可以在不被打断的情况下,一个接一个地执行存储在队列里面的命令。
键的过期时间
对于列表,集合,散列和有序集合这样的容器来说,键过期命令只能为整个键设置过期时间,而没办法为键里面的单个元素设置过期时间。
命令 | 用例和描述 |
PERSIST | PERSIST key-name 移除键的过期时间 |
TTL | TTL key-name 查看给定键距离过期还有多少秒 |
EXPIRE | EXPIRE key-name seconds 让给定键在指定的秒数后过期 |
EXPIREAT | EXPIPEAT key-name timestamp 将给定键的过期时间设置为给定的UNIX时间戳 |
PTTL | PTTL key-name 查看给定键距离过期时间还有多少毫秒 |
PEXPIRE | PEXPIRE key-name milliseconds 让给定键在指定的毫秒数之后过期, |
PEXPIREAT | PEXPIREAT key-name timestamp-milliseconds 将一个毫秒级精度的UNIX时间戳设置为给定键的过期时间 |
conn.set(‘key‘, ‘value‘);
conn.expire(‘key‘, 100);
conn.ttl(‘key‘);
以上是关于Redis基础的主要内容,如果未能解决你的问题,请参考以下文章