Redis命令基本使用

Redis的概述

  • RedisRemote Dictionary Server)即远程字典服务,是单线程的多路IO复用
  • 是一个开源的内存数据结构存储,用作数据库、缓存、消息代理
  • Redis 是用ANSI C编写的,推荐使用Linux进行部署。Windows版本没有官方支持。
  • NoSql:no only sql(不仅仅是sql),泛指非关系型数据库,没有固定的查询语言

Redis能干嘛?

  1. 内存存储,持久化(rdb,aof)

  2. 效率高,可以用于高速缓存

  3. 发布订阅系统

  4. 地图信息分析

  5. 计时器、计数器(浏览量)

Redis命令

通用命令

  1. **select <数字> :**切换库,redis默认有16个库,默认进入0号库

  2. **dbsize :**查看当前数据库的key的数量

  3. del … : 删除指定的key数据

  4. type : 查看你的key是什么类型

  5. expire <数字>(以秒为单位): 给指定的key设置过期的时间

  6. ttl : 查看key还有多少秒过期,-1表示永不过期,-2表示已过期

  7. **flushdb :**清空数据库

  8. **flushall :**通杀数据库

  9. clear :清屏命令

  10. keys * : 查看当前库所有key 可使用? *模糊查询

一、字符串

  1. set [ex |px |EXAT |PXAT |KEEPTTL] [NX|XX] [GET]]:
    新建 key ,如果 key 已经保存了一个值,则无论其类型如何,都会将其覆盖(返回值: OK

    ​ 在成功的set操作时,将丢弃与该键关联的任何先前的生存时间

    ​ 可选操作: value 后加上 xx 时只会对已经存在的 key 进行设置操作,如果 key 不存在返回 nil

    ​ — nx :仅当不存在时才设置它

    ​ — ex :设置指定的过期时间,以秒为单位

    ​ — px :设置指定的过期时间,以毫秒为单位

    ​ — keepttl :保留与 key 关联的生存时间

    ​ — get :返回存储在 key 中的旧字符串

    ​ 注意:由于 set 命令选项可以替换 setnxsetexpsetexgetset,因此在未来的 Redis 版本中,这些命令可能会被弃用 并最终被删除。

  2. setnx :
    只有在 key 不存在时,设置 key 的值 (命令在设置成功时返回 1 ,设置失败时返回 0

  3. setex :
    key 的值设置为 value ,并将 key 的生存时间设置为 seconds 秒钟。

    setex 是一个原子性操作,它可以在同一时间内完成设置和设置过期时间这两个操作
    ​ 如果 key 已存在,那么 setex 命令将覆盖已有的值
    ​ (扩展:seconds 的意思)

  4. psetex <毫秒> :

    ​ 这个命令和 setex 命令相似,但它是以 毫秒 为单位设置 key 的生存时间,而不是像 setex 命令那样以为单位进行设置,命令在设置成功时返回OK

  5. get :

    ​ 查询对应键值,如果 key 不存在,那么返回特殊值 nil ;否则返回 key 的值

    ​ 如果 key 的值并非字符串类型,那么返回一个错误,因为 get 命令只能用于字符串值

  6. getset :
    key 的值设置为 value ,并返回 key 在被设置之前的旧值
    如果 key 没有旧值,也就是说, key 在设置之前并不存在,那么命令返回 nil
    key 存在但不是字符串类型时,命令返回一个错误

  7. mset … :
    同时为多个键设置值,如果某个键已经存在,那么 mset 将使用新值覆盖旧值
    如果这不是你所希望的效果,请考虑使用 msetnx ,这个命令只会在所有给定键都不存在的情况下进行设置
    mset 是一个原子性操作(有一个失败,则都失败),所有给定键都会在同一时间内被设置,不会出现某些键被设置了但是 另 一些键没有被设置的情况
    mset 命令总是返回 OK

  8. mget … :
    返回给定的一个或多个字符串键的值
    如果给定的字符串键里面,有某个键不存在,那么这个键将以特殊值 nil 表示
    mget 命令将返回一个列表,列表中包含了所有给定键的值

  9. setrange :
    从偏移量 offset 开始,用 value 参数覆写 key 储存的字符串值,如果 key 原来储存的字符串长度比偏移量小,那么原字符和 偏移量之间的空白将用0字节(\x00)进行填充
    不存在的 key 当作空白字符串处理,不可用负数
    (扩展: offset 名词是开端的意思)

  10. getrange :

​ 返回 key 的字符串值的指定部分,字符串的截取范围由 startend 两个偏移量决定
​ 索引从 0 开始, 0 表示第一个字符 负数偏移量表示从字符串的末尾开始计数,-1 表示最后一个字符

  1. append :
    将给定的追加到原值的末尾,若key不存在,则会新建key(返回值:附加value之后,key的值的长度)
  2. incr :
    key 中存储的数字值增 1(只能对数字值操作),如果 key 不存在,那么它的值会先被初始化为 0 ,然后再执行 incr 命令 (返回值:key 在执行加 1 操作之后的值)
  3. decr :
    key 中存储的数字值减 1 (只能对数字值操作),如果 key 不存在,那么它的值会先被初始化为 0 ,然后再执行 decr 命令 (返回值:key 在执行减 1 操作之后的值)
  4. incrby <步长(n)> :
    key 中存储的数字值增加 n ,如果key不存在,那么它的值会先被初始化为 0 ,然后再执行 incrby 命令
    如果 key 存储的值不能被解释为数字,那么返回一个错误
  5. incrbyfloat <步长> :
    同上,可以增加整数也可以增加浮点数如(5.5,4.2),而 incrby 使用浮点数则会报错
  6. decrby <步长(n)> :
    key 中存储的数字值减 n ,如果 key 不存在,那么它的值会先被初始化为 0 ,然后再执行 decrby 命令
    如果 key 存储的值不能被解释为数字,那么返回一个错误
  7. strlen :
    获取 key 存储的字符串值的长度,当 key 不存在时,命令返回 0
    如果 key 的值并非字符串类型,那么返回一个错误
  8. exists :
    判断某个 key 是否存在

二、列表

  1. lpush/rpush … :

    lpush 将一个或多个 value 从左到右插入到列表 key 的表头,注意,采用头插法的方式插入数据

    rpush 采用从右到左,采用尾插法

    ​ 当 key 存在但不是列表类型时,返回一个错误

  2. lpushx/rpushx … :

​ 与 lpush/rpush 相反,只对 key 存在并且是个列表时才执行设置操作,如果 key 不存在,则什么也不做

  1. lrange

​ 返回列表 key 中指定区间的元素,区间以偏移量 startstop 指定

0 表示第一个元素, 1 表示第二个元素,你也可以使用负数下标,-1 表示最后一个元素, -2 表示倒数第二个元素

​ 超出范围的下标值不会引起错误,如果 start 下标比列表的最大下标(end)还要大,那么 lrange 返回一个空列表

​ 如果 stop 下标比 end 下标还要大, redisstop 的值设置为 end

  1. lpop/rpop [n]:

lpop :移除并返回列表 keyn 个头元素,当 key 不存在时,返回 nil ,当值被移除完,则 key 不再存在

rpop :移除并返回列表 keyn 个尾元素,当 key 不存在时,返回 nil ,值在键在,值光键亡。

​ 返回值是被移除的元素

  1. rpoplpush :

​ 将列表 key1 的尾元素移除并添加到列表 key2 的头部,作为列表 key2 的头元素

​ 如果key1或key2不存在,值nil会被返回,并且不执行其他操作

​ 如果key1 和 key2 相同,则列表中的表尾元素将会被移动到表头,并返回该元素

  1. llen :

​ 返回列表key的长度,如果key不存在,则key被解释为一个空列表,返回0

​ 如果key不是列表类型,返回一个错误

  1. lrem :

​ 根据参数count,移除count个列表中与参数value相等的元素

​ count>0:表示从表头开始向表尾搜索,移除count个列表中与参数value相等的元素

​ count<0:表示从表尾开始向表头搜索,移除count(绝对值)个列表中与参数value相等的元素

​ count=0:表示移除表中所有与value相等的值

​ 返回值是被移除元素的数量;当key不存在时,会被视为空表,lrem命令总是返回0

  1. lindex :

​ 返回列表key中,下标为index的元素

​ 0表示第一个元素,-1表示最后一个元素,如果key不是列表类型,则返回一个错误

​ 如果index参数的值不在列表的区间范围内,,返回nil

  1. linsert Before|After :

​ 将值value2 插入到列表key中,位于值value2 之前或之后,插入成功后返回操作之后列表的长度

​ 当value1不存在于列表key时,不执行操作,返回-1

​ key不存在时视为空列表,不执行任何操作,返回0;key不是列表类型时,返回一个错误

​ (如果列表中有多个value1,从头元素开始向尾元素查找,以第一个找到的value1为准,并不会每个value1前或后都插入)

  1. lset :

​ 将列表key下标为index的值设置为value

​ 当index参数超出范围,或对一个空列表(key不存在)进行lset时,返回一个错误

  1. ltrim

​ 只保留列表key [start,stop] 这个区间的值,其余元素全部删除,当key不是列表类型时,返回一个错误

​ 超出范围的下标值不会引起错误

​ 如果start的值比列表的最大下标end还要大,或者大于stop,那么整个列表都会被清空,返回一个空列表

​ 如果stop的值比end还要大,redis会将stop的值设置为end

三、set无序集合(元素可重复)

  1. sadd … :

​ 将一个或多个member元素加入到集合key中,已经存在集合中的元素将被忽略

​ 当key不是集合类型时,返回一个错误

  1. sismember :

​ 判断member元素是否key集合的成员,是 返回1 ,否或key不存在 返回0

  1. spop [count] :

​ 移除并返回集合中的一个随机元素

  1. srandmember [count] :

​ 如果只提供key参数,那么返回集合中的一个随机元素,如果集合为空,返回空数组

​ 如果count为正数,返回一个元素不重复的数组,如果conut大于等于集合基数,那么返回整个集合

​ 如果count为负数,那么返回一个元素可能会重复多次的数组,而数组的长度为count的绝对值

  1. srem … :

​ 移除集合key中的一个或多个元素,不存在的member元素会被忽略,key不是集合类型时,返回一个错误

  1. smove :

​ 将memder元素从source集合移动到destination集合,smove是原子性操作

​ 当destination集合中已包含memder元素,smove只是简单地将source集合中的memder元素删除

​ 当source或destination不是集合类型时,返回一个错误

  1. scard :

​ 返回集合key的基数(集合中元素的数量),当key不存在时返回0

  1. smembers :

​ 返回集合key 中的所有成员,不存在的key视为空集合

  1. sinter [key] … :

​ 返回一个集合的全部成员,如果给定多个集合,是返回所有给定集合的交集,不存在的key被视为空集(当然,结果也是空集)

  1. sinterstore [key] … :

​ 这个命令类似于sinter,但它将结果保存到destination集合,而不是简单地返回结果集

​ 如果destination集合已经存在,则将其覆盖,destination也可以是key本身

  1. sunion [key] … :

​ 返回一个集合的全部成员,该集合是所有给定集合的并集,不存在的key被视为空集

  1. sunionstore [key] … :

​ 这个命令类似于sunion,但它将结果保存到destination集合,而不是简单地返回结果集

​ 如果destination集合已经存在,则将其覆盖,destination也可以是key本身

  1. sdiff [key2] … :

​ 返回一个集合的全部成员,该集合是所有给定集合的差集(key1 中的,不包含key2 中的),不存在的key被视为空集

  1. sdiffstore [key] … :

​ 这个命令类似于sdiff,但它将结果保存到destination集合,而不是简单地返回结果集

​ 如果destination集合已经存在,则将其覆盖,destination也可以是key本身

四、哈希表

  1. hset [field value] … :

​ 将哈希表key(hash)中域field的值设置为value

  1. hsetnx [field value] … :

​ 仅在域field尚未存在域哈希表hash的情况下将它的值设置为value,如果已存在,则放弃操作

  1. hget :

​ 返回哈希表hash给定域field中的值

  1. hexists :

​ 判断给定域field 是否存在于哈希表hash 中

  1. hdel [field] … :

​ 删除哈希表hash 中的一个或多个指定域,不存在的域将被忽略

  1. hlen :

​ 返回哈希表 key 中域的数量

  1. hstrlen :

​ 返回哈希表key中,与给定域相关联的值的字符串长度

  1. hincrby :

​ 为哈希表key中的域field的值加上增量 increment,增量也可以为负数,相当于对给定域进行减法操作

​ 如果 key 不存在,一个新的哈希表 key 被创建并执行 hincrby 命令

​ 如果域 field 不存在,那么在执行命令前,域 field 的值被初始化为 0

​ 对一个储存字符串值的域 field 执行 hincrby 命令将造成一个错误

  1. hincrbyfloat :

​ 为哈希表 key 中的域 field 加上浮点数增量 increment

  1. hmget [field] … :

​ 返回哈希表 key 中一个或多个给定域 field 的值

  1. hkeys :

​ 返回哈希表 key 中所有的域

  1. hvals :

​ 返回哈希表 key 中所有域的值

  1. hgetall :

​ 返回哈希表 key 中所有的域和值

  1. hdel [field] … :

​ 从哈希表 key 中删除指定的域 field ,不存在的指定域将被忽略

五、有序集合(元素不可重复)

  1. zadd [score member] … :

​ 将一个或多个 member 元素及其 score 值加入到有序集 key 当中

  1. zscore :

​ 返回有序集 key 中成员 memberscore

  1. zincrby :

​ 为有序集 key 的成员 memberscore 值加上增量 increment ,也可传递负数值(可传递双精度浮点数)

​ 如果 key 不存在或 member 不是 key 中的成员时,会先创建 keymember 再进行 zincrby 命令

  1. zcard :

​ 返回有序集 key 的基数

  1. zcount :

​ 返回有序集 key 中,score 值在 minmax 之间(默认包括 score 值等于 minmax )的成员的数量

  1. zrange 【withscores】:

​ 返回有序集 key 中指定区间内的成员,成员的位置按照 score 值递增(从小到大)来排序

​ 可以通过使用 withscores 选项,来让成员和它的 score 值一并返回

  1. zrevrange 【withscores】 :

​ 除了成员的位置是按照 score 值递减(从大到小)来排序,其他功能域 zrange 命令一样

  1. zrangebyscore|zrevrangebyscore 【withscores】【limit 】:

​ 返回有序集key 中,所有 score 值介于minmax 之间(默认包括等于 minmax)的成员。

​ 通过在参数前增加 ( 符号来使用可选的开区间

​ 有序集成员按 score 值递增(zrangebyscore)或递减(zrevrangebyscore)排序

​ 可选的 limit 参数指定返回结果的区间

minmax 的值可以时 -inf+inf ,这样你就可以在有序集的最低和最高 score 值的情况下使用zrangebyscore这条命令

  1. zrank :

​ 返回有序集 key 中成员 member 的排名,其中有序集成员按 score 值递增排序,排名从 0 开始,也就是说,score 值最小的 成员排名为 0

  1. zrevrank :

​ 返回有序集 key 中成员 member 的排名,其中有序集成员按 score 值递减排序,排名从 0 开始,也就是说,score 值最大的成 员排名为 0

  1. zrem [member] … :

​ 移除有序集 key 中的一个或多个成员,不存在的成员将被忽略

  1. zremrangebyrank

​ 移除有序集 key 中,指定排名(rank)区间内的所有成员

0 表示第一个,-1 表示最后一个 (包含 startstop)在内

  1. zremrangebyscore :

​ 移除有序集 key中,所有**score**值介于minmax (默认包括等于minmax)的成员

​ 通过在参数前增加( 符号来使用可选的开区间

  1. zlexcount :

​ 对于一个所有成员的分值都相同的有序集合key来说,这个命令会返回该集合中,成员介于 min 和 `max 范围内的元素数量

(合法的 minmax 必须携带 [( 来表明闭区间或开区间)

​ 特殊值 -+min 参数以及 max 参数中具有特殊的意义,其中 + 表示正无限 - 表示负无限

  1. zremrangebylex :

​ 对于一个所有成员的分值都相同的有序集合 key 来说,这个命令会移除该集合中,成员介于 minmax 范围内的所有元素

  1. zunionstore [key …] [weights [weight …]] [aggregate [sum|min|max]] :

​ 计算给定的一个或多个有序集的并集,其中给定 key 的数量必须以 numkeys 参数指定,并将该并集(结果集)储存到 destination

​ 默认情况下,结果集中某个成员的 score 值是所有给定集下该成员 score 值之

​ 使用 WEIGHTS 选项,你可以为 每个 给定有序集 分别 指定一个乘法因子,每个给定有序集的所有成员的 score 值在传递给聚合函 数之前都要先乘以该有序集的因子。如果没有指定 WEIGHTS 选项,乘法因子默认设置为 1

​ 使用 AGGREGATE 选项,你可以指定并集的结果集的聚合方式,默认使用的参数 SUM,可以将所有集合中某个成员的 score 值之 作为结果集中该成员的 score 值;使用参数 MIN ,可以将所有集合中某个成员的 最小 score 值作为结果集中该成员的 score 值;而参数 MAX 则是将所有集合中某个成员的 最大 score 值作为结果集中该成员的 score 值。

  1. zinterstore [key …] [weights [weight …]] [aggregate [sum|min|max]] :

​ 计算给定的一个或多个有序集的交集,其余功能与 zunionstore 命令一致

六、Bitmaps

  1. setbit :

​ 设置或清除存储在key的 字符串值 中 offset 的位(bit

​ 位的设置或清除 取决于value的参数,可以是 0 也可以是 1

offset 参数必须大于或等于 0

​ 字符串会进行伸展以确保它可以将 value 保存在指定的偏移量上,当字符串值进行伸展时,空白位置以0填充

  1. getbit :

​ 返回存储在 key 的字符串值中 offset 处的位值

​ 当 offset 比字符串值的长度大,或者 key 不存在时,返回 0

  1. bitcount [start] [end] :

​ 计算给定字符串 key 中,被设置为 1 的 位数

​ 通过指定额外的 startend 参数,可以让计数只在特定的区间进行

  1. bitpos [start] [end] :

​ 返回位图中第一个值为 bit 的二进制位的位置

​ 通过可选的 start 参数和 end 参数指定要检测的范围

  1. bitop [key …] :

​ 在多个键key 之间执行按位运算并将结果存储在目标键destkey中

BITOP AND destkey key [key ...] ,对一个或多个 key 求逻辑并,并将结果保存到 destkey

BITOP OR destkey key [key ...] ,对一个或多个 key 求逻辑或,并将结果保存到 destkey

BITOP XOR destkey key [key ...] ,对一个或多个 key 求逻辑异或,并将结果保存到 destkey

BITOP NOT destkey key ,对给定 key 求逻辑非,并将结果保存到 destkey

​ 除了 NOT 操作之外,其他操作都可以接受一个或多个 key 作为输入。

​ **处理不同长度的字符串:**当 bitop 处理不同长度的字符串时,较短的那个字符串所缺少的部分会被看作 0

​ **返回值:**保存到 destkey 的字符串的长度,和输入的 key 中最长的字符串长度相等

七、HyperLogLog (值不能重复)

  1. pfadd [element …] :

​ 将任意数量的元素添加到指定的 HyperLogLog 里面

​ 调用 pfadd 命令时可以只给定键名而不给定元素

​ ·····如果给定的键 key 已经是一个 HyperLogLog ,那么这种调用不会产生任何效果

​ ····如果给定的键 key 不存在,那么命令会创建一个空的 HyperLogLog ,并向客户端返回 1

返回值: 如果 HyperLogLog 的内部储存被修改了,那么返回 1 ,否则返回 0

  1. pfcount [key …] :

​ 返回一个或多个键的 基数(有点像求并集的意思)

  1. pfmerge [sourcekey …] :

​ 将多个 HyperLogLog 合并为一个 HyperLogLog , 合并得出的 HyperLogLog 会被储存在 destkey 键里面

八、Geo (地理位置)

  1. geoadd [xx|nx] [ch] [longitude latitude member …] :

​ 将给定的空间元素 经度(longitude)纬度(latitude)名字(member)添加到指定的键 key 里面

geoadd 命令以标准的 x,y 格式接收参数,所以用户必须先输入经度,然后再输入纬度

geoadd 能够记录的坐标是有限的:非常接近两极的区域无法被索引

​ —有效的经度介于 -180 度至 180 度之间。

​ —有效的纬度介于 -85.05112878 度至 85.05112878 度之间。

注意: 没有 geodel 命令,因为您可以使用 zrem 删除元素 ,Geo索引结构只是一个排序集

geoadd 还提供以下选项: Redis 版本 >= 6.2.0:添加了 CHNXXX 选项。

​ — xx :只更新已经存在的元素。永远不要添加新元素

​ — nx :不要更新已经存在的元素。总是添加新元素。

​ — ch :将返回值从添加的新元素数修改为已更改的(添加或更新)元素数

返回值:

​ — 当不使用可选参数时,添加到排序集中的元素数量(不包括分数更新)。

​ — 如果使用可选参数 ch 时,则为已更改(添加或更新)的元素数。

  1. geopos [member …] :

​ 从键 key 里面返回所有给定位置元素的位置(经度和纬度)

  1. geodist [unit] :

​ 返回两个给定位置之间的距离,如果两个位置之间的其中一个不存在,那么命令返回空值

​ 指定单位的参数 unit 必须是以下单位的其中一个:

​ — m 表示单位为 (默认值)

​ — km 表示单位为 千米

​ — mi 表示单位为 英里

​ — ft 表示单位为 英尺

  1. geohash [member …] :

​ 返回一个或多个位置元素的 geohash

Redis 事务 锁机制 秒杀

redis事务提供了一种“将多个命令打包, 然后一次性、按顺序地执行”的机制, 并且事务在执行的期间不会主动中断 —— 服务器在执行完事务中的所有命令之后, 才会继续处理其他客户端的其他命令。

使用MULTI命令输入 Redis 事务。该命令始终以 回复OK。此时用户可以发出多个命令。Redis 不会执行这些命令,而是将它们排队。一旦调用EXEC ,所有命令都会执行。所以Redis中一个事务从开始到执行会经历 开始事务命令入队执行事务 三个阶段。

相反,调用DISCARD将刷新事务队列并退出事务。

  1. watch [key …] :

    监视一个或多个key,如果在事务执行之前这个(或这些)key被其他命令所改动,那么事务将被打断

  2. unwatch

    取消 WATCH 命令对所有 key 的监视。

    如果在执行 WATCH 命令之后, EXEC 命令或 DISCARD 命令先被执行了的话,那么就不需要再执行 UNWATCH 了。

end…

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

oah1021

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值