这是我参与「第五届青训营 」伴学笔记创作活动的第 7 天
今天的课程介绍了 Redis 的原理,不过之前没怎么接触过 Redis,所以先自己从基本的命令开始学习。
Redis 的安装
跑大项目一直是在 WSL2 上跑的,所以 Redis 也安装在这个上面。在 Ubuntu 系统安装 Redis 可以使用以下命令:
# sudo apt update
# sudo apt install redis-server
启动 Redis
$ redie-server
查看 redis 是否启动?
$ redis-cli
以上命令将打开以下终端:
redis 127.0.0.1:6379>
127.0.0.1 是本机 IP ,6379 是 redis 服务端口。现在我们输入 PING 命令。
redis 127.0.0.1:6379> ping
PONG
以上说明我们已经成功安装了 redis。
Redis 基本数据类型
Redis 支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及 zset(sorted set:有序集合)。
String(字符串)
string 类型类似于哈希表,不过 Redis 的 string 是二进制安全的,可以保存任何对象。
下面是一个简单的用法,SET key value 表示设置键值对,GET key 表示查询对应的值。
127.0.0.1:6379> SET 测试 test
OK
127.0.0.1:6379> GET 测试
"test"
Hash(哈希)
Redis hash 是一个键值 (key=>value) 对集合。
Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
下面是一个简单的实例,HMSET 设置了两个 field=>value 对, HGET 获取对应 field 对应的 value。
127.0.0.1:6379> HMSET ephmeral field1 "Hello" field2 "Word"
OK
127.0.0.1:6379> HMGET ephmeral field1
1) "Hello"
127.0.0.1:6379> HMGET ephmeral field2
1) "Word"
List(列表)
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
127.0.0.1:6379> DEL ephmeral
(integer) 1
127.0.0.1:6379> lpush ephmeral redis
(integer) 1
127.0.0.1:6379> lpush ephmeral mongodb
(integer) 2
127.0.0.1:6379> lpush ephmeral rabbitmq
(integer) 3
127.0.0.1:6379> lrange ephmeral 0 10
1) "rabbitmq"
2) "mongodb"
3) "redis"
Set(集合)
Redis 的 Set 是 string 类型的无序集合。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
下面是一个实例,sadd 命令向 key 中添加对应的值,注意这里是无序添加的,并且不能有重复的。
127.0.0.1:6379> DEL ephmeral
(integer) 1
127.0.0.1:6379> sadd ephmeral redis
(integer) 1
127.0.0.1:6379> sadd ephmeral mongodb
(integer) 1
127.0.0.1:6379> sadd ephmeral rabbitmq
(integer) 1
127.0.0.1:6379> sadd ephmeral rabbitmq
(integer) 0
127.0.0.1:6379> smembers ephmeral
1) "mongodb"
2) "redis"
3) "rabbitmq"
zset(sorted set:有序集合)
Redis zset 和 set 一样也是 string 类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。zset 的成员是唯一的,但分数 (score) 却可以重复。
下面是一个实例,zadd key score value 表示将值以及分数添加 key 中去。
127.0.0.1:6379> DEL ephmeral
(integer) 1
127.0.0.1:6379> zadd ephmeral 0 redis
(integer) 1
127.0.0.1:6379> zadd ephmeral 1 mongodb
(integer) 1
127.0.0.1:6379> zadd ephmeral 2 rabbitmq
(integer) 1
127.0.0.1:6379> zadd ephmeral 2 rabbitmq
(integer) 0
127.0.0.1:6379> zrangebyscore ephmeral 0 1000
1) "redis"
2) "mongodb"
3) "rabbitmq"
这里简单学习一个基本的数据类型,至于更加详细的用法等需要的时候再去看看。