Redis 简明教程
Redis - Overview
Redis 是一款开源的高级键值存储,也是用于构建高性能可扩展 Web 应用程序的极佳解决方案。
Redis 具有使其与众不同的三个主要特点。
-
Redis 彻底将其数据库保存在内存中,仅使用磁盘进行持久化。
-
与众多键值数据存储相比,Redis 拥有相对丰富的数据类型集。
-
Redis 可以将数据复制到任意数量的从属。
Redis Advantages
以下是 Redis 的一些优势。
-
Exceptionally fast − Redis 非常快,并且每秒可执行约 110000 个 SET 操作和 81000 个 GET 操作。
-
Supports rich data types − Redis 原生支持开发人员熟知的大多数数据类型,例如列表、集合、有序集合和哈希。这使得解决各种问题变得容易,因为我们知道哪个问题可以通过哪个数据类型得到更好的处理。
-
Operations are atomic − 所有 Redis 操作都是原子的,这确保了如果两个客户端并发访问,Redis 服务器将收到更新后的值。
-
Multi-utility tool − Redis 是一款多功能工具,并可在多种用例中使用,例如缓存、消息队列(Redis 原生支持发布/订阅)、应用程序中的任何短期数据(例如 Web 应用程序会话、网页点击次数等)。
Redis - Environment
在本章中,您将了解 Redis 的环境设置。
Install Redis on Ubuntu
要在 Ubuntu 上安装 Redis,请转到终端并键入以下命令 −
$sudo apt-get update
$sudo apt-get install redis-server
这将在您的计算机上安装 Redis。
Check If Redis is Working
$redis-cli
这将打开 redis 提示符。
redis 127.0.0.1:6379>
在以上提示符中, 127.0.0.1 是您计算机的 IP 地址, 6379 是 Redis 服务器正在运行的端口。现在键入以下 PING 命令。
redis 127.0.0.1:6379> ping
PONG
这表明 Redis 已成功安装在您的计算机上。
Install Redis Desktop Manager on Ubuntu
要在 Ubuntu 上安装 Redis 桌面管理器,只需从 https://redisdesktop.com/download 下载该软件包
打开下载的软件包并安装它。
Redis 桌面管理器将为您提供 UI 来管理您的 Redis 键和数据。
Redis - Configuration
在 Redis 中,在 Redis 根目录有一个配置文件 (redis.conf)。虽然你可以通过 Redis CONFIG 命令获取和设置所有 Redis 配置。
Example
redis 127.0.0.1:6379> CONFIG GET loglevel
1) "loglevel"
2) "notice"
要获取所有配置设置,请将 CONFIG_SETTING_NAME 替换为 *
Example
redis 127.0.0.1:6379> CONFIG GET *
1) "dbfilename"
2) "dump.rdb"
3) "requirepass"
4) ""
5) "masterauth"
6) ""
7) "unixsocket"
8) ""
9) "logfile"
10) ""
11) "pidfile"
12) "/var/run/redis.pid"
13) "maxmemory"
14) "0"
15) "maxmemory-samples"
16) "3"
17) "timeout"
18) "0"
19) "tcp-keepalive"
20) "0"
21) "auto-aof-rewrite-percentage"
22) "100"
23) "auto-aof-rewrite-min-size"
24) "67108864"
25) "hash-max-ziplist-entries"
26) "512"
27) "hash-max-ziplist-value"
28) "64"
29) "list-max-ziplist-entries"
30) "512"
31) "list-max-ziplist-value"
32) "64"
33) "set-max-intset-entries"
34) "512"
35) "zset-max-ziplist-entries"
36) "128"
37) "zset-max-ziplist-value"
38) "64"
39) "hll-sparse-max-bytes"
40) "3000"
41) "lua-time-limit"
42) "5000"
43) "slowlog-log-slower-than"
44) "10000"
45) "latency-monitor-threshold"
46) "0"
47) "slowlog-max-len"
48) "128"
49) "port"
50) "6379"
51) "tcp-backlog"
52) "511"
53) "databases"
54) "16"
55) "repl-ping-slave-period"
56) "10"
57) "repl-timeout"
58) "60"
59) "repl-backlog-size"
60) "1048576"
61) "repl-backlog-ttl"
62) "3600"
63) "maxclients"
64) "4064"
65) "watchdog-period"
66) "0"
67) "slave-priority"
68) "100"
69) "min-slaves-to-write"
70) "0"
71) "min-slaves-max-lag"
72) "10"
73) "hz"
74) "10"
75) "no-appendfsync-on-rewrite"
76) "no"
77) "slave-serve-stale-data"
78) "yes"
79) "slave-read-only"
80) "yes"
81) "stop-writes-on-bgsave-error"
82) "yes"
83) "daemonize"
84) "no"
85) "rdbcompression"
86) "yes"
87) "rdbchecksum"
88) "yes"
89) "activerehashing"
90) "yes"
91) "repl-disable-tcp-nodelay"
92) "no"
93) "aof-rewrite-incremental-fsync"
94) "yes"
95) "appendonly"
96) "no"
97) "dir"
98) "/home/deepak/Downloads/redis-2.8.13/src"
99) "maxmemory-policy"
100) "volatile-lru"
101) "appendfsync"
102) "everysec"
103) "save"
104) "3600 1 300 100 60 10000"
105) "loglevel"
106) "notice"
107) "client-output-buffer-limit"
108) "normal 0 0 0 slave 268435456 67108864 60 pubsub 33554432 8388608 60"
109) "unixsocketperm"
110) "0"
111) "slaveof"
112) ""
113) "notify-keyspace-events"
114) ""
115) "bind"
116) ""
Redis - Data Types
Redis 支持 5 种数据类型。
Hashes
Redis 哈希是键值对的集合。Redis 哈希是字符串字段和字符串值之间的映射。因此,它们用于表示对象。
Example
redis 127.0.0.1:6379> HMSET user:1 username tutorialspoint password
tutorialspoint points 200
OK
redis 127.0.0.1:6379> HGETALL user:1
1) "username"
2) "tutorialspoint"
3) "password"
4) "tutorialspoint"
5) "points"
6) "200"
在上述示例中,哈希数据类型用于存储包含用户基本信息的用户的对象。此处 HMSET, HGETALL 是 Redis 的命令, user − 1 是该键。
每个哈希最多可以存储 232 - 1 个字段值对(超过 40 亿个)。
Lists
Redis 列表只是字符串列表,按插入顺序排序。你可以在表头或表尾向 Redis 列表中添加元素。
Example
redis 127.0.0.1:6379> lpush tutoriallist redis
(integer) 1
redis 127.0.0.1:6379> lpush tutoriallist mongodb
(integer) 2
redis 127.0.0.1:6379> lpush tutoriallist rabitmq
(integer) 3
redis 127.0.0.1:6379> lrange tutoriallist 0 10
1) "rabitmq"
2) "mongodb"
3) "redis"
列表的最大长度为 232 - 1 个元素(4294967295,每个列表超过 40 亿个元素)。
Sets
Redis 集合是无序字符串集合。在 Redis 中,你可以在 O(1) 时间复杂度中添加、删除和测试成员是否存在。
Example
redis 127.0.0.1:6379> sadd tutoriallist redis
(integer) 1
redis 127.0.0.1:6379> sadd tutoriallist mongodb
(integer) 1
redis 127.0.0.1:6379> sadd tutoriallist rabitmq
(integer) 1
redis 127.0.0.1:6379> sadd tutoriallist rabitmq
(integer) 0
redis 127.0.0.1:6379> smembers tutoriallist
1) "rabitmq"
2) "mongodb"
3) "redis"
Note − 在上述示例中, rabitmq 被添加了两次,但是由于集合的唯一特性,它只会添加一次。
集合中的最大成员数为 232 - 1 (4294967295,每个集合超过 40 亿个成员)。
Sorted Sets
Redis 有序集合类似于 Redis 集合,即不重复的字符串集合。但不同的是,有序集合的每个成员都与一个分数相关联,该分数用于按分数从小到大对有序集合进行排序。虽然成员是唯一的,但分数可以重复。
Example
redis 127.0.0.1:6379> zadd tutoriallist 0 redis
(integer) 1
redis 127.0.0.1:6379> zadd tutoriallist 0 mongodb
(integer) 1
redis 127.0.0.1:6379> zadd tutoriallist 0 rabitmq
(integer) 1
redis 127.0.0.1:6379> zadd tutoriallist 0 rabitmq
(integer) 0
redis 127.0.0.1:6379> ZRANGEBYSCORE tutoriallist 0 1000
1) "redis"
2) "mongodb"
3) "rabitmq"
Redis - Commands
Redis 命令用于对 Redis 服务器执行一些操作。
要在 Redis 服务器上运行命令,您需要一个 Redis 客户端。Redis 软件包中提供 Redis 客户端,我们已经安装过了。
Example
下面的示例说明如何启动 Redis 客户端。
要启动 Redis 客户端,请打开终端并键入命令 redis-cli 。然后将连接到本地服务器。然后可以运行任何命令。
$redis-cli
redis 127.0.0.1:6379>
redis 127.0.0.1:6379> PING
PONG
在上面的示例中,我们连接到在本地计算机上运行的 Redis 服务器,并执行了一个命令 PING ,可以检查服务器是否在运行。
Redis - Keys
Redis keys 命令用于管理 Redis 中的键。以下是使用 redis keys 命令的语法。
Example
redis 127.0.0.1:6379> SET tutorialspoint redis
OK
redis 127.0.0.1:6379> DEL tutorialspoint
(integer) 1
在以上示例中, DEL 是命令,而 tutorialspoint 是键。如果删除了键,则该命令的输出将为 (整数) 1,否则为 (整数) 0。
Redis Keys Commands
下表列出了与键相关的一些基本命令。
Sr.No |
Command & Description |
1 |
DEL key 如果存在键,则此命令将删除该键。 |
2 |
DUMP key 此命令返回存储在指定键处的值的序列化版本。 |
3 |
EXISTS key 此命令检查该键是否存在。 |
4 |
EXPIRE key 秒 在指定的时间后设置键的过期时间。 |
5 |
EXPIREAT key timestamp 在指定的时间后设置键的过期时间。此处时间为 Unix 时间戳格式。 |
6 |
PEXPIRE key milliseconds 以毫秒为单位设置键的过期时间。 |
7 |
PEXPIREAT key milliseconds-timestamp 以毫秒为单位设置键的过期时间,该时间指定为 Unix 时间戳。 |
8 |
KEYS pattern 查找所有与指定模式匹配的键。 |
9 |
MOVE key db 将一个键移动到另一个数据库。 |
10 |
PERSIST key 删除键的过期时间。 |
11 |
PTTL key 以毫秒为单位获得键过期剩余时间。 |
12 |
TTL key 获取键过期剩余时间。 |
13 |
RANDOMKEY 从 Redis 返回一个随机键。 |
14 |
RENAME key newkey 更改键名。 |
15 |
RENAMENX key newkey 如果新键不存在,则重命名键。 |
16 |
TYPE key 返回存储在键中的值的类型。 |
Redis - Strings
Redis 字符串命令用于管理 Redis 中的字符串值。以下是使用 Redis 字符串命令的语法。
Example
redis 127.0.0.1:6379> SET tutorialspoint redis
OK
redis 127.0.0.1:6379> GET tutorialspoint
"redis"
在上述示例中, SET 和 GET 是命令,而 tutorialspoint 是密钥。
Redis Strings Commands
下表列出了管理 Redis 中字符串的一些基本命令。
Sr.No |
Command & Description |
1 |
SET key value 此命令将值设置为指定密钥。 |
2 |
GET key 获取键值。 |
3 |
GETRANGE key start end 获取存储在键中的字符串的子字符串。 |
4 |
GETSET key value 设置键的字符串值并返回其旧值。 |
5 |
GETBIT key offset 返回在键中存储的字符串中偏移量的位值。 |
6 |
MGET key1 [key2..] 获取给定键的所有值 |
7 |
SETBIT key offset value 设置或清除键中存储的字符串中偏移量的位 |
8 |
SETEX key seconds value 设置键的过期值 |
9 |
SETNX key value 仅当该键不存在时才设置键的值 |
10 |
SETRANGE key offset value 从指定偏移量开始覆盖键处字符串的部分 |
11 |
STRLEN key 获取键中存储的值的长度 |
12 |
MSET key value [key value …] 设置多个键到多个值 |
13 |
MSETNX key value [key value …] 仅当不存在该键时,设置多个键到多个值 |
14 |
PSETEX key milliseconds value 设置键的值和到期时间(以毫秒为单位) |
15 |
INCR key 将键的整数值增加一 |
16 |
INCRBY key increment 将键的整数值增加指定的量 |
17 |
INCRBYFLOAT key increment 将键的浮点值增加指定的量 |
18 |
DECR key 将键的整数值减一 |
19 |
DECRBY key decrement 将键的整数值减去指定的数字 |
20 |
APPEND key value 向键追加值 |
Redis - Hashes
Redis 哈希是字符串字段和字符串值之间的映射。因此,它们是表示对象的理想数据类型。
在 Redis 中,每个哈希最多可存储超过 40 亿个字段-值对。
Example
redis 127.0.0.1:6379> HMSET tutorialspoint name "redis tutorial"
description "redis basic commands for caching" likes 20 visitors 23000
OK
redis 127.0.0.1:6379> HGETALL tutorialspoint
1) "name"
2) "redis tutorial"
3) "description"
4) "redis basic commands for caching"
5) "likes"
6) "20"
7) "visitors"
8) "23000"
在上面的示例中,我们在名为“tutorialspoint”的哈希中设置了 Redis 教程详细信息(名称、说明、喜欢数、访问数)。
Redis Hash Commands
下表列出了与哈希相关的某些基本命令。
Sr.No |
Command & Description |
1 |
HDEL key field2 [field2] 删除一个或多个哈希字段。 |
2 |
HEXISTS key field 确定是否存在哈希字段。 |
3 |
HGET key field 获取存储在指定键处的哈希字段值。 |
4 |
HGETALL key 获取存储在指定键处的哈希中的所有字段和值 |
5 |
HINCRBY key field increment 将哈希字段的整数值增加给定的数字 |
6 |
HINCRBYFLOAT key field increment 将哈希字段的浮点值增加给定的值 |
7 |
HKEYS key 获取哈希中的所有字段 |
8 |
HLEN key 获取哈希中的字段数 |
9 |
HMGET key field1 [field2] 获取所有给定哈希字段的值 |
10 |
HMSET key field1 value1 [field2 value2 ] 将多个哈希字段设置到多个值中 |
11 |
HSET key field value 设置哈希字段的字符串值 |
12 |
HSETNX key field value 仅在该字段不存在时,才设置哈希字段的值 |
13 |
HVALS key 获取哈希中的所有值 |
14 |
HSCAN key cursor [MATCH pattern] [COUNT count] 逐步迭代哈希字段和关联的值 |
Redis - Lists
Redis 列表只是按插入顺序排序的字符串列表。您可以在列表的头部或尾部向 Redis 列表中添加元素。
列表的最大长度是 232 - 1 个元素(4294967295,每个列表超过 40 亿个元素)。
Example
redis 127.0.0.1:6379> LPUSH tutorials redis
(integer) 1
redis 127.0.0.1:6379> LPUSH tutorials mongodb
(integer) 2
redis 127.0.0.1:6379> LPUSH tutorials mysql
(integer) 3
redis 127.0.0.1:6379> LRANGE tutorials 0 10
1) "mysql"
2) "mongodb"
3) "redis"
在上面的示例中,通过命令 LPUSH 在名为“教程”的 Redis 列表中插入了三个值。
Redis Lists Commands
下表列出了与列表相关的一些基本命令。
Sr.No |
Command & Description |
1 |
BLPOP key1 [key2 ] timeout 移除并获取列表中的第一个元素,或阻塞直到出现元素 |
2 |
BRPOP key1 [key2 ] timeout 移除并获取列表中的最后一个元素,或阻塞直到出现元素 |
3 |
BRPOPLPUSH source destination timeout 从列表中弹出一个值,将其推入另一个列表并返回该值;或阻塞直到出现元素 |
4 |
LINDEX key index 根据其索引从列表中获取一个元素 |
5 |
link:../redis/lists_linsert.html[LINSERT key BEFORE |
AFTER pivot value]在列表中的另一个元素之前或之后插入元素 |
6 |
LLEN key 获取一个列表的长度 |
7 |
LPOP key 移除并获取列表中的第一个元素 |
8 |
LPUSH key value1 [value2] 在列表最前面附加一个或多个值 |
9 |
LPUSHX key value 只在列表存在的情况下在列表最前面附加一个值 |
10 |
LRANGE key start stop 从列表中获取一个元素的范围 |
11 |
LREM key count value 从列表中删除元素 |
12 |
LSET key index value 根据索引设置列表中元素的值 |
13 |
LTRIM key start stop 将列表修剪到指定范围 |
14 |
RPOP key 移除并获取列表中的最后一个元素 |
15 |
RPOPLPUSH source destination 移除列表中的最后一个元素,将其追加到另一个列表并返回该元素 |
16 |
RPUSH key value1 [value2] 在列表后面追加一个或多个值 |
17 |
Redis - Sets
Redis 集合是一组无序的唯一字符串。唯一意味着集合不允许键中的数据重复。
在 Redis 集合中添加、移除,以及测试成员是否存在的时间复杂度为 O(1)(常数时间,与集合中包含的元素数量无关)。列表的最大长度是 232 - 1 个元素(4294967295,每个集合超过 40 亿个元素)。
Example
redis 127.0.0.1:6379> SADD tutorials redis
(integer) 1
redis 127.0.0.1:6379> SADD tutorials mongodb
(integer) 1
redis 127.0.0.1:6379> SADD tutorials mysql
(integer) 1
redis 127.0.0.1:6379> SADD tutorials mysql
(integer) 0
redis 127.0.0.1:6379> SMEMBERS tutorials
1) "mysql"
2) "mongodb"
3) "redis"
在上述示例中,通过命令 SADD 向名为“教程”的 Redis 集合中插入三个值。
Redis Sets Commands
下表列出了与集合相关的一些基本命令。
Sr.No |
Command & Description |
1 |
SADD key member1 [member2] 向集合中添加一个或多个成员 |
2 |
SCARD key 获取集合中的成员数量 |
3 |
SDIFF key1 [key2] 相减多个集合 |
4 |
SDIFFSTORE destination key1 [key2] 相减多个集合并将结果集合存储在键中 |
5 |
SINTER key1 [key2] 相交多个集合 |
6 |
SINTERSTORE destination key1 [key2] 相交多个集合并将结果集合存储在键中 |
7 |
SISMEMBER key member 确定给定值是否是某个集合的成员 |
8 |
SMEMBERS key 获取集合中的所有成员 |
9 |
SMOVE source destination member 将成员从一个集合移动到另一个集合 |
10 |
SPOP key 移除一个随机成员并从集合中返回该成员 |
11 |
SRANDMEMBER key [count] 从集合中获取一个或多个随机成员 |
12 |
SREM key member1 [member2] 移除集合中的一个或多个成员 |
13 |
SUNION key1 [key2] 添加多个集合 |
14 |
SUNIONSTORE destination key1 [key2] 添加多个集合并将结果集合存储在键中 |
15 |
Redis - Sorted Sets
Redis 有序集合类似于 Redis 集合,它们在集合中存储值的唯一特性。不同之处在于,有序集合的每个成员都与一个得分相关联,该得分用于对有序集合按从小到大的得分进行排序。
在 Redis 有序集合中,以 O(1)(与集合内部包含的元素数量无关的固定时间)添加、移除和测试成员的存在。列表的最大长度为 232 - 1 个元素(4294967295,每个集合超过 40 亿个元素)。
Example
redis 127.0.0.1:6379> ZADD tutorials 1 redis
(integer) 1
redis 127.0.0.1:6379> ZADD tutorials 2 mongodb
(integer) 1
redis 127.0.0.1:6379> ZADD tutorials 3 mysql
(integer) 1
redis 127.0.0.1:6379> ZADD tutorials 3 mysql
(integer) 0
redis 127.0.0.1:6379> ZADD tutorials 4 mysql
(integer) 0
redis 127.0.0.1:6379> ZRANGE tutorials 0 10 WITHSCORES
1) "redis"
2) "1"
3) "mongodb"
4) "2"
5) "mysql"
6) "4"
在上述示例中,通过名为 ZADD 的命令,将三个值连同它们在名为“tutorials”的 Redis 有序集合中的得分一起插入。
Redis Sorted Sets Commands
下表列出了与有序集合相关的部分基本命令。
Redis - HyperLogLog
Redis HyperLogLog 是一种算法,它使用随机化来近似集合中唯一元素的数量,只使用一个常量和少量内存。
即使使用极少的内存(大约每个键 12 KB),HyperLogLog 也可以很好地近似集合的基数,标准误为 0.81%。您可以计数的项目数量没有限制,除非达到 264 个项目。
Example
下面的示例说明 Redis HyperLogLog 的工作原理。
redis 127.0.0.1:6379> PFADD tutorials "redis"
1) (integer) 1
redis 127.0.0.1:6379> PFADD tutorials "mongodb"
1) (integer) 1
redis 127.0.0.1:6379> PFADD tutorials "mysql"
1) (integer) 1
redis 127.0.0.1:6379> PFCOUNT tutorials
(integer) 3
Redis HyperLogLog Commands
下表列出了一些与 Redis HyperLogLog 相关的基本命令。
Sr.No |
Command & Description |
1 |
PFADD key element [element …] 将指定元素添加到指定的 HyperLogLog。 |
2 |
PFCOUNT key [key …] 返回 HyperLogLog 使用的关键(key)观察的集合(集)的大约基数。 |
3 |
PFMERGE destkey sourcekey [sourcekey …] 将 N 个不同的 HyperLogLogs 合并为一个。 |
Redis - Publish Subscribe
Redis Pub/Sub 实现消息系统,其中发送者(在 redis 术语中称为发布者)发送消息,而接收者(订阅者)收到消息。传输消息的链接称为 channel 。
在 Redis 中,客户端可以订阅任意数量的频道。
Example
下面的示例解释了发布订阅概念的工作原理。在以下示例中,一个客户端订阅名为“redisChat”的频道。
redis 127.0.0.1:6379> SUBSCRIBE redisChat
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "redisChat"
3) (integer) 1
现在,两个客户端正在一个名为“redisChat”的通道上发布消息,并且上面订阅的客户端正在接收消息。
redis 127.0.0.1:6379> PUBLISH redisChat "Redis is a great caching technique"
(integer) 1
redis 127.0.0.1:6379> PUBLISH redisChat "Learn redis by tutorials point"
(integer) 1
1) "message"
2) "redisChat"
3) "Redis is a great caching technique"
1) "message"
2) "redisChat"
3) "Learn redis by tutorials point"
Redis PubSub Commands
下表列出了一些与 Redis Pub/Sub 相关的基本命令。
Sr.No |
Command & Description |
1 |
PSUBSCRIBE pattern [pattern …] 订阅与给定模式匹配的通道。 |
2 |
PUBSUB subcommand [argument [argument …]] 讲述 Pub/Sub 系统的状态。例如,哪些客户端在服务器上处于活动状态。 |
3 |
PUBLISH channel message 在某个通道上发布消息。 |
4 |
PUNSUBSCRIBE [pattern [pattern …]] 停止侦听发布到与给定模式匹配的通道的消息。 |
5 |
SUBSCRIBE channel [channel …] 侦听发布到给定通道的消息。 |
6 |
UNSUBSCRIBE [channel [channel …]] 停止侦听发布到给定通道的消息。 |
Redis - Transactions
Redis 事务允许在一步中执行一组命令。以下是事务的两个特性。
-
事务中的所有命令按顺序作为单个隔离操作执行。在 Redis 事务的执行过程中,由其他客户端发出的请求不可能得到处理。
-
Redis 事务也是原子的。原子性意味着所有命令都会被处理,或者都不会被处理。
Sample
Redis 事务由命令 MULTI 启动,然后您需要传递一个应作为事务执行的命令列表,之后整个事务将由命令 EXEC 执行。
redis 127.0.0.1:6379> MULTI
OK
List of commands here
redis 127.0.0.1:6379> EXEC
Redis Transaction Commands
下表显示了与 Redis 事务相关的一些基本命令。
Sr.No |
Command & Description |
1 |
DISCARD 放弃 MULTI 之后发出的所有命令 |
2 |
EXEC 执行 MULTI 之后发出的所有命令 |
3 |
MULTI 标记事务块的开始 |
4 |
UNWATCH 忽略所有被监视的键 |
5 |
WATCH key [key …] 监视给定键以确定 MULTI/EXEC 块的执行 |
Redis - Scripting
Redis 脚本用于使用 Lua 解释器评估脚本。它内置于 Redis 2.6.0 以上的版本中。用于脚本的命令是 EVAL 命令。
Redis Scripting Commands
以下表格列出了一些与 Redis 脚本相关的基本命令。
Sr.No |
Command & Description |
1 |
|
2 |
|
3 |
SCRIPT EXISTS script [script …] 检查脚本缓存中是否存在脚本。 |
4 |
SCRIPT FLUSH 移出脚本缓存中的所有脚本。 |
5 |
SCRIPT KILL 终止当前正在执行的脚本。 |
6 |
SCRIPT LOAD script 将指定的 Lua 脚本加载到脚本缓存中。 |
Redis - Connections
Redis 连接命令主要用于管理客户端与 Redis 服务器之间的连接。
Example
下面的示例说明客户端如何向 Redis 服务器验证它自己并检查服务器是否在运行。
redis 127.0.0.1:6379> AUTH "password"
OK
redis 127.0.0.1:6379> PING
PONG
Redis Connection Commands
下表列出了一些与 Redis 连接相关的基本命令。
Sr.No |
Command & Description |
1 |
AUTH password 使用给定的密码向服务器进行身份验证 |
2 |
ECHO message 打印给定的字符串 |
3 |
PING 检查服务器是否在运行 |
4 |
QUITCloses the current connection |
5 |
SELECT index 更改当前连接所选的数据库 |
Redis - Server
Redis 服务器命令主要用于管理 Redis 服务器。
Example
以下示例说明了我们如何获得服务器的所有统计信息和信息。
redis 127.0.0.1:6379> INFO
# Server
redis_version:2.8.13
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:c2238b38b1edb0e2
redis_mode:standalone
os:Linux 3.5.0-48-generic x86_64
arch_bits:64
multiplexing_api:epoll
gcc_version:4.7.2
process_id:3856
run_id:0e61abd297771de3fe812a3c21027732ac9f41fe
tcp_port:6379
uptime_in_seconds:11554
uptime_in_days:0 hz:10
lru_clock:16651447
config_file:
# Clients
connected_clients:1
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
# Memory
used_memory:589016
used_memory_human:575.21K
used_memory_rss:2461696
used_memory_peak:667312
used_memory_peak_human:651.67K
used_memory_lua:33792
mem_fragmentation_ratio:4.18
mem_allocator:jemalloc-3.6.0
# Persistence
loading:0
rdb_changes_since_last_save:3
rdb_bgsave_in_progress:0
rdb_last_save_time:1409158561
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:0
rdb_current_bgsave_time_sec:-1
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok
# Stats
total_connections_received:24
total_commands_processed:294
instantaneous_ops_per_sec:0
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:0
evicted_keys:0
keyspace_hits:41
keyspace_misses:82
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:264
# Replication
role:master
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
# CPU
used_cpu_sys:10.49
used_cpu_user:4.96
used_cpu_sys_children:0.00
used_cpu_user_children:0.01
# Keyspace
db0:keys = 94,expires = 1,avg_ttl = 41638810
db1:keys = 1,expires = 0,avg_ttl = 0
db3:keys = 1,expires = 0,avg_ttl = 0
Redis Server Commands
下表列出了一些与 Redis 服务器相关的基本命令。
Sr.No |
Command & Description |
1 |
BGREWRITEAOF 异步重写仅追加文件 |
2 |
BGSAVE 异步将数据集保存到磁盘 |
3 |
CLIENT KILL [ip:port] [ID client-id] 终止与客户端的连接 |
4 |
CLIENT LIST 获取到服务器的所有客户端连接列表 |
5 |
CLIENT GETNAME 获取当前连接的名称 |
6 |
CLIENT PAUSE timeout 在指定时间停止处理来自客户端的命令 |
7 |
CLIENT SETNAME connection-name 设置当前连接名称 |
8 |
CLUSTER SLOTS 获取集群槽到节点映射的数组 |
9 |
COMMAND 获取 Redis 命令详细信息的数组 |
10 |
COMMAND COUNT 获取 Redis 命令的总数 |
11 |
COMMAND GETKEYS 给定一个完整的 Redis 命令,从中提取键 |
12 |
BGSAVE 异步将数据集保存到磁盘 |
13 |
COMMAND INFO command-name [command-name …] 获取特定 Redis 命令详细信息的数组 |
14 |
CONFIG GET parameter 获取配置参数的值 |
15 |
CONFIG REWRITE 使用内存中的配置重写配置文件 |
16 |
CONFIG SET parameter value 将配置参数设置为给定值 |
17 |
CONFIG RESETSTAT 重置 INFO 返回的统计信息 |
18 |
DBSIZE 返回所选数据库中的键数 |
19 |
DEBUG OBJECT key 获取关于某个键的调试信息 |
20 |
DEBUG SEGFAULT 使服务器崩溃 |
21 |
FLUSHALL 从所有数据库中删除所有密钥 |
22 |
FLUSHDB 从当前数据库中删除所有密钥 |
23 |
INFO [section] 获取服务器的信息和统计数据 |
24 |
LASTSAVE 获取最后一次成功保存到磁盘的 UNIX 时间戳 |
25 |
MONITOR 实时监听服务器接收的所有请求 |
26 |
ROLE 返回实例在复制环境中的角色 |
27 |
SAVE 同步将数据集保存到磁盘 |
28 |
SHUTDOWN [NOSAVE] [SAVE] 同步将数据集保存到磁盘,然后关闭服务器 |
29 |
SLAVEOF host port 使服务器成为另一个实例的从服务器,或将其提升为主服务器 |
30 |
SLOWLOG subcommand [argument] 管理 Redis 慢查询日志 |
31 |
SYNCCommand used for replication |
32 |
TIME 返回当前服务器时间 |
Redis - Backup
Redis SAVE 命令用于创建当前 Redis 数据库的备份。
Redis - Security
可以保护 Redis 数据库,以便任何连接客户端在执行命令之前需要进行身份验证。要保护 Redis,需要在配置文件中设置密码。
Example
以下示例演示了保护 Redis 实例的步骤。
127.0.0.1:6379> CONFIG get requirepass
1) "requirepass"
2) ""
默认情况下,此属性为空,这意味着为此实例未设置密码。可以通过执行以下命令来更改此属性。
127.0.0.1:6379> CONFIG set requirepass "tutorialspoint"
OK
127.0.0.1:6379> CONFIG get requirepass
1) "requirepass"
2) "tutorialspoint"
设置密码后,如果任何客户端在未经过身份验证的情况下运行命令,则 (error) NOAUTH Authentication required . error 将返回。因此,客户端需要使用 AUTH 命令来验证自身。
Redis - Benchmarks
Redis 基准是通过同时运行 n 个命令来检查 Redis 性能的实用工具。
Example
以下示例通过调用 100000 个命令检查 Redis。
redis-benchmark -n 100000
PING_INLINE: 141043.72 requests per second
PING_BULK: 142857.14 requests per second
SET: 141442.72 requests per second
GET: 145348.83 requests per second
INCR: 137362.64 requests per second
LPUSH: 145348.83 requests per second
LPOP: 146198.83 requests per second
SADD: 146198.83 requests per second
SPOP: 149253.73 requests per second
LPUSH (needed to benchmark LRANGE): 148588.42 requests per second
LRANGE_100 (first 100 elements): 58411.21 requests per second
LRANGE_300 (first 300 elements): 21195.42 requests per second
LRANGE_500 (first 450 elements): 14539.11 requests per second
LRANGE_600 (first 600 elements): 10504.20 requests per second
MSET (10 keys): 93283.58 requests per second
以下是 Redis 基准中可用选项的列表。
Sr.No |
Option |
Description |
Default Value |
1 |
-h |
Specifies server host name |
127.0.0.1 |
2 |
-p |
Specifies server port |
6379 |
3 |
-s |
Specifies server socket |
|
4 |
-c |
指定并行连接数 |
50 |
5 |
-n |
指定请求总数 |
10000 |
6 |
-d |
指定 SET/GET 值在字节中的数据大小 |
2 |
7 |
-k |
1=keep alive, 0=reconnect |
1 |
8 |
-r |
使用随机键进行 SET/GET/INCR,使用随机值进行 SADD |
|
9 |
-p |
Pipeline <numreq> requests |
1 |
10 |
-h |
Specifies server host name |
|
11 |
-q |
强制 Redis 静音。仅显示查询/秒值 |
|
12 |
--csv |
Output in CSV format |
|
13 |
-l |
生成循环,无限期地运行测试 |
|
14 |
-t |
仅运行逗号分隔的测试列表 |
|
15 |
-I |
空闲模式。仅打开 N 个空闲连接并等待 |
Redis - Client Connection
如果启用,Redis 接受在已配置监听 TCP 端口和 Unix 套接字上的客户端连接。接受新的客户端连接时,将执行以下操作:
-
由于 Redis 使用多路复用和非阻塞 I/O,因此将客户端套接字置于非阻塞状态。
-
设置 TCP_NODELAY 选项以确保我们的连接中没有延迟。
-
创建可读取的文件事件,以便 Redis 能够在套接字上准备好读取新数据后立即收集客户端查询。
Redis - Pipelining
Redis 是 TCP 服务器,支持请求/响应协议。在 Redis 中,通过以下步骤来完成请求:
-
客户端发送查询到服务器,然后再从套接字(通常以阻塞方式)读取服务器响应。
-
服务器处理命令并将响应发回给客户端。
Meaning of Pipelining
Pipelining 的基本含义是,客户端可以向服务器发送多个请求,而无需等待任何回复,最后一步再读取回复。
Example
要检查 Redis Pipelining,只需启动 Redis 实例并在终端中输入以下命令。
$(echo -en "PING\r\n SET tutorial redis\r\nGET tutorial\r\nINCR
visitor\r\nINCR visitor\r\nINCR visitor\r\n"; sleep 10) | nc localhost 6379
+PONG
+OK
redis
:1
:2
:3
在上面的示例中,我们将使用 PING 命令检查 Redis 连接。我们设置了一个名叫 tutorial 的字符串,其值为 redis 。稍后,我们获取键值并增加访问者数量三次。在结果中,我们可以看到所有命令均已提交到 Redis 一次,而 Redis 以单步提供了所有命令的输出。
Redis - Partitioning
分区是将你的数据拆分成多个 Redis 实例的过程,以便每个实例只包含你的键子集。
Benefits of Partitioning
-
它允许基于多台计算机内存总和的更大数据库。不分区的话,你将受到一台计算机能够支持的内存大小的限制。
-
它允许将计算能力扩展到多个核心和多台计算机,将网络带宽扩展到多台计算机和网络适配器。
Disadvantages of Partitioning
-
通常不支持涉及多个键的操作。例如,如果两个集合存储在映射到不同 Redis 实例的键中,你无法执行这两个集合之间的交集。
-
涉及多个键的 Redis 事务无法使用。
-
分区的颗粒度是键,因此无法使用一个很庞大的键(例如很大的排序集)对数据集进行分片。
-
使用分区时,数据处理更加复杂。例如,你必须处理多个 RDB/AOF 文件,并且为了获取数据的备份,你需要汇总来自多个实例和主机的持久文件。
-
增减容量可能很复杂。例如,Redis 集群主要支持数据透明重新平衡,并且能够在运行时增减节点。但是,其他系统(比如客户端分区和代理)不支持此特性。一种称为 Presharding 的技术对此有所帮助。
Redis - Java
在开始在 Java 程序中使用 Redis 之前,您需要确保计算机上安装了 Redis Java 驱动程序和 Java。您可以查看我们的 Java 教程,了解如何在您的计算机上安装 Java。
Installation
现在,让我们看看如何设置 Redis Java 驱动程序。
-
您需要从路径 Download jedis.jar 下载 jar。务必下载最新版本。
-
您需要将 jedis.jar 包含在类路径中。
Connect to Redis Server
import redis.clients.jedis.Jedis;
public class RedisJava {
public static void main(String[] args) {
//Connecting to Redis server on localhost
Jedis jedis = new Jedis("localhost");
System.out.println("Connection to server sucessfully");
//check whether server is running or not
System.out.println("Server is running: "+jedis.ping());
}
}
现在,让我们编译并运行上述程序以测试与 Redis 服务器的连接。您可以根据需要更改路径。我们假设 jedis.jar 的当前版本可用于当前路径中。
$javac RedisJava.java
$java RedisJava
Connection to server sucessfully
Server is running: PONG
Redis Java String Example
import redis.clients.jedis.Jedis;
public class RedisStringJava {
public static void main(String[] args) {
//Connecting to Redis server on localhost
Jedis jedis = new Jedis("localhost");
System.out.println("Connection to server sucessfully");
//set the data in redis string
jedis.set("tutorial-name", "Redis tutorial");
// Get the stored data and print it
System.out.println("Stored string in redis:: "+ jedis.get("tutorialname"));
}
}
现在,让我们编译并运行上述程序。
$javac RedisStringJava.java
$java RedisStringJava
Connection to server sucessfully
Stored string in redis:: Redis tutorial
Redis Java List Example
import redis.clients.jedis.Jedis;
public class RedisListJava {
public static void main(String[] args) {
//Connecting to Redis server on localhost
Jedis jedis = new Jedis("localhost");
System.out.println("Connection to server sucessfully");
//store data in redis list
jedis.lpush("tutorial-list", "Redis");
jedis.lpush("tutorial-list", "Mongodb");
jedis.lpush("tutorial-list", "Mysql");
// Get the stored data and print it
List<String> list = jedis.lrange("tutorial-list", 0 ,5);
for(int i = 0; i<list.size(); i++) {
System.out.println("Stored string in redis:: "+list.get(i));
}
}
}
现在,让我们编译并运行上述程序。
$javac RedisListJava.java
$java RedisListJava
Connection to server sucessfully
Stored string in redis:: Redis
Stored string in redis:: Mongodb
Stored string in redis:: Mysql
Redis Java Keys Example
import redis.clients.jedis.Jedis;
public class RedisKeyJava {
public static void main(String[] args) {
//Connecting to Redis server on localhost
Jedis jedis = new Jedis("localhost");
System.out.println("Connection to server sucessfully");
//store data in redis list
// Get the stored data and print it
List<String> list = jedis.keys("*");
for(int i = 0; i<list.size(); i++) {
System.out.println("List of stored keys:: "+list.get(i));
}
}
}
现在,让我们编译并运行上述程序。
$javac RedisKeyJava.java
$java RedisKeyJava
Connection to server sucessfully
List of stored keys:: tutorial-name
List of stored keys:: tutorial-list
Redis - PHP
在 PHP 程序中使用 Redis 之前,需要确保计算机上已设置好 Redis PHP 驱动和 PHP。可以查看 PHP 教程,以在计算机上安装 PHP。
Installation
现在,让我们检查如何设置 Redis PHP 驱动。
需要从 github 存储库 https://github.com/nicolasff/phpredis 下载 phpredis。下载后,将文件解压到 phpredis 目录。在 Ubuntu 上,安装以下扩展程序。
cd phpredis
sudo phpize
sudo ./configure
sudo make
sudo make install
现在,将“modules”文件夹的内容复制并粘贴到 PHP 扩展目录,并在 php.ini 中添加以下行。
extension = redis.so
现在,Redis PHP 安装已完成
Connect to Redis Server
<?php
//Connecting to Redis server on localhost
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
echo "Connection to server sucessfully";
//check whether server is running or not
echo "Server is running: ".$redis->ping();
?>
此程序执行时将会显示以下结果。
Connection to server sucessfully
Server is running: PONG
Redis PHP String Example
<?php
//Connecting to Redis server on localhost
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
echo "Connection to server sucessfully";
//set the data in redis string
$redis->set("tutorial-name", "Redis tutorial");
// Get the stored data and print it
echo "Stored string in redis:: " .$redis→get("tutorial-name");
?>
执行上述程序后,它将产生以下结果。
Connection to server sucessfully
Stored string in redis:: Redis tutorial
Redis php List Example
<?php
//Connecting to Redis server on localhost
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
echo "Connection to server sucessfully";
//store data in redis list
$redis->lpush("tutorial-list", "Redis");
$redis->lpush("tutorial-list", "Mongodb");
$redis->lpush("tutorial-list", "Mysql");
// Get the stored data and print it
$arList = $redis->lrange("tutorial-list", 0 ,5);
echo "Stored string in redis:: ";
print_r($arList);
?>
执行上述程序后,它将产生以下结果。
Connection to server sucessfully
Stored string in redis::
Redis
Mongodb
Mysql
Redis PHP Keys Example
<?php
//Connecting to Redis server on localhost
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
echo "Connection to server sucessfully";
// Get the stored keys and print it
$arList = $redis->keys("*");
echo "Stored keys in redis:: "
print_r($arList);
?>
此程序执行时将会显示以下结果。
Connection to server sucessfully
Stored string in redis::
tutorial-name
tutorial-list