Redis 配置
CONFIG GET CONFIG_SETTING_NAME
`redis
CONFIG GET loglevel
127.0.0.1:6379> CONFIG GET loglevel
1) “loglevel”
2) “notice”
`redis
redis
redis
CONFIG GET *
使用*
获取所有配置项。
CONFIG SET CONFIG_SETTING_NAME NEW_CONFIG_VALUE
`redis
CONFIG SET loglevel “notice”
127.0.0.1:6379> CONFIG SET loglevel “notice”
OK
`redis
`redis
CONFIG GET loglevel
127.0.0.1:6379> CONFIG GET loglevel
1) “loglevel”
2) “notice”
没有运行CONFIG SET loglevel "notice"
命令与运行了此命令,CONFIG GET loglevel
命令执行得到的结果是一样的,
那第一条命令的作用是什么?
Redis 键(key) COMMAND KEY_NAME
SET cg ggh
redis
redis
127.0.0.1:6379> SET cg ggh
OK
DEL cg
redis
redis
127.0.0.1:6379> DEL cg
(integer) 1
再次执行 DEL cg
redis
redis
127.0.0.1:6379> DEL cg
(integer) 0
执行DEL CG
redis
redis
127.0.0.1:6379> DEL CG
(integer) 0
这说明,删除一个不存在的键时,返回0。
执行Del cg
redis
redis
127.0.0.1:6379> dEL CG
(integer) 0
这说明,redis的命令大小写不敏感。
Redis Dump 命令 DUMP KEY_NAME
在redis中创建一个key并设置值
redis
redis
127.0.0.1:6379> SET cg "hello, world"
OK
获取key的值
redis
redis
127.0.0.1:6379> get cg
"hello, world"
使用dump序列化key的值
redis
redis
127.0.0.1:6379> DUMP cg
"\x00\x0chello, world\a\x004\xd4f\x11\xf1%C5"
redis
redis
127.0.0.1:6379> dump 'cg'
"\x00\x0chello, world\a\x004\xd4f\x11\xf1%C5"
key使用单双引号都可以。
redis
redis
127.0.0.1:6379> dump cg2
(nil)
序列化不存在的key时,返回nil。
Redis EXISTS 命令
redis
redis
127.0.0.1:6379> EXISTS cg
(integer) 1
redis
redis
127.0.0.1:6379> EXISTS cg2
(integer) 0
Redis Expire 命令 Expire KEY_NAME TIME_IN_SECONDS
redis
redis
127.0.0.1:6379> EXPIRE cg 30
(integer) 1
30s后
redis
redis
127.0.0.1:6379> GET cg
(nil)
Redis Expireat 命令 Expireat KEY_NAME TIME_IN_UNIX_TIMESTAMP
redis
redis
127.0.0.1:6379> SET cg 'ggh'
OK
127.0.0.1:6379> get cg
"ggh"
redis
redis
127.0.0.1:6379> EXPIREAT cg 1474167109
(integer) 1
等到时间变为1474167110,再执行
redis
redis
127.0.0.1:6379> get cg
(nil)
PEXPIRE key milliseconds
与 Redis Expire 命令 相似
Redis PEXPIREAT 命令 PEXPIREAT KEY_NAME TIME_IN_MILLISECONDS_IN_UNIX_TIMESTAMP
与 Redis Expireat 命令 相似
Redis Keys 命令 KEYS PATTERN
redis
redis
set cg1 'ggh1'
set cg2 'ggh2'
set cg3 'ggh3'
set ggh 'cg'
redis
redis
127.0.0.1:6379> KEYS cg*
1) "cg3"
2) "cg1"
3) "cg2"
使用 * 号获取所有的key
redis
redis
127.0.0.1:6379> keys *
1) "cg3"
2) "cg1"
3) "mykey"
4) "ggh"
5) "cg2"
Redis Move 命令 MOVE KEY_NAME DESTINATION_DATABASE
redis
redis
127.0.0.1:6379> SELECT 0
OK
redis默认使用数据库0。
redis
redis
127.0.0.1:6379> SET song "secret base - Zone"
OK
127.0.0.1:6379> get song
"secret base - Zone"
redis
redis
127.0.0.1:6379> MOVE song 1
(integer) 1
将 song 移到数据库1。
切换到数据1
redis
redis
127.0.0.1:6379> SELECT 1
OK
redis
redis
127.0.0.1:6379[1]> select 2
OK
并没有向数据库2中存储数据,但切换到它却成功了,要注意这点。
切换到数据1后,检测song是否存在于数据库1
redis
redis
127.0.0.1:6379[1]> exists song
(integer) 1
证明song已经被移到数据库2中了。再切换到数据库0,检测song是否还存在于数据库0中。
redis
redis
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> exits song
(error) ERR unknown command 'exits'
127.0.0.1:6379> exists song
(integer) 0
答案是否定的。
移动一个在数据库1中不存在的key到数据库0中
redis
redis
127.0.0.1:6379[1]> exists no_exists_key
(integer) 0
127.0.0.1:6379[1]> move no_exists_key 0
(integer) 0
移动失败。
当数据库0和数据库1中都存在key name时,从数据0中移到name到数据库1中
redis
redis
127.0.0.1:6379[1]> set name 'ggh'
OK
127.0.0.1:6379[1]> get name
"ggh"
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> set name 'cg'
OK
127.0.0.1:6379> get name
"cg"
127.0.0.1:6379> move name 1
(integer) 0
127.0.0.1:6379> get name
"cg"
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> get name
"ggh"
证明,当两个数据库中存在相同的key时,若把key从一个数据库中移到另一个数据库中,操作会失败,
两个数据库中的key的值不会发生变化。
Redis PERSIST 命令 PERSIST KEY_NAME
redis
redis
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> set persistKey '10'
OK
127.0.0.1:6379> get persistKey
"10"
127.0.0.1:6379> expire persistKey 60
(integer) 1
127.0.0.1:6379> persist persistKey
(integer) 1
127.0.0.1:6379> exists persistKey
(integer) 1
127.0.0.1:6379> get persistKey
"10"
超过设定的10s后,key仍然存在。
redis
redis
127.0.0.1:6379> expire persistKey 60
(integer) 1
127.0.0.1:6379> TTL persistKey
(integer) 46
127.0.0.1:6379> persist persistKey
(integer) 1
127.0.0.1:6379> TTL persistKey
(integer) -1
Redis Pttl 命令 PTTL KEY_NAME
Redis Pttl 命令以 毫秒 为单位返回 key 的剩余过期时间。
redis
redis
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> PTTL key
(integer) -2
127.0.0.1:6379> PTTL cg1
(integer) -2
127.0.0.1:6379> SET cg1 'ggh1'
OK
127.0.0.1:6379> PTTL cg1
(integer) -1
127.0.0.1:6379> expire cg1 60
(integer) 1
127.0.0.1:6379> PTTL cg1
(integer) 54848
当key不存在时,PTTL返回-2;当key存在但没有设置过期时间时,PTTL返回-1;当key存在且设置了过期时间时,
PTTL返回 key 的剩余过期时间,以毫秒为单位。
Redis TTL 命令
Redis TTL 命令以 秒 为单位返回 key 的剩余过期时间。
redis
redis
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> TTL key
(integer) -2
127.0.0.1:6379> set cg 'ggh'
OK
127.0.0.1:6379> TTL cg
(integer) -1
127.0.0.1:6379> expire cg 60
(integer) 1
127.0.0.1:6379> TTL cg
(integer) 56
127.0.0.1:6379> TTL cg
(integer) 55
127.0.0.1:6379> TTL cg
(integer) 52
Redis RANDOMKEY 命令
Redis RANDOMKEY 命令从当前数据库中随机返回一个 key 。
redis
redis
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> RANDOMKEY
(nil)
127.0.0.1:6379> MSET cg 'ggh' cg1 'ggh1' cg2 'ggh2'
OK
127.0.0.1:6379> randomkey
"cg2"
127.0.0.1:6379> randomkey
"cg2"
127.0.0.1:6379> randomkey
"cg2"
每次都返回cg2,这是怎么回事?再次测试,发现结果是随机的,只是有时候随机出来的结果和上一次相同。
重新设置key
redis
redis
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> keys 8
(empty list or set)
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> mset animal 'cat' flower 'rose' girl 'Kate'
OK
127.0.0.1:6379> keys *
1) "flower"
2) "girl"
3) "animal"
127.0.0.1:6379> randomkey
"animal"
127.0.0.1:6379> randomkey
"flower"
127.0.0.1:6379> randomkey
"animal"
127.0.0.1:6379> randomkey
"animal"
127.0.0.1:6379> randomkey
"flower"
127.0.0.1:6379> randomkey
"flower"
127.0.0.1:6379> randomkey
"flower"
127.0.0.1:6379> randomkey
"flower"
127.0.0.1:6379> randomkey
"flower"
127.0.0.1:6379> randomkey
"girl"
Redis Rename 命令 RENAME OLD_KEY_NAME NEW_KEY_NAME
Redis Rename 命令用于修改 key 的名称 。
redis
redis
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set cg 'ggh'
OK
127.0.0.1:6379> exists cg
(integer) 1
127.0.0.1:6379> rename cg cg1
OK
127.0.0.1:6379> exists cg
(integer) 0
127.0.0.1:6379> exists cg1
(integer) 1
127.0.0.1:6379> rename cg cg2
(error) ERR no such key
127.0.0.1:6379> rename cg1 cg1
OK
127.0.0.1:6379> keys *
1) "cg1"
127.0.0.1:6379> set cg2 'ggh2'
OK
127.0.0.1:6379> keys *
1) "cg2"
2) "cg1"
127.0.0.1:6379> rename cg1 cg2
OK
127.0.0.1:6379> get cg1
(nil)
127.0.0.1:6379> get cg2
"ggh"
rename执行成功后,旧key将会被删除。
如果旧key不存在,执行rename时,会返回一个错误。
当新key已经存在,成功执行rename后,新key的值将会被覆盖。
Redis Renamenx 命令 RENAMENX OLD_KEY_NAME NEW_KEY_NAME
Redis Renamenx 命令用于在新的 key 不存在时修改 key 的名称 。
redis
redis
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set cg1 'ggh1'
OK
127.0.0.1:6379> exists cg2
(integer) 0
127.0.0.1:6379> renamenx cg1 cg2
(integer) 1
127.0.0.1:6379> keys 8
(empty list or set)
127.0.0.1:6379> keys *
1) "cg2"
127.0.0.1:6379> set cg3 'ggh3'
OK
127.0.0.1:6379> keys *
1) "cg3"
2) "cg2"
127.0.0.1:6379> renamenx cg2 cg3
(integer) 0
127.0.0.1:6379> get cg2
"ggh1"
127.0.0.1:6379> get cg3
"ggh3"
当new key存在时,改名失败;当new key不存在时,改变成功。
Redis Type 命令 TYPE KEY_NAME
Redis Type 命令用于返回 key 所储存的值的类型。
redis
127.0.0.1:6379> keys *
1) "cg3"
2) "cg2"
127.0.0.1:6379> keys cg2
1) "cg2"
127.0.0.1:6379> type cg2
string
127.0.0.1:6379> lpush book 'js'
(integer) 1
127.0.0.1:6379> keys *
1) "book"
2) "cg3"
3) "cg2"
127.0.0.1:6379> type book
list
127.0.0.1:6379> sadd pat 'dog'
(integer) 1
127.0.0.1:6379> type pat
set
127.0.0.1:6379> type ggh2
none