目录
【redis的key相关的操作】
keys pattern:查询相应的key
在redis里,允许模糊查询key,有3个通配符 *、?、[]
* 通配任意多个字符
? 通配单个字符
[] 通配括号内的某1个字符
查看当前都有哪些key,使用 keys *
也可以完整匹配或者模糊匹配,例如:keys site,keys s*,如下查询方式都能够查到“site”
keys site
keys s*
keys site*
keys sit[ey]
keys si?e
randomkey:返回随机key
type key
作用:返回key存储的值的类型,
返回值有: string,link,set,order set, hash
exists key
作用:判断key是否存在,
返回:1/0
del key1 key2 ... KeyN ,
[作用] 删除1个或多个键
[返回值] 不存在的key忽略掉,返回真正删除的key的数量
rename key newkey
[作用]给key赋一个新的key名
[提示]如果newkey已存在,则newkey的原值被覆盖
测试 rename 一个已经存在的key(先删掉现有的所有的key)
renamenx key newkey
[作用] 把key改名为newkey,解决上面6.1的问题
[返回] 发生修改返回1,未发生修改返回0
[提示] nx--> not exists, 即, newkey不存在时,作改名动作
ttl key
[作用] 查询key的生命周期
[返回] 秒数
pttl key, 以毫秒返回生命周期
注:对于不存在的key或已过期的key/不过期的key,都返回-1;Redis2.8中,对于不存在的key,返回-2。
expire key 整型值(秒)
[作用] 设置key的生命周期,以秒为单位
pexpire key
[作用] 设置生命周期,以毫秒数为单位
persist key
[作用] 把指定key置为永久有效
例如:给某个key设置了生命周期10秒,然后立即persist,那么这个key的生命周期又变成永久了。
【Redis切换数据库】
Redis中共有16个数据库(或者叫服务器)。打开 redis.conf可以看到:
一个redis进程,打开了不止一个数据库, 默认打开16个数据库,从0到15编号,如果想打开更多数据库,可以从上面的配置文件修改。
select 1
[作用] 切换到1号数据库
现在使用 select 1 之后,再查看 keys * 就会发现并没有数据。因为默认的之前的数据都存储在第0号数据库,现在切换到第1号数据库,就没有数据了。
再回到0号数据库就又有数据了。
move key db
[作用] 移动某个key到另一个数据库
例如:move site 1
【Redis字符串相关的操作】
set key value [ex 秒数]/[px 毫秒数]
如:
set a 1 ex 10 , 10秒有效
set a 1 px 9000 , 9秒有效
注: 如果ex,px同时写,以后面的有效期为准
如 set a 1 ex 100 px 9000, 实际有效期是9000毫秒
[测试] 设置一个key,有效周期为10秒
127.0.0.1:6379> setex name 20 zhangsan
127.0.0.1:6379> ttl name
(integer) 19
set key value [nx]/[xx]
nx (not exist): 表示key不存在时,执行操作
xx: 表示key存在时,执行操作
[测试] 设置一个已经存在的key,后面分别加 nx 和 xx 的结果区别
注意:后面加xx 的时候,必须操作的是一个已经存在的key,否则不会成功。
mset [作用] 批量设置多个键值
例: mset key1 v1 key2 v2 ....
get key [作用] 获取key的值
mget key1 key2 ... keyn [作用]批量获取多个key的值
127.0.0.1:6379> mset k1 AAA k2 BBB k3 CCC
127.0.0.1:6379> mget k1 k3
1) "AAA"
2) "CCC"
127.0.0.1:6379> setnx name zhangsan
(integer) 1
127.0.0.1:6379> setnx name lisi
(integer) 0
127.0.0.1:6379> get name
"zhangsan"
127.0.0.1:6379>
127.0.0.1:6379> msetnx k1 AAA k2 BBB
(integer) 1
127.0.0.1:6379> mget k1 k2
1) "AAA"
2) "BBB"
127.0.0.1:6379> msetnx k2 CCC k3 DDD
(integer) 0
127.0.0.1:6379> mget k1 k2 k3
1) "AAA"
2) "BBB"
3) (nil)
setrange key offset value [作用] 把字符串的offset偏移字节,改成value
通俗的说,就是把对应的字符串从第offset个字符开始替换成value
例如:
set word hello
setrange word 2 ??
注意: 如果偏移量>字符长度, 该字符自动补0x00
例如:
setrange word 6 !!
append key value [作用] 把value追加到key的原值上
getrange key start stop [作用]是获取字符串中 [start, stop]范围的值
注意: 对于字符串的下标,左数从0开始,右数从-1开始
127.0.0.1:6379> set key helloworld
127.0.0.1:6379> getrange key 0 3
"hell"
[命令]
set title 'chinese'
getrange title 0 3 → "chin"
getrange title 1 -2 → "hines"
注意:
① start>=length(start 所处位置在stop右边), 则返回空字符串
② stop>=length,则截取至字符结尾
getset key newvalue [作用] 获取并返回旧值,设置新值
127.0.0.1:6379> getset key phpredis
"helloworld"
127.0.0.1:6379> get key
"phpredis"
[命令]
set status sleep
getset status wakeup → "sleep"
incr key [作用] 指定的key的值加1,并返回加1后的值
decr key [作用] 指定的key的值减1,并返回减1后的值
注意:
① 不存在的key当成0,再incr操作
② 范围为64有符号
incrby key number [作用] 指定的key的值加number,并返回结果
decrby key number [作用] 指定的key的值减number,并返回结果
incrbyfloat key floatnumber [作用] 指定的key的值加浮点值,并返回结果(注意:没有decrbyfloat)
【Redis BIT相关命令】
在 Redis 中,字符串都是以二进制的方式来存储的。例如 set k1 a,a 对应的 ASCII 码是 97,97 转为二进制是 01100001,BIT 相关的命令就是对二进制进行操作的。
getbit:key 对应的 value 在 offset 处的 bit 值。
setbit:修改 key 对应的 value 在 offset 处的 bit 值
bitcount:统计二进制数据中 1 的个数。
setbit key offset value [作用] 设置offset对应二进制位上的值 [返回]该位上的旧值
大写字母和小写字母之间的ASCII相差32位,因此若要将大写字母转化为小写,只需要将第2位的原有的0改为1,看下图:
[命令] setbit char 2 1
同样的,要把小写变成大写,只需要把第2位的1改成0:
注意:
① 如果offset过大,则会在中间填充0,
② offset最大2^32-1 = 4294967296-1,可推出最大的的字符串为512M
getbit key offset [作用] 获取值的二进制表示,对应位上的值(从左,从0编号)
其实就是取对应的二进制的某个数值。例如A的二进制为 0100 0001
bitop operation destkey key1 [key2 ...]
对key1,key2..keyN作operation,并将结果保存到 destkey 上。operation 可以是 AND 、 OR 、 NOT 、 XOR。注意: 对于NOT操作, key不能多个。
setbit的应用:统计一个人都有哪些天在线,或者打卡计数。
比如:peter在第1、3、4、8、9天分别打卡过,然后统计他的在线天数,使用bitcount peter。速度快,性能好。
127.0.0.1:6379> setbit peter 1 1
(integer) 0
127.0.0.1:6379> setbit peter 3 1
(integer) 0
127.0.0.1:6379> setbit peter 4 1
(integer) 0
127.0.0.1:6379> bitcount peter
(integer) 3
【key和字符串命令总结】
【Redis 的 key的操作命令】
keys */?/[]:查询相应的key;完整匹配:keys site;模糊匹配:keys s*、keys sit[ey]
randomkey:随机返回key
type key:判断key的类型 string,set,zset,link,hash
exists key:判断key是否存在,返回1/0
del key1 key2 ... KeyN :删除1个或多个键
rename key newkey:给key赋一个新的key名,原值被覆盖
renamenx key newkey:同rename,不覆盖
move key 2:移动key到2号数据库
ttl/pttl key:查询key的剩余生命周期(秒/毫秒)
expire/pexpire key: 设置key的生命周期(秒/毫秒)
persist key: 设置key永久有效
【Redis字符串类型的操作】
set key value [ex]/[px]:多少[秒]/[毫秒]有效。
set key value [nx]/[xx]:设置一个[已存在]/[不存在]的key。
mset:一次性设置多个键值,mset key1 v1 key2 v2 ...。
get key: 获取key的值。
mget key1 key2 ... keyN: 获取多个key的值。
setrange key offset value:从offset个字符开始替换成value。
append key value:把value追加到key的原值上。
getrange key start stop :获取[start, stop]范围。
getset key newvalue :返回旧值并设置新值。
incr/decr key:值加/减1。
incrby/decrby key number:值加/减number。
incrbyfloat key floatnumber:值加浮点值(没有decrbyfloat)
【BIT 命令】
getbit:key 对应的 value 在 offset 处的 bit 值。
setbit:修改 key 对应的 value 在 offset 处的 bit 值
bitcount:统计二进制数据中 1 的个数。