redis命令学习之redis键

来源:互联网 发布:java销售 编辑:程序博客网 时间:2024/06/04 19:44

Redis 配置

CONFIG GET CONFIG_SETTING_NAME

`redis
CONFIG GET loglevel

127.0.0.1:6379> CONFIG GET loglevel
1) “loglevel”
2) “notice”
`redis

redis
CONFIG GET *
redis

使用*获取所有配置项。

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
127.0.0.1:6379> SET cg ggh
OK
redis

DEL cg

redis
127.0.0.1:6379> DEL cg
(integer) 1
redis

再次执行 DEL cg

redis
127.0.0.1:6379> DEL cg
(integer) 0
redis

执行DEL CG
redis
127.0.0.1:6379> DEL CG
(integer) 0
redis

这说明,删除一个不存在的键时,返回0。

执行Del cg
redis
127.0.0.1:6379> dEL CG
(integer) 0
redis

这说明,redis的命令大小写不敏感。

Redis Dump 命令 DUMP KEY_NAME

在redis中创建一个key并设置值

redis
127.0.0.1:6379> SET cg "hello, world"
OK
redis

获取key的值

redis
127.0.0.1:6379> get cg
"hello, world"
redis

使用dump序列化key的值

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"
redis

key使用单双引号都可以。

redis
127.0.0.1:6379> dump cg2
(nil)
redis

序列化不存在的key时,返回nil。

Redis EXISTS 命令

redis
127.0.0.1:6379> EXISTS cg
(integer) 1
redis

redis
127.0.0.1:6379> EXISTS cg2
(integer) 0
redis

Redis Expire 命令 Expire KEY_NAME TIME_IN_SECONDS

redis
127.0.0.1:6379> EXPIRE cg 30
(integer) 1
redis

30s后

redis
127.0.0.1:6379> GET cg
(nil)
redis

Redis Expireat 命令 Expireat KEY_NAME TIME_IN_UNIX_TIMESTAMP

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
redis

等到时间变为1474167110,再执行

redis
127.0.0.1:6379> get cg
(nil)
redis

PEXPIRE key milliseconds

与 Redis Expire 命令 相似

Redis PEXPIREAT 命令 PEXPIREAT KEY_NAME TIME_IN_MILLISECONDS_IN_UNIX_TIMESTAMP

与 Redis Expireat 命令 相似

Redis Keys 命令 KEYS PATTERN

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"
redis

使用 * 号获取所有的key
redis
127.0.0.1:6379> keys *
1) "cg3"
2) "cg1"
3) "mykey"
4) "ggh"
5) "cg2"
redis

Redis Move 命令 MOVE KEY_NAME DESTINATION_DATABASE

redis
127.0.0.1:6379> SELECT 0
OK
redis

redis默认使用数据库0。

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
redis

将 song 移到数据库1。

切换到数据1

redis
127.0.0.1:6379> SELECT 1
OK
redis

redis
127.0.0.1:6379[1]> select 2
OK
redis

并没有向数据库2中存储数据,但切换到它却成功了,要注意这点。

切换到数据1后,检测song是否存在于数据库1

redis
127.0.0.1:6379[1]> exists song
(integer) 1
redis

证明song已经被移到数据库2中了。再切换到数据库0,检测song是否还存在于数据库0中。

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
redis

答案是否定的。

移动一个在数据库1中不存在的key到数据库0中

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
redis

移动失败。

当数据库0和数据库1中都存在key name时,从数据0中移到name到数据库1中

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"
redis

证明,当两个数据库中存在相同的key时,若把key从一个数据库中移到另一个数据库中,操作会失败,
两个数据库中的key的值不会发生变化。

Redis PERSIST 命令 PERSIST KEY_NAME

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"
redis

超过设定的10s后,key仍然存在。

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

Redis Pttl 命令 PTTL KEY_NAME

Redis Pttl 命令以 毫秒 为单位返回 key 的剩余过期时间。

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
redis

当key不存在时,PTTL返回-2;当key存在但没有设置过期时间时,PTTL返回-1;当key存在且设置了过期时间时,
PTTL返回 key 的剩余过期时间,以毫秒为单位。

Redis TTL 命令

Redis TTL 命令以 秒 为单位返回 key 的剩余过期时间。

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

Redis RANDOMKEY 命令

Redis RANDOMKEY 命令从当前数据库中随机返回一个 key 。

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"
redis

每次都返回cg2,这是怎么回事?再次测试,发现结果是随机的,只是有时候随机出来的结果和上一次相同。

重新设置key

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

Redis Rename 命令 RENAME OLD_KEY_NAME NEW_KEY_NAME

Redis Rename 命令用于修改 key 的名称 。

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"
redis

rename执行成功后,旧key将会被删除。
如果旧key不存在,执行rename时,会返回一个错误。
当新key已经存在,成功执行rename后,新key的值将会被覆盖。

Redis Renamenx 命令 RENAMENX OLD_KEY_NAME NEW_KEY_NAME

Redis Renamenx 命令用于在新的 key 不存在时修改 key 的名称 。

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"
redis

当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

0 0