Redis

Author Avatar
cooscao 6月 10, 2019

Redis数据库学习

Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。

Redis 与其他 key - value 缓存产品有以下三个特点:

  • Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
  • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
  • Redis支持数据的备份,即master-slave模式的数据备份。

安装

sudo apt-get install redis-server

后台启动服务

# 默认启动
redis-server &

# 以配置文件启动
(venv) root@5fb46468cb96:~/workspace# redis-cli
127.0.0.1:6379> set foo bar
OK
127.0.0.1:6379> get foo
"bar"
127.0.0.1:6379> del foo   # 删除此键对

Redis对键操作

命令 描述
DEL key 该命令用于在 key 存在时删除 key。
DUMP key 序列化给定 key ,并返回被序列化的值。
EXISTS key 检查给定 key 是否存在。
EXPIRE key 为给定 key 设置过期时间,以秒计。
EXPIRE key EXPIREAT 的作用和 EXPIRE 类似,都用于为 key 设置过期时间。 不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳(unix timestamp)。
PEXPIRE key 设置 key 的过期时间以毫秒计。
KEYS pattern 查找所有符合给定模式( pattern)的 key 。
MOVE key 将当前数据库的 key 移动到给定的数据库 db 当中。
PERSIST key 移除 key 的过期时间,key 将持久保持。
PTTL key 以毫秒为单位返回 key 的剩余的过期时间。
TTL key 以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。
RANDOMKEY 从当前数据库中随机返回一个 key 。
RENAME key newkey 修改 key 的名称
RENAMENX key newkey 仅当 newkey 不存在时,将 key 改名为 newkey 。
TYPE key 返回 key 所储存的值的类型。

Redis Hash

Redis Hash 是一个string类型的field和value的映射表, 特别适合用于存储对象

127.0.0.1:6379> HMSET coos name "coos redis" description "coos des" likes 20 visitors 2000
OK
127.0.0.1:6379> HGETALL coos  # 获取所有键值对
1) "name"
2) "coos redis"
3) "description"
4) "coos des"
5) "likes"
6) "20"
7) "visitors"
8) "2000"
127.0.0.1:6379> HDEL coos likes  # 删除likes字段
(integer) 1
127.0.0.1:6379> HGETALL coos
1) "name"
2) "coos redis"
3) "description"
4) "coos des"
5) "visitors"
6) "2000"
127.0.0.1:6379> HGET coos visitors  # 获取visitors字段
"2000"

Redis 列表(List)

Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)

一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。

127.0.0.1:6379> LPUSH run redis
(integer) 1
127.0.0.1:6379> LPUSH run mongodb
(integer) 2
127.0.0.1:6379> LPUSH run mysql
(integer) 3
127.0.0.1:6379> LRANGE run 0 10
1) "mysql"
2) "mongodb"
3) "redis"
127.0.0.1:6379> LINDEX run 2
"redis"

Redis集合(Set)

Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。

Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。

集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

redis 127.0.0.1:6379> SADD runoobkey redis
(integer) 1
redis 127.0.0.1:6379> SADD runoobkey mongodb
(integer) 1
redis 127.0.0.1:6379> SADD runoobkey mysql
(integer) 1
redis 127.0.0.1:6379> SADD runoobkey mysql
(integer) 0
redis 127.0.0.1:6379> SMEMBERS runoobkey

1) "mysql"
2) "mongodb"
3) "redis"

Redis有序集合(Sorted Set)

Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

有序集合的成员是唯一的,但分数(score)却可以重复。

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

redis 127.0.0.1:6379> ZADD runoobkey 1 redis
(integer) 1
redis 127.0.0.1:6379> ZADD runoobkey 2 mongodb
(integer) 1
redis 127.0.0.1:6379> ZADD runoobkey 3 mysql
(integer) 1
redis 127.0.0.1:6379> ZADD runoobkey 3 mysql
(integer) 0
redis 127.0.0.1:6379> ZADD runoobkey 4 mysql
(integer) 0
redis 127.0.0.1:6379> ZRANGE runoobkey 0 10 WITHSCORES

1) "redis"
2) "1"
3) "mongodb"
4) "2"
5) "mysql"
6) "4"
  • INFO 查看Redis服务器信息

Redis数据备份与恢复

备份

redis 127.0.0.1:6379> SAVE 
OK

该命令将在 redis 安装目录中创建dump.rdb文件。

恢复

如果需要恢复数据,只需将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务即可。获取 redis 目录可以使用 CONFIG 命令,如下所示:

127.0.0.1:6379> CONFIG GET dir
1) "dir"
2) "/root/workspace"

参考:

Redis 教程