基本操作
参考教程:https://www.yiibai.com/redis/
Redis 是 Key-Value 内存数据库,操作是通过各种指令进行的,比如 SET 指令可以设置键值对,而 GET 指令则获取某一个键的值。不同的数据结构,Redis 有不同的指令,这样指令一共有几十个,下面主要介绍一些常用的指令。
Redis 对 Key 也就是键有各种各样的指令,主要有下面的指令(下面的指令中小写字符串都是参数,可以自定义):
SET key value 设置键值;
EXISTS key 判断键是否存在;
EXPIRE key seconds 设置 Key 的过期时间,过期以后Key 将被自动删除;
TTL key 获取 Key 的剩余生存时间;
DEL key 删除 Key;
TYPE key 获取 Key 对应的 Value 的类型;
通过 redis-cli 演示以上的指令如下:
127.0.0.1:6379> exists user (integer) 0 127.0.0.1:6379> set user aiden OK 127.0.0.1:6379> get user "aiden" 127.0.0.1:6379> type user string 127.0.0.1:6379> expire user 5 (integer) 1 127.0.0.1:6379> ttl user (integer) 4 127.0.0.1:6379> ttl user (integer) 2 127.0.0.1:6379> ttl user (integer) -2 127.0.0.1:6379> exists user (integer) 0
上面例子中,首先判断 user 键是否存在,接着通过 SET 设置了值,接着还使用 EXPIRE 指令设置了过期时间为 5 秒。可以看到 5 秒后,user 键就被自动删除了。
有的时候会看到输出的字符串前有 b 这样的前缀,表示字节编码的字符串,对应的还有 u'xxxxx' 这类 unicode 编码的字符串,都比较常见。
上文中已提到,Redis 还支持其他的数据结构,不仅仅是简单的字符串键值对,比如支持哈希类型的键值,这种数据结构中 Key 对应于一个哈希,而哈希又包含多个字段和相应的值。对于这种类型主要有下面的操作指令:
HSET key field value 设置名称为 key 的哈希的字段 field 为值 value;
HGET key field 获取名为 key 的哈希的字段 field;
HGETALL key 获取名为 Key 的哈希所有字段和 Value;
HKEYS key 获取名为 Key 的哈希的所有字段;
HLEN key 获取名为 Key 的哈希的字段数量;
通过 redis-cli 演示如下:
127.0.0.1:6379> exists user (integer) 0 127.0.0.1:6379> hset user name aiden (integer) 1 127.0.0.1:6379> hset user age 30 (integer) 1 127.0.0.1:6379> hmset user email luojin@simplecloud.cn addr chengdu OK 127.0.0.1:6379> hgetall user 1) "name" 2) "aiden" 3) "age" 4) "30" 5) "email" 6) "luojin@simplecloud.cn" 7) "addr" 8) "chengdu" 127.0.0.1:6379> hkeys user 1) "name" 2) "age" 3) "email" 4) "addr" 127.0.0.1:6379> hget user addr "chengdu" 127.0.0.1:6379> hlen user (integer) 4
上面的例子中,设置了一个名为 user 的哈希。先使用 HSET 为单个字段赋值,接着使用 HMSET 为多个字段赋值。使用 HGETALL 能一次获取全部的字段和值。
Redis 还支持有序集合,有序集合可以用于快速实现排名功能,只要的操作指令如下:
ZADD key score member 将成员和对应的评分添加到有序集合中;
ZREVRANK key member 获取 member 在有序集合 key 中的排名;
通过 redis-cli 演示如下:
127.0.0.1:6379> zadd rank 100 aiden (integer) 1 127.0.0.1:6379> zadd rank 120 lxtttx (integer) 1 127.0.0.1:6379> zadd rank 80 jin (integer) 1 127.0.0.1:6379> zrevrank rank aiden (integer) 1 127.0.0.1:6379> zrevrank rank lxtttx (integer) 0 127.0.0.1:6379> zrevrank rank jin (integer) 2 127.0.0.1:6379> zrevrank rank not_exist (nil)
上面例子中,我们通过 ZADD 往 rank 中添加了三个成员,最后通过 ZREVRANK 依次获取了成员的排名,可以发现排名是从 0 开始计算的,排第 0 的成员得分最高。