对key的操作命令对value的操作命令基本命令先通过redis-cli 命令进入到Redis命令行客户端然后再运行下面的命令。心跳命令ping输入ping命令会看到PONG响应表名客户端与Redis连接正常改命令也称为心跳命令。读写键值命令set key vlaue 会将指定的key-value写入到db。get key 会读取指定key的值。DB切换selectselect 5 切换到5号数据库查看key数量dbsize删除当前库中的数据flushdb删除所有库中的数据flushall退出客户端命令exit 或quitKey操作命令Redis中存储的数据整体是一个Map。key是String类型而value则可以是String、Hash表、List、Set等类型。keys查找所有符合给定命令pattern的keypattern为正则表达式。格式keys patternkeys的速度非常块但在一个大的数据库中使用它可能会阻塞当前服务器的服务。所以生产环境中一般不使用该命令而使用scan命令代替。exists 检查给定的key是否存在如果存在返回1否则返回0格式exists keydel 删除给定的一个或多个key。不存在的key会被忽略。返回被删除key的数量。格式del key[key...]举例del hill head namerename: 重命名key。格式rename key newkey当key和newkey 相同或者key不存在时返回一个错误。当newkey已经存在时rename命令将覆盖旧值。改名成功返回ok失败则返回错误。move 将当前数据库的key移动到指定的数据库中格式 move key db如果当前数据库和指定数据库有相同名字的key或者key不存在当前数据库那么move没有任何效果。成功返回1失败则返回0。type返回key 所存储的值的类型。格式type key返回值有六种nonekey不存在、string字符串、list列表、set集合、zset有序集合、hash哈希表。expire和pexpire格式expire key seconds功能为给定的key设置生存时间当key过期生存时间为0它会被自动删除。expire 的时间单位为秒pexpire 的时间单位为毫秒。在Redis中带有生存时间的key被称为“易失的”volatile。生存时间设置成功返回1如果key不存在就返回0。rename操作不会改变key的生存时间。ttl和pttlttltime to live返回给定key的剩余生存时间。格式ttl key返回值有三种当key不存在时返回 -2 ​ 当key存在但没有设置生存时间时返回-1​ 否则返回key的剩余生存时间。ttl命令返回的时间单位为秒。pttl命令返回的时间单位为毫秒。persist 去除key的生存时间将这个key从“易失的”转为“持久的”。格式persist key当生存时间移除成功返回1如果key不存在或者key没有设置生存时间则返回0。randomkey 从当前数据库中随机返回一个key格式randomkey当数据库不为空时返回一个key如果数据库为空返回nil。scan命令格式scan cursor [match pattern] [count count] [type type]功能用于迭代数据库中的数据库键其各个选项的意义为cursor本次迭代开始的游标。pattern本次迭代要匹配的key的模式。count本次迭代要从数据集里返回多少元素默认10type本次迭代要返回的value类型默认所有类型scan命令时一个基于游标cursor的迭代器scan命令每次被调用后都会向用户返回一个包含两个元素的数组第一个元素是用于进行下一次迭代的新游标第二个元素则是一个数组【这个数组包含了所有被迭代的元素】用户在下次迭代时需要使用这个新游标做为scan命令的游标参数一次来延续之前的迭代过程。当scan命令的游标参数被设置为0时服务器将开始一次新的迭代。如果新游标返回0.表示迭代结束。说明使用简短的、负数、超出范围或者其他非正常的游标来执行增量式迭代不会造成服务器崩溃。 当数据量很大时count指定的数量可能会不起作用Redis会自动调整每次的变量数目。 由于scan命令每次执行都只会返回少量元素所以该命令可用于生产环境不会出现像keys 命令带来的服务器阻塞问题。 增量式迭代命令所使用的算法只保证在数据集大小有界的情况下迭代才会停止。 换句话说如果被迭代的数据集大小不断增长的话增量式迭代可能永远也无法完成一次完整迭代。 即当一个数据集不断变大时要访问这个数据集中的所有元素就需要越来越多的工作能否结束一个迭代取决于用户执行迭代的速度是否比数据集增长的速度更快。相关命令另外有3个scan命令用于对三种类型的value进行遍历。hscan用于遍历当前db中指定hash表的所有field-value对。sscan用于遍历当前db中指定set集合的所有元素。zscan用于遍历当前db中指定Zset集合的所有元素。String类型的value操作命令String类型的value可以存放任意数据包括数值型甚至是二进制的图片、音频、视频、序列化对象等。一个String类型的value最大是512M。set给key 设置指定的值。格式set key value 【EX seconds | PX milliseconds】【NX|XX】EX seconds为当前key设置过期时间单位秒等价于setex命令PX milliseconds为当前key设置过期时间单位毫秒等价于psetex命令NX指定的key不存在才会设置成功用于添加指定的key。等价于setnx命令XX指定的key必须存在才会设置成功用于更新指定key的value注意如果value字符串中带有空格则该字符串必须使用双引号或者单引号引起来否则会认为set命令的参数数量不正确报错。setex和psetex格式setex/psetex key seconds value功能set expire其不仅为key指定value。还设置了生存时间。setex时间单位是秒psetex的单位是毫秒。注意如果key存在则覆盖旧值。该命令类似于以下两个目录。不同之处在于setex是一个原子性操作关联值和设置生存时间这两个动作会在同一时间完成该命令在Redis用作缓存时非常实用。set key valueexpire key secondssetnx: set in not exists ,给key设置value仅当key不存在时生效。若key已经存在则setnx不做任何动作成功返回1否则返回0格式setnx key value该命令等价于set key value nxgetset给key设置新的value并返回旧value。当key存在但不是字符串类型时返回一个错误当key不存在时返回nil。格式getset key valuemset与msetnx 同时设置一个或多个key-value对。格式mset/msetnx key value 【key value】注意某个某个key已经存在那么mset会用新值覆盖旧值如果不想覆盖请使用msetnx 。msetnx 命令只会在所给的key都不存在的情况下进行设置操作。mset/msetnx 是一个原子性操作所给定的key都会在同一时间内被设置要么都设置成功要么都设置失败。mget 返回一个或多个key的值。格式mget key 【key...】注意如果这些key里面有某个key不存在那么这个key返回特殊值nil。该命令永不失败。append如果key已存在该命令将value追加到原来值得末尾。如果key不存在就设置value。格式append key value注意追加value后key中字符串的长度。incr和decr格式incr/decr key功能increment 自动递增将key中存储的数字1.​ decrement自动递减将key中存储的数字-1.注意如果key不存在那么key的值会先被初始化为0然后再执行/- 1操作。​ 如果值不是数字那么返回一个错误。​ 如果执行正确返回计算后的结果。incrby和decrby将key中存储的数字/- 指定的数这个数只能是整数可以是负数但不能是小数。格式incrbykey increment 或 decrby key decrement注意如果key不存在那么key的值会先被初始化为0然后再执行/- 1操作。​ 如果值不是数字那么返回一个错误。​ 如果执行正确返回计算后的结果。incrbyfloat为key的值加上浮点数增量 increment。与之前的说明相同但是没有decrbyfloat,但increment为负数可以实现减操作。格式 incrbyfloat key increment举例incrbyfloat age 2.5strlen返回给定key的value的字符串长度格式strlen keygetrange:返回key中字符串的子字符串字符串的截取范围由start和end两个偏移量决定包含start和end在内。格式getrange key start end注意end必须要比start 大。支持负数偏移量表示从字符串最后开始计数-1表示最后一个字符-2表示倒数第二个以此类推。注意getrange name 0 -1 # 这个命令是正确的返回的是完成的str.setrange: 替换指定key的字符串值str从偏移量offset开始。当offset大于str的长度中间使用零字节\x00填充即0000 0000字节 填充对于不存在的key当作空串处理。格式setrange key offset value位操作命令名称中包含bit的命令都是对二进制位的操作命令比如setbit、getbit、bitcount、bittop、bitfield这些命令不常用。典型应用场景数据缓存从MySQL中获取数据后先存入缓存再返回给应用服务器。计数器在Redis 中写入一个value 为数值型的key作为平台计数器等。每个客户端访问一次就增加Redis中的计数器然后再以一部方式持久化到其他数据源中比如MySQL。共享session在分布式系统中如果用户身份信息这样的session数据保存在登录服务中那么用户再次提交收藏、支付这样需要验证身份的请求可能会出现问题因为支付服务中并没有保存用户的session从而需要用户重新登录。这对用户来说不可接受。此时可以把session保存在redis中用户在提交请求时可以从Redis中获取session数据再进行相关操作这样就不会引发“重新登录”的问题。限速器很多平台为了防止DoS 拒绝服务攻击一般会限制一个IP不能在一秒内访问超过n次。而Redis可以结合key的过期时间与incr命令来完成限速功能充当限速器。set 192.168.132.33 1 ex 60 nx # 192.168.132.33 是key1是value 。Boolean isExists redis.set(192.168.132.33,1,EX 60,NX); if(isExists ! null || redis.incr(192.168.132.33,1)5){ // 通过 }else{ // 限流 }