Redis的基础语法

  1. 1. Redis
  2. 2. 找一个练习Redis的靶场
  3. 3. 基本操作
    1. 3.1. CRUD

虽然现阶段我想开发的游戏是单机游戏,但是因为种种原因我不得不去学习服务端技术。说不定未来开发游戏时用得上呢,总之记录下。

Redis

Redis是一个基于内存的键值数据库,目前我见过的使用Radis的项目都是在数据库之上放一层Redis做高速缓存。

找一个练习Redis的靶场

由于我手头没有像样的Linux系统,也不太想去折腾这台跟了我多年的笔记本去装什么Docker for Window。于是乎我索性就用Redis官网提供的interactive tutorial来作为学习Redis语句的环境了,反正一开始只要熟悉数据结构就好了,复杂的操作后面开发中用到再整理成新文章吧。

基本操作

在靶场的命令行中键入HELP,得到如下的输出:

1
>Please type HELP for one of these commands: DECR, DECRBY, DEL, EXISTS, EXPIRE, GET, GETSET, HDEL, HEXISTS, HGET, HGETALL, HINCRBY, HKEYS, HLEN, HMGET, HMSET, HSET, HVALS, INCR, INCRBY, KEYS, LINDEX, LLEN, LPOP, LPUSH, LRANGE, LREM, LSET, LTRIM, MGET, MSET, MSETNX, MULTI, PEXPIRE, RENAME, RENAMENX, RPOP, RPOPLPUSH, RPUSH, SADD, SCARD, SDIFF, SDIFFSTORE, SET, SETEX, SETNX, SINTER, SINTERSTORE, SISMEMBER, SMEMBERS, SMOVE, SORT, SPOP, SRANDMEMBER, SREM, SUNION, SUNIONSTORE, TTL, TYPE, ZADD, ZCARD, ZCOUNT, ZINCRBY, ZRANGE, ZRANGEBYSCORE, ZRANK, ZREM, ZREMRANGEBYSCORE, ZREVRANGE, ZSCORE

因为这是挂在官网上的教程,姑且就认为这些命令是官方推荐初学者优先学习掌握的吧。可惜官网的这个列表是按照字典排序的,我根据自己的理解总结了一个初学者的学习顺序。

CRUD

从使用者的角度出发,Redis作为键值数据库,自然是从最常用的CRUD开始学起比较好。毕竟我们CRUD打工人每天面对的就是这几个东西,哭了。

Create & Update
Redis的曾和改是一体的,靠的是下面这条命令。时间复杂度为O(1)。

1
SET key value [EX seconds|PX milliseconds|EXAT timestamp|PXAT milliseconds-timestamp|KEEPTTL] [NX|XX] [GET]

单纯的SET key value操作会在数据库中创建一个key来保存字符串类型value,如果key已经存有一个数据则会直接覆盖之前的value。而且一旦执行覆盖操作,之前设置的过期时间什么的都会没掉。

以下为选项

1
2
3
4
5
6
7
8
9
EX seconds -- 设置有效时间,单位秒。
PX milliseconds -- 设置有效时间,单位毫秒。
EXAT timestamp -- 这个值会在Unix时间戳之后过期。
PXAT milliseconds-timestamp -- 这个值会在Unix时间戳之后过期,单位是毫秒。

NX -- 只有当key不存在时才会设置值,这个操作不会进行覆盖。
XX -- 只有当key已经存在时才会设置值。

GET -- 如果带上这个选项,则会返回旧的value(如果被覆盖)。没有旧的value则返回空(nil)。需要特别注意的是如果value保存的不是字符串类型,带上这个选项会导致报错,并且SET操作也会被放弃。

另外一提,官方文档中有如下注意事项:

Note: Since the SET command options can replace SETNX, SETEX, PSETEX, GETSET, it is possible that in future versions of Redis these commands will be deprecated and finally removed.
大意是说以上这些命令SETNX,SETEX,PSETEX,GETSET现在由SET可以直接搞定了,未来这些命令会被弃用并且最终会被删除。

Read
读命令比较简单,纯种读只有一种样子,不像SET有花花绿绿的选项。时间复杂度为O(1)。

1
GET key

返回的就是这个key对应的value,如果key不存在则返回nil。

虽然GET命令比较简单,但是他有几个变种。

1
2
3
4
GETDEL key -- 获取value之后删掉(当且仅当value是string类型的)
GETEX key [EX seconds|PX milliseconds|EXAT timestamp|PXAT milliseconds-timestamp|PERSIST]
-- 获取值之后,设置过期时间。PERSIST会移除key的时间限制
GETRANGE key start end -- 获取字串。有点像substr(),事实上2.0版本之前这个指令都叫SUBSTR。

Del
删除指令也比较简单。时间复杂度为O(1)

1
DEL key [key ...]

输入多个key,不存在的key会被无视,返回有多少个key被删。

先写到这儿吧,等我用到list, set, zset, hash再更新接下来的