Redis基础知识(学习笔记8--Redis命令(1))

一 基本命令

1.1.Redis 数据库间的切换

>select DB的标号(即index 默认的是0-15

1.2.查询数据库中有多少个key

>dbsize

 1.3.删除当前库中的数据

>flushdb

将当前库里面的数据删除

1.4.删除所有实例上的数据

>flushall

1.5.退出

>quit

>exit

注意:下面的这个shutdow是关闭Redis服务。

>shutdown

 二 Key 操作命令

2.1 keys

>keys pattern

查找所有符合给定模式pattern的key,pattern为正则表达式。

说明:keys的速度非常快,但在一个大的数据库中使用它,可能会阻塞当前服务器的服务。所以,生产环境中一般不推荐使用该命令,而推荐使用scan命令替代。

2.2 exists

>exists key

检查给定key是否存在。

说明:若key存在,返回1;否则返回0.

2.3 del

>del key [key...]

删除给定的一个或多个key。不存在的key会被忽略。

说明:返回被删除key的数量。

 2.4 rename

>rename key newkey

将key改名为newkey

说明:当key和newkey相同,或者key不存在时,返回一个错误。当newkey已经存在时,rename 命令将覆盖旧值,改名成功时提示OK,失败时返回一个错误。

2.5 move

> move key db

将当前数据库的key移动到给定的数据库db中。

说明:如果当前数据库(源数据库)和给定的数据库(目标数据库)有相同名字的给定key,或者key不不存在于当前数据库,那么,move没有任何效果。移动成功返回1,失败返回0.

2.6 type

>type key

返回key所存储的值的类型。

说明:返回值有以下6种。(1)none (表示key不存在);(2)string(字符串);(3)list(列表);(4)set(集合);(5)zset(有序集合);(6)hash(哈希表)。

 2.7 expire 与 pexpire

>expire key seconds 

为给定key设置生存时间。当key过期时(生存时间为 0),它会被自动删除。expire的时间单位为秒,pexpire的时间单位为毫秒。在Redis种,带有生存时间的key被称为”易失的“(volatile)。

说明:生存时间设置成功返回1。若key不存在时,返回0。rename操作不会改变key的生存时间。

2.8 ttl 与 pttl

>ttl key

TTL(time to live),返回指定key的剩余生存时间。

说明:其返回值存在三种可能:(1)当key不存在时,返回 -2;(2)当key存在,但没有设置剩余生存时间时,返回 -1;(3)否则,返回key的剩余生存时间。ttl命令返回的时间单位为秒,而pttl命令返回的时间单位为毫秒。

2.10 persist

>persist key

去除给定key的生存时间,将这个key从”易失的“转换成”持久的“。

说明:当生存时间移除成功时,返回1;若key不存在或key没有设置生存时间,则返回0。

2.11 randomkey

>RANDOMKEY

从当前数据库种随机返回(不删除)一个key。

说明:当前数据库不为空时,随机返回一个 key(不删除) 。 当数据库为空时,返回 nil(windows 系统返回 null)。此命令一般用来判断数据库是否是空的。

 2.12 scan

>SCAN cursor [MATCH pattern] [COUNT count] [TYPE type]

用于迭代数据库种的数据库库键,其参数意义:

  • cursor - 本次迭代开始的游标(可以简单的理解为从哪儿开始);
  • pattern - 本次迭代要匹配的key的模式(注意是从筛选出的count个元素种进行的匹配);
  • count - 可选,用于指定本次迭代返回的 key 的数量,默认值为 10 ;
  • type--可选,本次迭代要返回的value的类型,默认为所有类型【是从前面筛选出来的元素种进行的刷选】。

SCAN 命令是一个基于游标cursor的迭代器:scan命令每次被调用之后, 都会向用户返回一个包含两个元素的数组, 第一个元素是用于进行下一次迭代的新游标, 而第二个元素则是一个数组, 这个数组中包含了所有被迭代的元素。用户在下次迭代时需要使用这个新游标作为scan命令的游标参数,以此来延续之前的迭代过程。当scan命令的游标参数被设置为0时,服务器将开始一次新的迭代。如果新游标返回0,表示迭代已结束。

说明:使用间断的、负数、超出范围或者其他非正常的游标来执行增量式迭代不会造成服务崩溃。

当数据量很大时,count的数据量的指定可能不起作用,Redis会自动调整每次的遍历数目。由于scan命令每次执行都只会返回少量元素,所以,该命令可以用于生产环境,而不会出现keys命令带来的服务阻塞问题。

增量式迭代命令所使用的算法只保证在数据集的大小有界的情况下迭代才会停止,换句话说,如果被迭代数据集的大小不断地增长的话,增量式迭代命令可能永远也无法完成一次完整迭代,即当一个数据集不断地变大时,想要访问这个数据集种的所有元素就需要做更多的工作,能否结束一个迭代取决于用户执行迭代的速度是否比数据增长的速度更快。

相关命令:另外还有3个scan命令用于对三种类型的value进行遍历:

* hscan:属于HASH型value操作命令集合,用于遍历当前db中指定hash表的所有field-value对。

* sscan:属于Set型value操作命令集合,用于遍历当前db中指定set集合的所有元素。

* zscan:属于ZSet型value操作命令集合,用于遍历当前db中指定指定集合的所有元素(数值与元素值)。

三. String类型Value 相关命令

String类型的value中可以存放任意数据,包括数值型,甚至是二进制的图片、音频、视频、序列化对象等。一个String类型的Value最大是512M大小。

3.1 set

>set key value [ex seconds | px milliseconds][nx|xx]

set 除了可以直接将key的值设置为value外,还可以指定一些参数:

* ex seconds:为当前key设置过期时间,单位为秒。等价于SETEX命令。

* px milliseconds:为当前key设置过期时间,单位为毫秒。等价于PSETEX命令。

* nx:指定key不存在才会设置成功,用于添加指定的key。等价于SETNX命令。

* xx:指定key必须存在才会设置成功,用于更新指定key的value。

说明:如果value字符串中带有空格,则该字符串需要使用双引号或者单引号引起来,否则会认为set命令的参数数量不准确而报错。

 3.2 setex 和 psetex

>setex/psetex key seconds value

set expire,其不仅为key指定了value,还为其设置了生存时间。

说明:如果key已经存在,则覆盖旧值。该命令类似于以下两个命令(set key value;expire key seconds),不同之处是,setex是一个原子性操作,关联值和设置生存时间两个动作会在同一个时间内完成,该命令在Redis用作缓存时,非常实用。

3.3 setnx

>setnx key value

SET if Not eXists,将key的值设置为value,当且仅当key不不存在。若给定的key已经存在,在SETNX不做任何动作。成功,返回1;否则,返回0。

说明:该命令等价于set key value nx。

3.4 getset

>getset key value

将给定key的值设置为value,并返回key的旧值。

说明:当key存在但不是字符类型时,返回一个错误;当key不不存在时,返回nil。

 3.5 mset 与 msetnx

>mset/msetnx key value [key value...]

同时设置一个或多个key-value对。

说明:如果某个给定key已经存在,那么MSET 会用新值覆盖原来的旧值,如果这不是你所希望的效果,可以考虑使用MSETNX命令:它只会在所有给定key都不存在的情况下进行设置操作。MSET/MSETNX是一个原子性(atomic)操作,所有给定key都会在同一时间内被设置,某些给定key被更新而另一些给定key没有改变的情况不可能发生。该命令永不失败。

3.6 mget

>mget key [key...]

返回所有(一个或多个)给定key的值。

说明:如果给定的key里面,有某个key不存在,那么这个key返回特殊值nil,其他key正常返回。因此,该命令永不失败。

3.7 append

>append key value

如果key已经存在并且是一个字符串,append命令将value追加到key原来值的末尾。如果key不存在,append就简单地将给定key设为value,就像执行set key value 一样。

说明:追加value之后,返回值为 key的字符串长度。

3.8 incr 与 decr

>incr key 或 decr key

increment:自动递增,将key中存储的数字值+1;

decrement:自动递减,将key中存储的数字值-1。

说明:如果key不存在,那么key的值会先被初始化为0,然后再执行+1或者-1的操作。如果值不能表示为数字,那么返回一个错误提示。如果执行正确,则返回+1或者-1后的值。

3.9 incrby 与 decrby

>incrby key increment 或者 decrby key decrement

将key中存储的数字值增加/减少指定的数值,这个数值只能是整数,可以是负数,但不能是小数。

说明:如果key不存在,那么key的值会先被初始化为0,然后再执行增加/减少的操作。如果值不能表示为数字,那么返回一个错误提示。如果执行正确,则返回增加/减少后的值。

3.10 incrbyfloat

>incrbyfloat key increment

为key中所存储的值加上浮点数增量increment

说明:与之前说明的相同。没有decrbyfloat命令,但increment为负数可以实现减操作效果。

3.11 strlen

>strlen key

返回key所储存的字符串值的长度。

3.12 getrange

>getrangge key start end

返回key中字符串值的子字符串。字符串的截取范围由start和end两个偏移量决定,包括start 和 end在内。

说明:end必须要比start大。支持负数偏移量,表示从字符串最后开始计数,-1 表示最后一个字符,-2 表示倒数第二个,以此类推。

3.13 setrange

>setrange key offset value

用value参数替换给定key所储存的字符串,从偏移量offset开始。

说明:当offset值大于str长度时,中间使用零字节\x00填充,即0000 0000字节填充;对于不存在的key当作空串处理。

3.14 位操作命令

名称中包含bit的命令,都是对二进制位的操作命令,例如,setbit、getbit、bitcount、bittop、bitfield。这些命令不常用。

3.15 典型应用场景

(1)数据缓存

(2)计数器

(3)共享Session

       对于一个分布式应用系统,如果将类似用户登入信息这样的Session数据保存在提供登录服务的服务器中,那么如果用户再次提交像收藏、支付等请求时可能会出现问题:在提供收藏、支付等服务的服务器中并没有该用户的Session数据,从而导致该用户需要重新登录。对于用户来说,用户体验很差。

此时,可以将系统中所有用户的session数据全部保存到到Redis中,用户在提交新的请求(像收藏、支付)后,系统先从Redis中查找相应的Session数据,如果存在,则再进行相应的操作,否则跳转到登录页面。这样就不会引发”重新登录“问题。

(4)限速器

         现在很多平台为了防止DoS(Denial of Serive,拒绝服务)攻击,一般都会限制一个IP不能在一秒内访问超过n次。而Redis可以结合Key的过期时间与incr命令来完成限速功能,充当限速器。

注意:其无法防止DDoS(Distibuted Denial of Serive,分布式拒绝服务)的攻击。

 

学习参阅声明

【Redis视频从入门到高级】

https://www.bilibili.com/video/BV1U24y1y7jF?p=11&vd_source=0e347fbc6c2b049143afaa5a15abfc1c】

 

posted @ 2024-06-25 22:34  东山絮柳仔  阅读(20)  评论(0编辑  收藏  举报