鍍金池/ 教程/ 大數(shù)據(jù)/ Redis快速入門
C#連接Redis
Redis基準(zhǔn)
Redis數(shù)據(jù)類型
Windows下安裝Redis
Redis事務(wù)
Redis腳本
Redis配置
Redis客戶端連接
Redis字符串
Redis管道
PHP連接Redis
Redis快速入門
Redis命令
Redis教程
Redis哈希
Redis環(huán)境安裝配置
Redis分區(qū)
Redis備份
Redis發(fā)送訂閱
Redis連接
Redis服務(wù)器
Redis集合
Redis鍵命令
Redis HyperLogLog
Java連接Redis
Redis列表

Redis快速入門

Redis是一個開源,高級的鍵值存儲和一個適用的解決方案,用于構(gòu)建高性能,可擴(kuò)展的Web應(yīng)用程序。

Redis有三個主要特點(diǎn),使它優(yōu)越于其它鍵值數(shù)據(jù)存儲系統(tǒng) -

  • Redis將其數(shù)據(jù)庫完全保存在內(nèi)存中,僅使用磁盤進(jìn)行持久化。
  • 與其它鍵值數(shù)據(jù)存儲相比,Redis有一組相對豐富的數(shù)據(jù)類型。
  • Redis可以將數(shù)據(jù)復(fù)制到任意數(shù)量的從機(jī)中。

Redis官方網(wǎng)網(wǎng)站是:http://www.redis.io/ ,如下:

Redis的優(yōu)點(diǎn)

以下是Redis的一些優(yōu)點(diǎn)。

  • 異???/strong> - Redis非??欤棵肟蓤?zhí)行大約110000次的設(shè)置(SET)操作,每秒大約可執(zhí)行81000次的讀取/獲取(GET)操作。
  • 支持豐富的數(shù)據(jù)類型 - Redis支持開發(fā)人員常用的大多數(shù)數(shù)據(jù)類型,例如列表,集合,排序集和散列等等。這使得Redis很容易被用來解決各種問題,因?yàn)槲覀冎滥男﹩栴}可以更好使用地哪些數(shù)據(jù)類型來處理解決。
  • 操作具有原子性 - 所有Redis操作都是原子操作,這確保如果兩個客戶端并發(fā)訪問,Redis服務(wù)器能接收更新的值。
  • 多實(shí)用工具 - Redis是一個多實(shí)用工具,可用于多種用例,如:緩存,消息隊(duì)列(Redis本地支持發(fā)布/訂閱),應(yīng)用程序中的任何短期數(shù)據(jù),例如,web應(yīng)用程序中的會話,網(wǎng)頁命中計數(shù)等。

Redis與其他鍵值存儲系統(tǒng)

  • Redis是鍵值數(shù)據(jù)庫系統(tǒng)的不同進(jìn)化路線,它的值可以包含更復(fù)雜的數(shù)據(jù)類型,可在這些數(shù)據(jù)類型上定義原子操作。

  • Redis是一個內(nèi)存數(shù)據(jù)庫,但在磁盤數(shù)據(jù)庫上是持久的,因此它代表了一個不同的權(quán)衡,在這種情況下,在不能大于存儲器(內(nèi)存)的數(shù)據(jù)集的限制下實(shí)現(xiàn)非常高的寫和讀速度。

  • 內(nèi)存數(shù)據(jù)庫的另一個優(yōu)點(diǎn)是,它與磁盤上的相同數(shù)據(jù)結(jié)構(gòu)相比,復(fù)雜數(shù)據(jù)結(jié)構(gòu)在內(nèi)存中存儲表示更容易操作。 因此,Redis可以做很少的內(nèi)部復(fù)雜性。

1. Redis環(huán)境安裝配置

在本章中,您將了解和學(xué)習(xí)Redis的環(huán)境安裝設(shè)置。

在Ubuntu上安裝Redis

要在Ubuntu上安裝Redis,打開終端并鍵入以下命令 -

[yiibai@ubuntu:~]$ sudo apt-get update 
[yiibai@ubuntu:~]$ sudo apt-get install redis-server

這將在Ubuntu機(jī)器上安裝Redis。

啟動Redis

[yiibai@ubuntu:~]$ redis-server
[2988] 07 Feb 17:09:42.485 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
[2988] 07 Feb 17:09:42.488 # Unable to set the max number of files limit to 10032 (Operation not permitted), setting the max clients configuration to 3984.
[2988] 07 Feb 17:09:42.490 # Warning: 32 bit instance detected but no memory lim
                _._
           _.-``__ ''-._
      _.-``    `.  `_.  ''-._           Redis 2.8.4 (00000000/0) 32 bit
  .-`` .-```.  ```\/    _.,_ ''-._
 (    '      ,       .-`  | `,    )     Running in stand alone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 2988
  `-._    `-._  `-./  _.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |           http://redis.io
  `-._    `-._`-.__.-'_.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |
  `-._    `-._`-.__.-'_.-'    _.-'
      `-._    `-.__.-'    _.-'
          `-._        _.-'
              `-.__.-'

[2988] 07 Feb 17:09:42.581 # Server started, Redis version 2.8.4
[2988] 07 Feb 17:09:42.582 # WARNING overcommit_memory is set to 0! Background s                                                                                        ' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_m
[2988] 07 Feb 17:09:42.582 * The server is now ready to accept connections on po

檢查Redis是否正在工作

[yiibai@ubuntu:~]$ redis-cli

這將打開一個redis提示,如下所示 -

redis 127.0.0.1:6379>

在上面的提示中,127.0.0.1是計算機(jī)的IP地址,6379是運(yùn)行Redis服務(wù)器的端口。 現(xiàn)在鍵入以下PING命令。

redis 127.0.0.1:6379> ping 
PONG

這表明Redis已成功在您的計算機(jī)上安裝了。

在Ubuntu上安裝Redis桌面管理

要在Ubuntu上安裝Redis桌面管理器,可從 http://redisdesktop.com/download 下載該軟件包,安裝即可。

打開下載的軟件包并安裝。

Redis桌面管理器將提供用于管理Redis的鍵和數(shù)據(jù)的UI。

2. Redis配置

在Redis中,在Redis的根目錄下有一個配置文件(redis.conf)。當(dāng)然您可以通過Redis CONFIG命令獲取和設(shè)置所有的Redis配置。

語法
以下是Redis中的CONFIG命令的基本語法。

redis 127.0.0.1:6379> CONFIG GET CONFIG_SETTING_NAME

示例

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

要獲取所有配置設(shè)置,請使用*代替CONFIG_SETTING_NAME

示例

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) "/var/log/redis/redis-server.log"
 11) "pidfile"
 12) "/var/run/redis/redis-server.pid"
 13) "maxmemory"
 14) "3221225472"
 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) "lua-time-limit"
 40) "5000"
 41) "slowlog-log-slower-than"
 42) "10000"
 43) "slowlog-max-len"
 44) "128"
 45) "port"
 46) "6379"
 47) "databases"
 48) "16"
 49) "repl-ping-slave-period"
 50) "10"
 51) "repl-timeout"
 52) "60"
 53) "repl-backlog-size"
 54) "1048576"
 55) "repl-backlog-ttl"
 56) "3600"
 57) "maxclients"
 58) "3984"
 59) "watchdog-period"
 60) "0"
 61) "slave-priority"
 62) "100"
 63) "min-slaves-to-write"
 64) "0"
 65) "min-slaves-max-lag"
 66) "10"
 67) "hz"
 68) "10"
 69) "no-appendfsync-on-rewrite"
 70) "no"
 71) "slave-serve-stale-data"
 72) "yes"
 73) "slave-read-only"
 74) "yes"
 75) "stop-writes-on-bgsave-error"
 76) "yes"
 77) "daemonize"
 78) "yes"
 79) "rdbcompression"
 80) "yes"
 81) "rdbchecksum"
 82) "yes"
 83) "activerehashing"
 84) "yes"
 85) "repl-disable-tcp-nodelay"
 86) "no"
 87) "aof-rewrite-incremental-fsync"
 88) "yes"
 89) "appendonly"
 90) "no"
 91) "dir"
 92) "/var/lib/redis"
 93) "maxmemory-policy"
 94) "noeviction"
 95) "appendfsync"
 96) "everysec"
 97) "save"
 98) "900 1 300 10 60 10000"
 99) "loglevel"
100) "notice"
101) "client-output-buffer-limit"
102) "normal 0 0 0 slave 268435456 67108864 60 pubsub 33554432 8388608 60"
103) "unixsocketperm"
104) "0"
105) "slaveof"
106) ""
107) "notify-keyspace-events"
108) ""
109) "bind"
110) "127.0.0.1"

編輯配置

要更新配置,可以直接編輯redis.conf文件,也可以通過CONFIG set命令更新配置。

語法
以下是CONFIG SET命令的基本語法。

redis 127.0.0.1:6379> CONFIG SET CONFIG_SETTING_NAME NEW_CONFIG_VALUE

示例

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

3. Redis數(shù)據(jù)類型

Redis支持5種數(shù)據(jù)類型。

字符串

Redis中的字符串是一個字節(jié)序列。Redis中的字符串是二進(jìn)制安全的,這意味著它們的長度不由任何特殊的終止字符決定。因此,可以在一個字符串中存儲高達(dá)512兆字節(jié)的任何內(nèi)容。

示例

redis 127.0.0.1:6379> set name "yiibai.com" 
OK 
redis 127.0.0.1:6379> get name 
"yiibai.com"

在上面的示例中,setget是Redis命令,name是Redis中使用的鍵,yiibai.com是存儲在Redis中的字符串的值。

注 - Redis命令不區(qū)分大小寫,如SET,Setset都是同一個命令。字符串值的最大長度為 512MB。

散列/哈希

Redis散列/哈希(Hashes)是鍵值對的集合。Redis散列/哈希是字符串字段和字符串值之間的映射。因此,它們用于表示對象。

示例

redis 127.0.0.1:6379> HMSET ukey username "yiibai" password "passswd123" points 200

在上述示例中,散列/哈希數(shù)據(jù)類型用于存儲包含用戶的基本信息的用戶對象。這里HMSET,HGETALL是Redis的命令,而ukey是鍵的名稱。

每個散列/哈??梢源鎯Χ噙_(dá)2^32 - 1個健-值對(超過40億個)。

列表

Redis列表只是字符串列表,按插入順序排序。您可以向Redis列表的頭部或尾部添加元素。

示例

redis 127.0.0.1:6379> lpush alist redis 
(integer) 1 
redis 127.0.0.1:6379> lpush alist mongodb 
(integer) 2 
redis 127.0.0.1:6379> lpush alist sqlite 
(integer) 3 
redis 127.0.0.1:6379> lrange alist 0 10  

1) "sqlite" 
2) "mongodb" 
3) "redis"

列表的最大長度為2^32 - 1個元素(4294967295,每個列表可容納超過40億個元素)。

集合

Redis集合是字符串的無序集合。在Redis中,您可以添加,刪除和測試成員存在的時間O(1)復(fù)雜性。

示例

redis 127.0.0.1:6379> sadd yiibailist redis 
(integer) 1 
redis 127.0.0.1:6379> sadd yiibailist mongodb 
(integer) 1 
redis 127.0.0.1:6379> sadd yiibailist sqlite 
(integer) 1 
redis 127.0.0.1:6379> sadd yiibailist sqlite 
(integer) 0 
redis 127.0.0.1:6379> smembers yiibailist  

1) "sqlite" 
2) "mongodb" 
3) "redis"

注意 - 在上面的示例中,sqlite被添加了兩次,但是由于集合的唯一屬性,所以它只算添加一次。

一個集合中的最大成員數(shù)量為2^32 - 1(即4294967295,每個集合中元素數(shù)量可達(dá)40億個)個。

可排序集合

Redis可排序集合類似于Redis集合,是不重復(fù)的字符集合。 不同之處在于,排序集合的每個成員都與分?jǐn)?shù)相關(guān)聯(lián),這個分?jǐn)?shù)用于按最小分?jǐn)?shù)到最大分?jǐn)?shù)來排序的排序集合。雖然成員是唯一的,但分?jǐn)?shù)值可以重復(fù)。

示例

redis 127.0.0.1:6379> zadd yiibaiset 0 redis
(integer) 1 
redis 127.0.0.1:6379> zadd yiibaiset 0 mongodb
(integer) 1 
redis 127.0.0.1:6379> zadd yiibaiset 1 sqlite
(integer) 1 
redis 127.0.0.1:6379> zadd yiibaiset 1 sqlite
(integer) 0 
redis 127.0.0.1:6379> ZRANGEBYSCORE yiibaiset 0 1000  

1) "mongodb" 
2) "redis" 
3) "sqlite"

因?yàn)?‘sqlite‘ 的排序值是 1 ,其它兩個元素的排序值是 0 ,所以 ‘sqlite‘ 排在最后一個位置上。

4. Redis命令

Redis命令是用于在Redis服務(wù)器上執(zhí)行一些操作。
要在Redis服務(wù)器上運(yùn)行命令,需要一個Redis客戶端。Redis客戶端在Redis包中有提供,這個包在我們前面的安裝教程中就有安裝過了。

語法
以下是Redis客戶端的基本語法。

[yiibai@ubuntu:~]$ redis-cli

示例
以下示例說明了如何啟動Redis客戶端。

要啟動Redis客戶端,請打開終端并鍵入命令redis-cli。 這將連接到您的本地Redis服務(wù)器,現(xiàn)在可以運(yùn)行任何的Redis命令了。

[yiibai@ubuntu:~]$redis-cli 
redis 127.0.0.1:6379> 
redis 127.0.0.1:6379> PING  
PONG

在上面的示例中,連接到到在本地機(jī)器上運(yùn)行的Redis服務(wù)器并執(zhí)行PING命令,該命令檢查服務(wù)器是否正在運(yùn)行。

在遠(yuǎn)程服務(wù)器上運(yùn)行命令

要在Redis遠(yuǎn)程服務(wù)器上運(yùn)行命令,需要通過客戶端redis-cli連接到服務(wù)器

語法

[yiibai@ubuntu:~]$ redis-cli -h host -p port -a password

示例
以下示例顯示如何連接到Redis遠(yuǎn)程服務(wù)器,在主機(jī)(host)127.0.0.1,端口(port)6379上運(yùn)行,并使用密碼為 mypass。

[yiibai@ubuntu:~]$ redis-cli -h 127.0.0.1 -p 6379 -a "mypass" 
redis 127.0.0.1:6379> 
redis 127.0.0.1:6379> PING  
PONG

5. Redis鍵命令

Redis鍵命令用于管理Redis中的鍵。以下是使用redis鍵命令的語法。

語法

redis 127.0.0.1:6379> COMMAND KEY_NAME

示例

redis 127.0.0.1:6379> SET akey redis
OK 
redis 127.0.0.1:6379> DEL akey
(integer) 1
127.0.0.1:6379> GET akey
(nil)

在上面的例子中,DEL是Redis的命令,而akey是鍵的名稱。如果鍵被刪除,則命令的輸出將為(integer) 1,否則為(integer) 0。

Redis鍵命令

下表列出了與鍵相關(guān)的一些基本命令。

編號 命令 描述
1 DEL key 此命令刪除一個指定鍵(如果存在)。
2 DUMP key 此命令返回存儲在指定鍵的值的序列化版本。
3 EXISTS key 此命令檢查鍵是否存在。
4 EXPIRE key seconds 設(shè)置鍵在指定時間秒數(shù)之后到期/過期。
5 EXPIREAT key timestamp 設(shè)置在指定時間戳之后鍵到期/過期。這里的時間是Unix時間戳格式。
6 PEXPIRE key milliseconds 設(shè)置鍵的到期時間(以毫秒為單位)。
7 PEXPIREAT key milliseconds-timestamp 以Unix時間戳形式來設(shè)置鍵的到期時間(以毫秒為單位)。
8 KEYS pattern 查找與指定模式匹配的所有鍵。
9 MOVE key db 將鍵移動到另一個數(shù)據(jù)庫。
10 PERSIST key 刪除指定鍵的過期時間,得永生。
11 PTTL key 獲取鍵的剩余到期時間。
12 RANDOMKEY 從Redis返回一個隨機(jī)的鍵。
13 RENAME key newkey 更改鍵的名稱。
14 PTTL key 獲取鍵到期的剩余時間(以毫秒為單位)。
15 RENAMENX key newkey 如果新鍵不存在,重命名鍵。
16 TYPE key 返回存儲在鍵中的值的數(shù)據(jù)類型。

6. Redis字符串

Redis字符串命令用于管理Redis中的字符串值。以下是使用Redis字符串命令的語法。

redis 127.0.0.1:6379> COMMAND KEY_NAME

示例

redis 127.0.0.1:6379> SET mykey "redis" 
OK 
redis 127.0.0.1:6379> GET mykey 
"redis"

在上面的例子中,SETGET是redis中的命令,而mykey是鍵的名稱。

Redis字符串命令

下表列出了一些用于在Redis中管理字符串的基本命令。

編號 命令 描述說明
1 SET key value 此命令設(shè)置指定鍵的值。
2 GET key 獲取指定鍵的值。
3 GETRANGE key start end 獲取存儲在鍵上的字符串的子字符串。
4 GETSET key value 設(shè)置鍵的字符串值并返回其舊值。
5 GETBIT key offset 返回在鍵處存儲的字符串值中偏移處的位值。
6 MGET key1 [key2..] 獲取所有給定鍵的值
7 SETBIT key offset value 存儲在鍵上的字符串值中設(shè)置或清除偏移處的位
8 SETEX key seconds value 使用鍵和到期時間來設(shè)置值
9 SETNX key value 設(shè)置鍵的值,僅當(dāng)鍵不存在時
10 SETRANGE key offset value 在指定偏移處開始的鍵處覆蓋字符串的一部分
11 STRLEN key 獲取存儲在鍵中的值的長度
12 MSET key value [key value …] 為多個鍵分別設(shè)置它們的值
13 MSETNX key value [key value …] 為多個鍵分別設(shè)置它們的值,僅當(dāng)鍵不存在時
14 PSETEX key milliseconds value 設(shè)置鍵的值和到期時間(以毫秒為單位)
15 INCR key 將鍵的整數(shù)值增加1
16 INCRBY key increment 將鍵的整數(shù)值按給定的數(shù)值增加
17 INCRBYFLOAT key increment 將鍵的浮點(diǎn)值按給定的數(shù)值增加
18 DECR key 將鍵的整數(shù)值減1
19 DECRBY key decrement 按給定數(shù)值減少鍵的整數(shù)值
20 APPEND key value 將指定值附加到鍵

7. Redis哈希

Redis Hashes是字符串字段和字符串值之間的映射(類似于PHP中的數(shù)組類型)。 因此,它們是表示對象的完美數(shù)據(jù)類型。

在Redis中,每個哈希(散列)可以存儲多達(dá)4億個鍵-值對。

示例

redis 127.0.0.1:6379> HMSET myhash name "redis tutorial" 
description "redis basic commands for caching" likes 20 visitors 23000 
OK 
127.0.0.1:6379> HGETALL myhash
1) "field1"
2) "Hello"
3) "field2"
4) "World"
5) "name"
6) "redis tutorial"

在上面的例子中,在名稱為’myhash‘的哈希中設(shè)置了Redis教程的詳細(xì)信息(名稱,描述,喜歡,訪問者)。

8. Redis列表

Redis列表只是字符串列表,按插入順序排序??梢栽诹斜淼念^部或尾部添加Redis列表中的元素。

列表的最大長度為2^32 - 1個元素(即4294967295,每個列表可存儲超過40億個元素)。

示例

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

在上面的示例中,通過命令LPUSH將三個值插入到名稱為“mylist”的Redis列表中。

8. Redis集合

Redis集合是唯一字符串的無序集合。 唯一值表示集合中不允許鍵中有重復(fù)的數(shù)據(jù)。

在Redis中設(shè)置添加,刪除和測試成員的存在(恒定時間O(1),而不考慮集合中包含的元素數(shù)量)。列表的最大長度為2^32 - 1個元素(即4294967295,每組集合超過40億個元素)。

示例

redis 127.0.0.1:6379> SADD myset "redis" 
(integer) 1 
redis 127.0.0.1:6379> SADD myset "mongodb" 
(integer) 1 
redis 127.0.0.1:6379> SADD myset "mysql" 
(integer) 1 
redis 127.0.0.1:6379> SADD myset "mysql" 
(integer) 0 
redis 127.0.0.1:6379> SMEMBERS "myset"  
1) "mysql" 
2) "mongodb" 
3) "redis"

在上面的示例中,通過命令SADD將三個值插入到名稱為“myset”的Redis集合中。

9. Redis發(fā)送訂閱

Redis發(fā)布訂閱(pub/sub)是一種消息通信模式:發(fā)送者(pub)發(fā)送消息,訂閱者(sub)接收消息。
Redis 發(fā)布訂閱(pub/sub)實(shí)現(xiàn)了消息系統(tǒng),發(fā)送者(在redis術(shù)語中稱為發(fā)布者)在接收者(訂閱者)接收消息時發(fā)送消息。傳送消息的鏈路稱為信道。

在Redis中,客戶端可以訂閱任意數(shù)量的信道。

示例

以下示例說明了發(fā)布用戶概念的工作原理。 在以下示例中,一個客戶端訂閱名為“redisChat”的信道。

redis 127.0.0.1:6379> SUBSCRIBE redisChat  
Reading messages... (press Ctrl-C to quit) 
1) "subscribe" 
2) "redisChat" 
3) (integer) 1

現(xiàn)在,兩個客戶端在名稱為“redisChat”的相同信道上發(fā)布消息,并且上述訂閱的客戶端接收消息。

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 yiibai"  
(integer) 1   
1) "message" 
2) "redisChat" 
3) "Redis is a great caching technique" 
1) "message" 
2) "redisChat" 
3) "Learn redis by yiibai"

10. Redis事務(wù)

Redis事務(wù)允許在單個步驟中執(zhí)行一組命令。以下是事務(wù)的兩個屬性:

  • 事務(wù)中的所有命令作為單個隔離操作并按順序執(zhí)行。不可以在執(zhí)行Redis事務(wù)的中間向另一個客戶端發(fā)出的請求。
  • Redis事務(wù)也是原子的。原子意味著要么處理所有命令,要么都不處理。

語法示例

Redis事務(wù)由命令MULTI命令啟動,然后需要傳遞一個應(yīng)該在事務(wù)中執(zhí)行的命令列表,然后整個事務(wù)由EXEC命令執(zhí)行。

redis 127.0.0.1:6379> MULTI 
OK 
List of commands here 
redis 127.0.0.1:6379> EXEC

示例

以下示例說明了如何啟動和執(zhí)行Redis事務(wù)。

redis 127.0.0.1:6379> MULTI 
OK 
redis 127.0.0.1:6379> SET mykey "redis" 
QUEUED 
redis 127.0.0.1:6379> GET mykey 
QUEUED 
redis 127.0.0.1:6379> INCR visitors 
QUEUED 
redis 127.0.0.1:6379> EXEC  
1) OK 
2) "redis" 
3) (integer) 1

11. Redis腳本

Redis腳本用于使用Lua解釋器來執(zhí)行腳本。從Redis 2.6.0版開始內(nèi)置到Redis中。使用腳本的命令是EVAL命令。

語法

以下是EVAL命令的基本語法。

redis 127.0.0.1:6379> EVAL script numkeys key [key ...] arg [arg ...]

示例

以下示例說明了Redis腳本的工作原理。

redis 127.0.0.1:6379> EVAL "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 
key2 first second  
1) "key1" 
2) "key2" 
3) "first" 
4) "second"

12. Redis連接

Redis中的連接命令基本上是用于管理與Redis服務(wù)器的客戶端連接。

示例

以下示例說明客戶端如何向Redis服務(wù)器驗(yàn)證自身,并檢查服務(wù)器是否正在運(yùn)行。

redis 127.0.0.1:6379> AUTH "password" 
OK 
redis 127.0.0.1:6379> PING 
PONG

Redis連接命令

下表列出了與Redis連接相關(guān)的一些基本命令。

序號 命令 說明
1 AUTH password 使用給定的密碼驗(yàn)證服務(wù)器
2 ECHO message 打印給定的字符串信息
3 PING 檢查服務(wù)器是否正在運(yùn)行
4 QUIT 關(guān)閉當(dāng)前連接
5 SELECT index 更改當(dāng)前連接的所選數(shù)據(jù)庫

13. Redis服務(wù)器

Redis服務(wù)器命令基本上是用于管理Redis服務(wù)器。

示例

以下示例說明了如何獲取有關(guān)服務(wù)器的所有統(tǒng)計信息和信息。

127.0.0.1:6379> info
# Server
redis_version:2.8.4
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:8f6097d7914679ca
redis_mode:standalone
os:Linux 3.19.0-25-generic i686
arch_bits:32
multiplexing_api:epoll
gcc_version:4.8.2
process_id:1004
run_id:1e53acea2aa628199c4e438a3ed815d96eebc036
tcp_port:6379
uptime_in_seconds:888450
uptime_in_days:10
hz:10
lru_clock:1861984
config_file:/etc/redis/redis.conf

# Clients
connected_clients:1
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0

# Memory
used_memory:424872
used_memory_human:414.91K
used_memory_rss:6709248
used_memory_peak:424464
used_memory_peak_human:414.52K
used_memory_lua:22528
mem_fragmentation_ratio:15.79
mem_allocator:jemalloc-3.4.1

# Persistence
loading:0
rdb_changes_since_last_save:0
rdb_bgsave_in_progress:0
rdb_last_save_time:1486607123
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

# Stats
total_connections_received:1
total_commands_processed:263
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:257
keyspace_misses:0
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:4793

# 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:24.65
used_cpu_user:15.84
used_cpu_sys_children:0.08
used_cpu_user_children:0.00

# Keyspace
db0:keys=14,expires=0,avg_ttl=0
db1:keys=1,expires=0,avg_ttl=0
127.0.0.1:6379>

14. Redis備份

Redis數(shù)據(jù)庫可以使用安全的方案,使得進(jìn)行連接的任何客戶端在執(zhí)行命令之前都需要進(jìn)行身份驗(yàn)證。要保護(hù)Redis安全,需要在配置文件中設(shè)置密碼。

示例

下面的示例顯示了保護(hù)Redis實(shí)例的步驟。

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

默認(rèn)情況下,此屬性為空,這表示還沒有為此實(shí)例設(shè)置密碼。您可以通過執(zhí)行以下命令更改此屬性。

127.0.0.1:6379> CONFIG set requirepass "yiibai" 
OK 
127.0.0.1:6379> CONFIG get requirepass 
1) "requirepass" 
2) "yiibai"

設(shè)置密碼后,如果任何客戶端運(yùn)行命令而不進(jìn)行身份驗(yàn)證,則會返回一個(error) NOAUTH Authentication required.

上一篇:Redis管道下一篇:Redis HyperLogLog