1.基本命令
1.1.切换DB
默认使用的是 0 号 DB,可以通过 select db 索引来切换 DB
1.2.查看 key 数量
dbsize 命令可以查看当前数据库中 key 的数量
1.3.删除当前库中数据
flushdb 命令仅仅删除的是当前数据库中的数据,不影响其它库
1.4.删除所有库中数据命令
flushall 命令可以删除所有库中的所有数据
1.5.退出客户端命令
使用 exit 或 quit 命令均可退出 Redis 命令行客户端
2.Key 操作命令
Redis 中存储的数据整体是一个 Map,它的 key 是 String 类型, value 则可以是 String、 Hash 表、List、Set 等类型
2.1.keys
1)命令:keys pattern
2)功能:查找所有符合给定模式 pattern 的 key,pattern 为正则表达式,如:keys *h* 查找DB所有key名含有h的;keys * 查询所有key。keys 的速度非常快,但在一个大的数据库中使用它可能会阻塞当前服务器的服务。生产环境中一般不使用该命令,而使用 scan 命令代替
2.2.exists
1)命令:exists key
2)功能:检查给定 key 是否存在,若存在返回1,反之返回0
2.3.del
1)命令:DEL key [key ...]
2)功能:删除给定的一个或多个 key 。不存在的 key 会被忽略,返回被删除数量
2.4.rename
1)命令:RENAME key newkey
2)功能:将 key 改名为 newkey,当 key 和 newkey 相同,或者 key 不存在时,返回一个错误。当 newkey 已经存在时,将已存在的覆盖
2.5.move
1)命令:MOVE key db
2)功能:将当前数据库的 key 移动到给定的数据库 db 当中,如果当前数据库(源数据库)和给定数据库(目标数据库)有相同名字的给定 key , 或者 key 不存在于当前数据库,那么 MOVE 没有任何效果,成功返回1反之返回0
2.6.type
1)命令:TYPE key
2)功能:返回 key 所储存的值的类型,none (key 不存在) ,string (字符串) ,list (列表) ,set (集合) , zset (有序集) , hash (哈希表)
2.7.expire 与 pexpire
1)命令:EXPIRE key seconds
2)功能:为给定 key 设置生存时间,当 key 过期时(生存时间为 0),它会被自动删除。 expire 的时间单位为秒,pexpire 的时间单位为毫秒。在 Redis 中,带有生存时间的 key 被称为“易失的”(volatile)。rename 操作不会改变 key 的生存时间
2.8.ttl 与 pttl
1)命令:TTL key
2)功能::返回给定 key 的剩余生存时间,当 key 不存在时,返回 -2 ;当 key 存在但没有设置剩余生存时间时,返回 -1 ;否则,返回 key 的剩余生存时间
2.9.persist
1)命令:PERSIST key
2)功能:去除给定 key 的生存时间,将这个 key 从“易失的”转换成“持久的”
2.10.randomkey
1)命令:RANDOMKEY
2)功能:从当前数据库中随机返回(不删除)一个 key,当数据库为空时,返回 nil
2.11.scan
1)命令:SCAN cursor [MATCH pattern] [COUNT count] [TYPE type]
2)功能:用于迭代数据库中的数据库键。SCAN 命令每次被调用之后,都会向用 户返回返回一个包含两个元素的数组, 第一个元素是用于进行下一次迭代的新游标, 而第二个元素则是一个数组, 这个数组中包含了所有被迭代的元素。用户在下次迭代 时需要使用这个新游标作为 SCAN 命令的游标参数,以此来延续之前的迭代过程。当 SCAN 命令的游标参数被设置为 0 时,服务器将开始一次新的迭代。如果新游标返回 0 表示迭代已结束。
3)说明:cursor:本次迭代开始的游标。pattern :本次迭代要匹配的 key 的模式。count :本次迭代要从数据集里返回多少元素,默认值为 10 ,但返回的数量不一定符合count值。type:本次迭代要返回的 value 的类型,默认为所有类型。使用间断的、负数、超出范围或者其他非正常的游标来执行增量式迭代不会造成 服务器崩溃。当数据量很大时,count 的数量的指定可能会不起作用,Redis 会自动调整每次的遍 历数目。由于 scan 命令每次执行都只会返回少量元素,所以该命令可以用于生产环境, 而不会出现像 KEYS 命令带来的服务器阻塞问题。
4)count问题详解:https://www.cnblogs.com/zhaoyongjie-z/p/14311711.html
3.value是String型操作命令
3.1.set
1)命令:SET key value [EX seconds | PX milliseconds] [NX|XX]
2)功能:为 key 设值。EX seconds:为当前 key 设置过期时间,单位秒。等价于 SETEX 命令。PX milliseconds:为当前 key 设置过期时间,单位毫秒。等价于 PSETEX 命令。NX:指定的 key 不存在才会设置成功,用于添加指定的 key。等价于 SETNX 命令。 XX:指定的 key 必须存在才会设置成功,用于更新指定 key 的 value
3.2.setex 与 psetex
1)命令:SETEX/PSETEX key seconds value
2)功能:不仅为 key 指定了 value,还为其设置了生存时间。setex 的单位为 秒,psetex 的单位为毫秒,如果 key 已经存在, 则覆写旧值,在 Redis 用作缓存时,非常实用
3.3.setnx
1)命令:SETNX key value
2)功能:将 key 的值设为 value ,当且仅当 key 不存在。若给定的 key 已经存在,则 SETNX 不做任何动作
3.4.getset
1)命令:GETSET key value
2)功能:将给定 key 的值设为 value ,并返回 key 的旧值,当 key 存在但不是字符串类型时,返回一个错误;当 key 不存在时,返回 nil
3.5.mset 与 msetnx
1)命令:MSET/MSETNX key value [key value ...]
2)功能::同时设置一个或多个 key-value 对,如果某个给定 key 已经存在,那么 MSET 会用新值覆盖原来的旧值;MSETNX 命令则不会
3.6.mget
1)命令:MGET key [key ...]
2)功能:返回所有(一个或多个)给定 key 的值,如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil,该命令永不失败
3.7.append
1)命令:APPEND key value
2)功能:如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原 来的值的末尾。如果 key 不存在, APPEND 就简单地将给定 key 设为 value
3.8.incr 与 decr
1)命令:INCR key 或 DECR key
2)功能:incr 自动递增,将 key 中存储的数字值增一。decr 自动递减,将 key 中存储的数字值减一。如果 key 不存在,那么 key 的值会先被初始化为 0,然后再执行增一/减一操作。 如果值不能表示为数字,那么返回一个错误提示。如果执行正确,则返回增一/减一后的值
3.9.incrby 与 decrby
1)命令:INCRBY key increment 或 DECRBY key decrement
2)功能:将 key 中存储的数字值增加/减少指定的数值,这个数值只能是整数,可以是负 数,但不能是小数。如果 key 不存在,那么 key 的值会先被初始化为 0,然后再执行增/减操作。如 果值不能表示为数字,那么返回一个错误提示。如果执行正确,则返回增/减后的值
3.10.incrbyfloat
1)命令:INCRBYFLOAT key increment
2)功能:为 key 中所储存的值加上浮点数增量 increment,如果 key 不存在,那么 key 的值会先被初始化为 0,然后再执操作
3.11.strlen
1)命令:STRLEN key
2)功能:返回 key 所储存的字符串值的长度
3.12.getrange
1)命令:GETRANGE key start end
2)功能:返回 key 中字符串值的子字符串,字符串的截取范围由 start 和 end 两个偏移 量决定,包括 start 和 end 在内,支持负数偏移量,表示从字符串最后开始计数,-1 表示 最后一个字符,-2 表示倒数第二个
3.13.setrange
1)命令:SETRANGE key offset value
2)功能:用 value 参数替换给定 key 所储存的字符串值 str,从偏移量 offset 开始,当 offset 值大于 str 长度时,中间使用零字节\x00 填充,即 0000 0000 字节填充; 对于不存在的 key 当作空串处理
3.14.典型应用场景
1)数据缓存
Redis 作为数据缓存层,应用服务器首先从 Redis 中获取数据, 如果缓存层中没有,则从 数据库中获取,然后先存入缓存层再返回给应用服务器。
2)计数器
在 Redis 中写入一个 value 为数值型的 key 作为平台计数器、视频播放计数器等,每次有效客户端访问一次,或视频每播放一次,都是直接修改 Redis 中的计数器,然后再以异步 方式持久化到其它数据源中
3)共享 Session
可以将系统中所有用户的 Session 数据全部保存到 Redis 中,用户在提交新的请 求后,系统先从 Redis 中查找相应的 Session 数据,如果存在,则再进行相关操作,否则跳 转到登录页面
4)限速器
为了防止 DoS(Denial of Service,拒绝服务)攻击,让一个 IP 不能在一秒内访问超过 n 次。而 Redis 可以可以结合 key 的过期时间与 incr 命令来完成限速功能,充当限速器。无法防止 DDoS(Distributed Denial of Service,分布式拒绝服务)攻击