Redis NoSQL 目录 参考文档 Redis MAC pro 上部署 Redis Redis Client 数据持久化 数据类型

参考文档

https://www.runoob.com/redis/redis-tutorial.html
https://www.cnblogs.com/zhaohuhu/p/9140673.html

Redis

Redis(Remote DIctionary Server)是由 Salvatore Sanfilippo 开发的 NoSQL 存储系统。使用 ANSI C 语言编写,遵守 BSD 开源协议,是一个支持基于内存、网络的可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。

Redis 通常被称为数据结构服务器,因为其存储的 Value 可以是 String、Hash、List、Sets、Sorted Sets 等类型。

MAC pro 上部署 Redis

安装

brew info redis
 brew install redis

启动

brew services start redis

这个命令会在后台启动 Redis 服务,并且每一次登录系统,都会自动重启。假如你不希望自动启动服务,可以使用配置文件手动启动:

redis-server /usr/local/etc/redis.conf

Redis Client

连接到 Redis

# 没有身份认证时
redis-cli -p 6379 -h 127.0.0.1

# 有身份认证时
redis-cli -p 6379 -h 127.0.0.1 -a yourpassword

查看配置

127.0.0.1:6379> CONFIG GET loglevel
1) "loglevel"
2) "notice"

127.0.0.1:6379> CONFIG GET *
  1) "dbfilename"
  2) "dump.rdb"
  3) "requirepass"
  4) ""
  5) "masterauth"
  6) ""
  7) "cluster-announce-ip"
  8) ""
  9) "unixsocket"
 10) ""
 ...

编辑配置

redis 127.0.0.1:6379> CONFIG SET loglevel "notice"
OK

redis 127.0.0.1:6379> CONFIG GET loglevel
1) "loglevel"
2) "notice"

设置密码(默认为空)

127.0.0.1:6379> config get requirepass
1) "requirepass"
2) ""

127.0.0.1:6379> config set requirepass fanguiju
OK

127.0.0.1:6379> config get requirepass
(error) NOAUTH Authentication required.

127.0.0.1:6379> auth fanguiju
OK

127.0.0.1:6379> config get requirepass
1) "requirepass"
2) "fanguiju"

数据持久化

Redis 提供了良好的数据持久化策略,保证内存中的数据不被丢失,在 Redis 服务器重启后,依然可以获取其中的数据。但大量的数据持久化必然涉及到内存的整理和消耗,所以应该根据应用的实际情况来进行选择。

Redis 启动时,会先扫描数据持久化文件,将数据恢复到内存中。之后再根据持久化的规则运行。默认的条件下采用RDB模式进行数据备份,效率是最高的。如果开启了AOF模式则使用AOF持久化方式,这时RDB模式将不生效。

RDB 模式

RDB 是默认的持久化策略,为定期持久化,所以可能会导致数据的丢失。在对数据完整性要求不高的常客中可以使用 RDB 模式,因为其效率更高。

在 redis.conf 中的持久化配置:

save 900 1
save 300 10
save 60 10000


rdbcompression yes
rdbchecksum yes

dbfilename dump.rdb
dir /usr/local/var/db/redis/

RDB 模式下,主动触发持久化的命令:

  1. 立即持久化 save 命令,会将全部的进程先挂起,直到 save 命令执行完成后,后续的进程才能执行,也就是会造成线程的阻塞;
  2. 后台持久化 bgsave 指令,不会马上数据备份,所以不会造成线程阻塞。

AOF 模式

AOF 模式可以实现实时的数据持久化,如果对数据的安全性要求较高,则应该使用 AOF 模式,但该模式的性能较低。

开启 AOF 配置:

appendonly yes

appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes

其中,appendfsync 定义了持久化策略,默认每秒备份一次,若采用 always 则实时备份,效率最低。

数据类型

String

Redis NoSQL
目录
参考文档
Redis
MAC pro 上部署 Redis
Redis Client
数据持久化
数据类型
Redis String 是最基本的数据类型,一个 Key 对应一个 Value,最大能存储 512MB。

String 类型是二进制安全的,即 Redis 的 String 可以包含任何数据。比如 .jpg 文件或者序列化的对象。

127.0.0.1:6379> set test_str "just test"
OK

127.0.0.1:6379> get test_str
"just test"

127.0.0.1:6379> del test_str
(integer) 1

List

Redis NoSQL
目录
参考文档
Redis
MAC pro 上部署 Redis
Redis Client
数据持久化
数据类型
Redis List 数据类型是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。List 最多可储存 2**32 - 1 个元素,即 4294967295,40 多亿个元素。

127.0.0.1:6379> lpush test_list one
(integer) 1
127.0.0.1:6379> lpush test_list two
(integer) 2
127.0.0.1:6379> lpush test_list three
(integer) 3

127.0.0.1:6379> lrange test_list 0 1
1) "three"
2) "two"
127.0.0.1:6379> lrange test_list 0 2
1) "three"
2) "two"
3) "one"

127.0.0.1:6379> del test_list
(integer) 1

Hash

Redis NoSQL
目录
参考文档
Redis
MAC pro 上部署 Redis
Redis Client
数据持久化
数据类型
Redis Hash 数据类型是一个基于 String 类型的 Key/Value 映射表,类似 Python 的字典数据类型,特别适合用于储存对象。

127.0.0.1:6379> hmset test_hash key1 "v1" key2 "v2"
OK

127.0.0.1:6379> hget test_hash key1
"v1"
127.0.0.1:6379> hget test_hash key2
"v2"

127.0.0.1:6379> del test_hash
(integer) 1

Set

Redis Set 数据类型是 String 类型的无序集合,集合是不会存在重复 Value 的。每个 Set 同样可以储存 40 多亿个成员。

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

127.0.0.1:6379> sadd test_set one
(integer) 1
127.0.0.1:6379> sadd test_set one
(integer) 0

127.0.0.1:6379> sadd test_set two
(integer) 1

127.0.0.1:6379> smembers test_set
1) "one"
2) "two"

127.0.0.1:6379> del test_set
(integer) 1

Sorted Set(ZSet)

Redis ZSet 和 Set 的区别在于前者是有序的,每个元素都会关联一个 Double 类型的分数(Score),通过分数来为 ZSet 中的成员进行从小到大的排序。命令格式:zadd key score member

127.0.0.1:6379> zadd test_zset 3 one
(integer) 1
127.0.0.1:6379> zadd test_zset 2 two
(integer) 1
127.0.0.1:6379> zadd test_zset 1 three
(integer) 1

127.0.0.1:6379> ZRANGEBYSCORE test_zset 0 1
1) "three"
127.0.0.1:6379> ZRANGEBYSCORE test_zset 0 2
1) "three"
2) "two"
127.0.0.1:6379> ZRANGEBYSCORE test_zset 0 3
1) "three"
2) "two"
3) "one"

127.0.0.1:6379> del test_zset
(integer) 1

相关阅读:

参考文档

https://www.runoob.com/redis/redis-tutorial.html
https://www.cnblogs.com/zhaohuhu/p/9140673.html

Redis

Redis(Remote DIctionary Server)是由 Salvatore Sanfilippo 开发的 NoSQL 存储系统。使用 ANSI C 语言编写,遵守 BSD 开源协议,是一个支持基于内存、网络的可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。

Redis 通常被称为数据结构服务器,因为其存储的 Value 可以是 String、Hash、List、Sets、Sorted Sets 等类型。

MAC pro 上部署 Redis

安装

brew info redis
 brew install redis

启动

brew services start redis

这个命令会在后台启动 Redis 服务,并且每一次登录系统,都会自动重启。假如你不希望自动启动服务,可以使用配置文件手动启动:

redis-server /usr/local/etc/redis.conf

Redis Client

连接到 Redis

# 没有身份认证时
redis-cli -p 6379 -h 127.0.0.1

# 有身份认证时
redis-cli -p 6379 -h 127.0.0.1 -a yourpassword

查看配置

127.0.0.1:6379> CONFIG GET loglevel
1) "loglevel"
2) "notice"

127.0.0.1:6379> CONFIG GET *
  1) "dbfilename"
  2) "dump.rdb"
  3) "requirepass"
  4) ""
  5) "masterauth"
  6) ""
  7) "cluster-announce-ip"
  8) ""
  9) "unixsocket"
 10) ""
 ...

编辑配置

redis 127.0.0.1:6379> CONFIG SET loglevel "notice"
OK

redis 127.0.0.1:6379> CONFIG GET loglevel
1) "loglevel"
2) "notice"

设置密码(默认为空)

127.0.0.1:6379> config get requirepass
1) "requirepass"
2) ""

127.0.0.1:6379> config set requirepass fanguiju
OK

127.0.0.1:6379> config get requirepass
(error) NOAUTH Authentication required.

127.0.0.1:6379> auth fanguiju
OK

127.0.0.1:6379> config get requirepass
1) "requirepass"
2) "fanguiju"

数据持久化

Redis 提供了良好的数据持久化策略,保证内存中的数据不被丢失,在 Redis 服务器重启后,依然可以获取其中的数据。但大量的数据持久化必然涉及到内存的整理和消耗,所以应该根据应用的实际情况来进行选择。

Redis 启动时,会先扫描数据持久化文件,将数据恢复到内存中。之后再根据持久化的规则运行。默认的条件下采用RDB模式进行数据备份,效率是最高的。如果开启了AOF模式则使用AOF持久化方式,这时RDB模式将不生效。

RDB 模式

RDB 是默认的持久化策略,为定期持久化,所以可能会导致数据的丢失。在对数据完整性要求不高的常客中可以使用 RDB 模式,因为其效率更高。

在 redis.conf 中的持久化配置:

save 900 1
save 300 10
save 60 10000


rdbcompression yes
rdbchecksum yes

dbfilename dump.rdb
dir /usr/local/var/db/redis/

RDB 模式下,主动触发持久化的命令:

  1. 立即持久化 save 命令,会将全部的进程先挂起,直到 save 命令执行完成后,后续的进程才能执行,也就是会造成线程的阻塞;
  2. 后台持久化 bgsave 指令,不会马上数据备份,所以不会造成线程阻塞。

AOF 模式

AOF 模式可以实现实时的数据持久化,如果对数据的安全性要求较高,则应该使用 AOF 模式,但该模式的性能较低。

开启 AOF 配置:

appendonly yes

appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes

其中,appendfsync 定义了持久化策略,默认每秒备份一次,若采用 always 则实时备份,效率最低。

数据类型

String

Redis NoSQL
目录
参考文档
Redis
MAC pro 上部署 Redis
Redis Client
数据持久化
数据类型
Redis String 是最基本的数据类型,一个 Key 对应一个 Value,最大能存储 512MB。

String 类型是二进制安全的,即 Redis 的 String 可以包含任何数据。比如 .jpg 文件或者序列化的对象。

127.0.0.1:6379> set test_str "just test"
OK

127.0.0.1:6379> get test_str
"just test"

127.0.0.1:6379> del test_str
(integer) 1

List

Redis NoSQL
目录
参考文档
Redis
MAC pro 上部署 Redis
Redis Client
数据持久化
数据类型
Redis List 数据类型是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。List 最多可储存 2**32 - 1 个元素,即 4294967295,40 多亿个元素。

127.0.0.1:6379> lpush test_list one
(integer) 1
127.0.0.1:6379> lpush test_list two
(integer) 2
127.0.0.1:6379> lpush test_list three
(integer) 3

127.0.0.1:6379> lrange test_list 0 1
1) "three"
2) "two"
127.0.0.1:6379> lrange test_list 0 2
1) "three"
2) "two"
3) "one"

127.0.0.1:6379> del test_list
(integer) 1

Hash

Redis NoSQL
目录
参考文档
Redis
MAC pro 上部署 Redis
Redis Client
数据持久化
数据类型
Redis Hash 数据类型是一个基于 String 类型的 Key/Value 映射表,类似 Python 的字典数据类型,特别适合用于储存对象。

127.0.0.1:6379> hmset test_hash key1 "v1" key2 "v2"
OK

127.0.0.1:6379> hget test_hash key1
"v1"
127.0.0.1:6379> hget test_hash key2
"v2"

127.0.0.1:6379> del test_hash
(integer) 1

Set

Redis Set 数据类型是 String 类型的无序集合,集合是不会存在重复 Value 的。每个 Set 同样可以储存 40 多亿个成员。

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

127.0.0.1:6379> sadd test_set one
(integer) 1
127.0.0.1:6379> sadd test_set one
(integer) 0

127.0.0.1:6379> sadd test_set two
(integer) 1

127.0.0.1:6379> smembers test_set
1) "one"
2) "two"

127.0.0.1:6379> del test_set
(integer) 1

Sorted Set(ZSet)

Redis ZSet 和 Set 的区别在于前者是有序的,每个元素都会关联一个 Double 类型的分数(Score),通过分数来为 ZSet 中的成员进行从小到大的排序。命令格式:zadd key score member

127.0.0.1:6379> zadd test_zset 3 one
(integer) 1
127.0.0.1:6379> zadd test_zset 2 two
(integer) 1
127.0.0.1:6379> zadd test_zset 1 three
(integer) 1

127.0.0.1:6379> ZRANGEBYSCORE test_zset 0 1
1) "three"
127.0.0.1:6379> ZRANGEBYSCORE test_zset 0 2
1) "three"
2) "two"
127.0.0.1:6379> ZRANGEBYSCORE test_zset 0 3
1) "three"
2) "two"
3) "one"

127.0.0.1:6379> del test_zset
(integer) 1

相关阅读: