首页 > 代码库 > Redis之KEY操作命令 【学习笔记】

Redis之KEY操作命令 【学习笔记】

开启服务

$sudo ./src/redis-server &

键操作

*定义并赋值变量苹果的数量
$ redis-cli set dangcheng::apple::count 152
OK

*获取刚才的苹果数量
$ redis-cli get dangcheng::apple::count
“152”

*当苹果数量增加1 incr关键字实际上是increment的简写
$ redis-cli incr dangcheng::apple::count
(integer) 153

*当苹果来了一盒,而这盒苹果共7个则我们需要加上指定数量关键字是incrby
$ redis-cli incrby dangcheng::apple::count 7
(integer) 160

*如果set一个php数组 我们可以使用php函数serialize将对象序列化后写入
$age=array(“Bill”=>“35”,“Steve”=>“37”,“Peter”=>“43”);
$age_str = seriallze($age);//将这个结果写入redias中
$age = unseriallze($age_str);//get获取后我们可以使用unseriallze反序列化把其转换为PHP对象

EXISTS key 是否存在

存在返回 1
$ redis-cli exists dangcheng::apple::count
(integer) 1
不存在返回 0
$ redis-cli exists dangcheng::apple::color
(integer) 0

DUMP序列化值 不包含任何生命周期信息

不存在返回nil
$ redis-cli dump dangcheng::apple::color
(nil)
返回序列化结果
$redis-cli dump dangcheng::apple::count
“\x00\xc1\xa0\x00\x06\x00\xb0t6\xdaT\x99#\xa2”

expire 和 ttl 设置生命期和查看剩余时间

TTL命令是查询生存时间剩余,不设置生存时间返回-1代表永久
$ redis-cli ttl dangcheng::apple::count
(integer) -1
用expire设置生存时间剩余366秒
$ redis-cli expire dangcheng::apple::count 366
(integer) 1
写这段的过程中消耗了127秒
$ redis-cli ttl dangcheng::apple::count
(integer) 239
PS1:此外还有PEXPIRE命令与expire功能是一样的,只是设置是以毫秒为单位
*PS2:此外还有PTTL命令与TTL功能是一样的,只是显示是以毫秒为单位

expireat

此命令不同于expire去设定剩余,而是直接设置当前key什么时候死亡 而参数是linux时间戳表示
PS:pexpireat 命令与expireat命令等效,区别是单位精确到毫秒数的unix时间戳

keys 查找所有符合给定模式 pattern 的 key

KEYS * 匹配数据库中所有 key 。
KEYS h?llo 匹配 hello , hallo 和 hxllo 等。
KEYS hllo 匹配 hllo 和 heeeeello 等。
KEYS h[ae]llo 匹配 hello 和 hallo ,但不匹配 hillo 。
特殊符号用 \ 隔开
$ redis-cli keys dangcheng::*
1) “dangcheng::apple::color”
2) “dangcheng::apple::count”

migrate 将当前redis实例中的对象迁移到另一个host下的对应端口的实例【数据的迁移】

在本机8888端口创建另一个redis服务
$ redis-server –port 8888 &
[1] 13086
原有实例中存在
$ redis-cli
127.0.0.1:6379> keys dangcheng::*
1) “dangcheng::apple::color”
2) “dangcheng::apple::count”

8888端口下的实例中找不到数据
$ redis-cli -p 8888
127.0.0.1:8888> keys dangcheng

(empty list or set)
将源实例中的数据count传入8888端口的实例
127.0.0.1:6379> migrate 127.0.0.1 8888 dangcheng::apple::count 0 -1
OK
源实例中的count不见了,证明传输源会被删掉
127.0.0.1:6379> keys dangcheng
1) “dangcheng::apple::color”
在8888端口下的实例中查到了
127.0.0.1:8888> get dangcheng::apple::count
“25”

move 将数据从一个db空间中迁移到另一个db空间中

选择index0的dbspace
127.0.0.1:6379> select 0
OK
127.0.0.1:6379> keys *
1) “dangcheng::apple::color”
2) “test::first”
移动到index1的dbspace
127.0.0.1:6379> move test::first 1
(integer) 1
127.0.0.1:6379> keys *
1) “dangcheng::apple::color”
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
1) “test::first”
我们看到了的确在dbsopace1中查询到了
127.0.0.1:6379[1]> get test::first
“556779”
PS:要注意的是如果target db 有相同的key 则移动不会成功

OBJECT 对象操作

*返回给定 key 引用所储存的值的次数。此命令主要用于除错
127.0.0.1:6379[1]> object refcount test::first
(integer) 1

  • 返回给定 key 锁储存的值所使用的内部表示(representation)。
    127.0.0.1:6379[1]> object encoding test::first
    “int”
    127.0.0.1:6379[1]> set str ‘hello redis!‘
    OK
    127.0.0.1:6379[1]> object encoding str
    “raw”
    返回给定 key 自储存以来的空闲时间(idle, 没有被读取也没有被写入),以秒为单位
    127.0.0.1:6379[1]> object idletime str
    (integer) 236
    对象可以以多种方式编码:
    字符串可以被编码为 raw (一般字符串)或 int (为了节约内存,Redis 会将字符串表示的 64 位有符号整数编码为整数来进行储存)。
    列表可以被编码为 ziplist 或 linkedlist 。 ziplist 是为节约大小较小的列表空间而作的特殊表示。
    集合可以被编码为 intset 或者 hashtable 。 intset 是只储存数字的小集合的特殊表示。
    哈希表可以编码为 zipmap 或者 hashtable 。 zipmap 是小哈希表的特殊表示。
    *有序集合可以被编码为 ziplist 或者 skiplist 格式。 ziplist 用于表示小的有序集合,而 skiplist 则用于表示任何大小的有序集合。

    persist 将一个key的超时时间变为永久

    使用expire 给对象设置生存时间
    127.0.0.1:6379[1]> expire test::first 3600
    (integer) 1
    查询剩余时间
    127.0.0.1:6379[1]> ttl test::first
    (integer) 3597
    127.0.0.1:6379[1]> persist test::first
    (integer) 1
    *的确变为了持久化key
    127.0.0.1:6379[1]> ttl test::first
    (integer) -1

*randomkey 随机抽取一个key
127.0.0.1:6379> randomkey
“dangcheng::apple::color2”
127.0.0.1:6379> randomkey
“dangcheng::apple::color”
127.0.0.1:6379> randomkey
“dangcheng::apple::color1”

mset[multi set] 批量设置

127.0.0.1:8888> mset a ‘aaa‘ b ‘bbb‘ c ‘cccc‘
OK
查询所有key
127.0.0.1:8888> keys *
1) “dangcheng::apple::count”
2) “o”
3) “a”
4) “b”
5) “c”
清空dbspace
127.0.0.1:8888> flushdb
OK
*查看所有,很显然没有了
127.0.0.1:8888> keys *
(empty list or set)

rename 修改key名字

127.0.0.1:6379> set a ‘aaa‘
OK
127.0.0.1:6379> rename a b
OK
127.0.0.1:6379> get a
(nil)
127.0.0.1:6379> get b
“aaa”

renamenx 目标key一旦已存在不会被覆盖 只有空的key才能成为target

127.0.0.1:6379> renamenx b c
(integer) 0
127.0.0.1:6379> get c
“66”
127.0.0.1:6379> get b
“bb”
127.0.0.1:6379> renamenx b d
(integer) 1
127.0.0.1:6379> get d
“bb”
127.0.0.1:6379> getb
(error) ERR unknown command ‘getb‘
127.0.0.1:6379> get b
(nil)

dump&restore 序列化和反序列化

127.0.0.1:6379> dump c
“\x00\xc0B\x06\x00\xac\x15Y\x1aO127.0.0.1:6379> get c
“66”
序列化c中的值
127.0.0.1:6379> dump c
“\x00\xc0B\x06\x00\xac\x15Y\x1aO
通过反序列化一个值创建新的键 newc
127.0.0.1:6379> restore newc 0 “\x00\xc0B\x06\x00\xac\x15Y\x1aOOK
127.0.0.1:6379> get newc
“66”

sort [asc|desc] [alpha][limit]给一个列表进行排序 默认为asc方式,使用alpha方式可以给字符串进行排序,此外还可以使用limit进行范围限制

*lpush 是用于创建一个列表的命令
127.0.0.1:6379> lpush sort_list 15 2 45 20 16 3 7 9
(integer) 8
127.0.0.1:6379> sort sort_list
1) “2”
2) “3”
3) “7”
4) “9”
5) “15”
6) “16”
7) “20”
8) “45”
127.0.0.1:6379> sort sort_list asc
1) “2”
2) “3”
3) “7”
4) “9”
5) “15”
6) “16”
7) “20”
8) “45”
127.0.0.1:6379> sort sort_list desc
1) “45”
2) “20”
3) “16”
4) “15”
5) “9”
6) “7”
7) “3”
8) “2”

type 查看key的数据类型

*@return none (key不存在) |string (字符串)|list (列表)|set (集合)|zset (有序集)|hash (哈希表)
127.0.0.1:6379> type sort_list
list
127.0.0.1:6379> type c
string

Redis之KEY操作命令 【学习笔记】