日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Redis快速入門

 昵稱59343811 2018-09-04


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

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

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

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

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

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

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

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

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

在Ubuntu上安裝Redis

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

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

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

啟動(dòng)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:// `-._ `-._`-.__.-'_.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | `-._ `-._`-.__.-'_.-' _.-' `-._ `-.__.-' _.-' `-._ _.-' `-.__.-' [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
Shell

檢查Redis是否正在工作

[yiibai@ubuntu:~]$ redis-cli
Shell

這將打開(kāi)一個(gè)redis提示,如下所示 -

redis 127.0.0.1:6379>
Shell

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

redis 127.0.0.1:6379> ping PONG
Shell

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

在Ubuntu上安裝Redis桌面管理

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

打開(kāi)下載的軟件包并安裝。

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

2. Redis配置

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

語(yǔ)法
以下是Redis中的CONFIG命令的基本語(yǔ)法。

redis 127.0.0.1:6379> CONFIG GET CONFIG_SETTING_NAME
Shell

示例

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

要獲取所有配置設(shè)置,請(qǐng)使用*代替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'
Shell

編輯配置

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

語(yǔ)法
以下是CONFIG SET命令的基本語(yǔ)法。

redis 127.0.0.1:6379> CONFIG SET CONFIG_SETTING_NAME NEW_CONFIG_VALUE
Shell

示例

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

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

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

字符串

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

示例

redis 127.0.0.1:6379> set name '' OK redis 127.0.0.1:6379> get name ''
Shell

在上面的示例中,setget是Redis命令,name是Redis中使用的鍵,是存儲(chǔ)在Redis中的字符串的值。

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

散列/哈希

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

示例

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

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

每個(gè)散列/哈??梢源鎯?chǔ)多達(dá)2^32 - 1個(gè)健-值對(duì)(超過(guò)40億個(gè))。

列表

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'
Shell

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

集合

Redis集合是字符串的無(wú)序集合。在Redis中,您可以添加,刪除和測(cè)試成員存在的時(shí)間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'
Shell

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

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

可排序集合

Redis可排序集合類似于Redis集合,是不重復(fù)的字符集合。 不同之處在于,排序集合的每個(gè)成員都與分?jǐn)?shù)相關(guān)聯(lián),這個(gè)分?jǐn)?shù)用于按最小分?jǐn)?shù)到最大分?jǐn)?shù)來(lái)排序的排序集合。雖然成員是唯一的,但分?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'
Shell

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

4. Redis命令

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

語(yǔ)法
以下是Redis客戶端的基本語(yǔ)法。

[yiibai@ubuntu:~]$ redis-cli
Shell

示例
以下示例說(shuō)明了如何啟動(dòng)Redis客戶端。

要啟動(dòng)Redis客戶端,請(qǐng)打開(kāi)終端并鍵入命令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
Shell

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

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

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

語(yǔ)法

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

示例
以下示例顯示如何連接到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
Shell

5. Redis鍵命令

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

語(yǔ)法

redis 127.0.0.1:6379> COMMAND KEY_NAME
Shell

示例

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)
Shell

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

Redis鍵命令

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

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

6. Redis字符串

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

redis 127.0.0.1:6379> COMMAND KEY_NAME
Shell

示例

redis 127.0.0.1:6379> SET mykey 'redis' OK redis 127.0.0.1:6379> GET mykey 'redis'
Shell

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

Redis字符串命令

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

編號(hào) 命令 描述說(shuō)明
1 SET key value 此命令設(shè)置指定鍵的值。
2 GET key 獲取指定鍵的值。
3 GETRANGE key start end 獲取存儲(chǔ)在鍵上的字符串的子字符串。
4 GETSET key value 設(shè)置鍵的字符串值并返回其舊值。
5 GETBIT key offset 返回在鍵處存儲(chǔ)的字符串值中偏移處的位值。
6 MGET key1 [key2..] 獲取所有給定鍵的值
7 SETBIT key offset value 存儲(chǔ)在鍵上的字符串值中設(shè)置或清除偏移處的位
8 SETEX key seconds value 使用鍵和到期時(shí)間來(lái)設(shè)置值
9 SETNX key value 設(shè)置鍵的值,僅當(dāng)鍵不存在時(shí)
10 SETRANGE key offset value 在指定偏移處開(kāi)始的鍵處覆蓋字符串的一部分
11 STRLEN key 獲取存儲(chǔ)在鍵中的值的長(zhǎng)度
12 MSET key value [key value …] 為多個(gè)鍵分別設(shè)置它們的值
13 MSETNX key value [key value …] 為多個(gè)鍵分別設(shè)置它們的值,僅當(dāng)鍵不存在時(shí)
14 PSETEX key milliseconds value 設(shè)置鍵的值和到期時(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ù)組類型)。 因此,它們是表示對(duì)象的完美數(shù)據(jù)類型。

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

示例

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'
Shell

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

8. Redis列表

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

列表的最大長(zhǎng)度為2^32 - 1個(gè)元素(即4294967295,每個(gè)列表可存儲(chǔ)超過(guò)40億個(gè)元素)。

示例

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'
Shell

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

8. Redis集合

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

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

示例

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'
Shell

在上面的示例中,通過(guò)命令SADD將三個(gè)值插入到名稱為“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ù)語(yǔ)中稱為發(fā)布者)在接收者(訂閱者)接收消息時(shí)發(fā)送消息。傳送消息的鏈路稱為信道。

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

示例

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

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

現(xiàn)在,兩個(gè)客戶端在名稱為“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'
Shell

10. Redis事務(wù)

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

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

語(yǔ)法示例

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

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

示例

以下示例說(shuō)明了如何啟動(dòng)和執(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
Shell

11. Redis腳本

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

語(yǔ)法

以下是EVAL命令的基本語(yǔ)法。

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

示例

以下示例說(shuō)明了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'
Shell

12. Redis連接

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

示例

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

redis 127.0.0.1:6379> AUTH 'password' OK redis 127.0.0.1:6379> PING PONG
Shell

Redis連接命令

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

序號(hào) 命令 說(shuō)明
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ù)庫(kù)

13. Redis服務(wù)器

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

示例

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

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>
Shell

14. Redis備份

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

示例

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

127.0.0.1:6379> CONFIG get requirepass 1) 'requirepass' 2) ''
Shell

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

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

設(shè)置密碼后,如果任何客戶端運(yùn)行命令而不進(jìn)行身份驗(yàn)證,則會(huì)返回一個(gè)(error) NOAUTH Authentication required.的錯(cuò)誤信息。 因此,客戶端需要使用AUTH命令來(lái)驗(yàn)證。

語(yǔ)法

以下是AUTH命令的基本語(yǔ)法。

127.0.0.1:6379> AUTH password
Shell

示例

127.0.0.1:6379> AUTH 'yiibai' OK 127.0.0.1:6379> SET mykey 'Test value' OK 127.0.0.1:6379> GET mykey 'Test value'
Shell

15. Redis客戶端連接

Redis在配置的監(jiān)聽(tīng)TCP端口和Unix套接字上等待和接受客戶端的連接(如果已啟用)。 當(dāng)接受新的客戶端連接時(shí),執(zhí)行以下操作 -

  • 由于Redis使用復(fù)用和非阻塞I/O,因此客戶端套接字處于非阻塞狀態(tài)。
  • 設(shè)置TCP_NODELAY選項(xiàng)是為了確保連接不延遲。
  • 創(chuàng)建可讀文件事件,以便Redis能夠在套接字上讀取新數(shù)據(jù)時(shí)收集客戶端查詢。

最大客戶數(shù)

在Redis配置文件(redis.conf)中,有一個(gè)名稱為maxclients的屬性,它描述了可以連接到Redis的客戶端的最大數(shù)量。

以下是命令的基本語(yǔ)法。

127.0.0.1:6379> config get maxclients 1) 'maxclients' 2) '3984'
Shell

默認(rèn)情況下,此屬性設(shè)置為10000(取決于操作系統(tǒng)的文件描述符限制的最大數(shù)量),但您可以更改此屬性。

示例

在以下示例中,我們已將客戶端的最大數(shù)目設(shè)置為100000,并啟動(dòng)服務(wù)器。

yiibai@ubuntu:~$ redis-server --maxclients 100000
Shell

客戶端命令

編號(hào) 命令 描述
1 CLIENT LIST 返回連接到Redis服務(wù)器的客戶端列表
2 CLIENT SETNAME 為當(dāng)前連接分配/設(shè)置新的名稱
3 CLIENT GETNAME 返回由CLIENT SETNAME設(shè)置的當(dāng)前連接的名稱
4 CLIENT PAUSE 這是一個(gè)連接控制命令,能夠?qū)⑺蠷edis客戶端按指定的時(shí)間量(以毫秒為單位)掛起
5 CLIENT KILL 此命令關(guān)閉指定的客戶端連接。

16. Redis管道

Redis是一個(gè)TCP服務(wù)器,支持請(qǐng)求/響應(yīng)協(xié)議。 在Redis中,請(qǐng)求通過(guò)以下步驟完成:

  • 客戶端向服務(wù)器發(fā)送查詢,并從套接字讀取,通常以阻塞的方式,用于服務(wù)器響應(yīng)。
  • 服務(wù)器處理命令并將響應(yīng)發(fā)送回客戶端。

管道的意義

管道的基本含義是,客戶端可以向服務(wù)器發(fā)送多個(gè)請(qǐng)求,而不必等待回復(fù),并最終在一個(gè)步驟中讀取回復(fù)。

示例

要檢查Redis管道,只需啟動(dòng)Redis實(shí)例,并在終端中鍵入以下命令。

$(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
Shell

在上面的例子中,我們將使用PING命令檢查Redis連接。這里設(shè)置了一個(gè)名稱為tutorial的字符串,值為redis。 然后得到鍵值,并增加 visitor 數(shù)量三次。 在結(jié)果中,我們可以看到所有命令都提交到Redis一次,Redis在一個(gè)步驟中提供所有命令的輸出。

管道的好處

這種技術(shù)的好處是大大提高了協(xié)議性能。通過(guò)管道從連接到本地主機(jī)速度增加五倍,因特網(wǎng)連接的至少快一百倍。

17. Redis分區(qū)

分區(qū)是將數(shù)據(jù)拆分為多個(gè)Redis實(shí)例的過(guò)程,因此每個(gè)實(shí)例只包含一部分鍵。

分區(qū)的優(yōu)點(diǎn)

  • 它允許更大的數(shù)據(jù)庫(kù),使用更多計(jì)算機(jī)的內(nèi)存總和。如果沒(méi)有分區(qū),則限制為單個(gè)計(jì)算機(jī)可以支持的內(nèi)存量。
  • 它允許將計(jì)算能力擴(kuò)展到多個(gè)核心和多個(gè)計(jì)算機(jī),并將網(wǎng)絡(luò)帶寬擴(kuò)展到多個(gè)計(jì)算機(jī)和網(wǎng)絡(luò)適配器。

分區(qū)的缺點(diǎn)

  • 通常不支持涉及多個(gè)鍵的操作。 例如,如果兩個(gè)集合存儲(chǔ)在映射到不同Redis實(shí)例的鍵中,則不能執(zhí)行兩個(gè)集合之間的交集操作。
  • 不能使用涉及多個(gè)鍵的Redis事務(wù)。
  • 分區(qū)粒度是關(guān)鍵,因此不可能使用單個(gè)巨大的鍵(如非常大的排序集合)來(lái)分割數(shù)據(jù)集。
  • 使用分區(qū)時(shí),數(shù)據(jù)處理更復(fù)雜。 例如,必須處理多個(gè)RDB/AOF文件,并獲得數(shù)據(jù)的備份,您需要聚合來(lái)自多個(gè)實(shí)例和主機(jī)的持久性文件。
  • 添加和刪除容量可能很復(fù)雜。 例如,Redis Cluster支持大多數(shù)透明的數(shù)據(jù)重新平衡,具有在運(yùn)行時(shí)添加和刪除節(jié)點(diǎn)的能力。但是,其他系統(tǒng)(如客戶端分區(qū)和代理)不支持此功能。但可以使用一種叫作Presharding的技術(shù)來(lái)處理這方面的問(wèn)題。

分區(qū)類型

Redis中有兩種類型的分區(qū)。假設(shè)有四個(gè)Redis實(shí)例:R0,R1,R2R3以許多代表用戶的鍵,如user:1user:2,…等等。

范圍分區(qū)

范圍分區(qū)通過(guò)將對(duì)象的范圍映射到特定的Redis實(shí)例來(lái)實(shí)現(xiàn)。假設(shè)在上面示例中,從ID 0到ID 10000的用戶將進(jìn)入實(shí)例R0,而從ID 10001到ID 20000的用戶將進(jìn)入實(shí)例R1,以此類推。

哈希分區(qū)

在這種類型的分區(qū)中,使用散列函數(shù)(例如,模函數(shù))將鍵轉(zhuǎn)換成數(shù)字,然后將數(shù)據(jù)存儲(chǔ)在不同的Redis實(shí)例中。

18. Java連接Redis

在Java程序中使用Redis之前,需要確保在機(jī)器上安裝了Redis的Java驅(qū)動(dòng)程序和Java環(huán)境??梢韵仍趯ava電腦上并配置好環(huán)境。

安裝

現(xiàn)在,讓我們看看如何設(shè)置Redis Java驅(qū)動(dòng)程序。

Java連接到Redis服務(wù)器

請(qǐng)參考以下一個(gè)簡(jiǎn)單的示例代碼 -

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()); } }
Java

現(xiàn)在,編譯并運(yùn)行上面的程序來(lái)測(cè)試與Redis服務(wù)器的連接??梢愿鶕?jù)需要更改路徑。假設(shè)jedis.jar的當(dāng)前版本在當(dāng)前路徑中可以使用。
執(zhí)行上面代碼,將生成以下結(jié)果 -

$javac RedisJava.java $java RedisJava Connection to server sucessfully Server is running: PONG
Java

Redis Java字符串示例

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')); } }
Java

執(zhí)行上面代碼,將生成以下結(jié)果 -

$javac RedisStringJava.java $java RedisStringJava Connection to server sucessfully Stored string in redis:: Redis tutorial
Java

Redis Java列表示例

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)); } } }
Java

執(zhí)行上面代碼,將生成以下結(jié)果 -

$javac RedisListJava.java $java RedisListJava Connection to server sucessfully Stored string in redis:: Redis Stored string in redis:: Mongodb Stored string in redis:: Mysql
Java

Redis Java鍵示例

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)); } } }
Java

執(zhí)行上面代碼,將生成以下結(jié)果 -

$javac RedisKeyJava.java $java RedisKeyJava Connection to server sucessfully List of stored keys:: tutorial-name List of stored keys:: tutorial-list
Java

19. PHP連接Redis

在php程序中使用Redis之前,需要確保在機(jī)器上安裝了Redis的PHP驅(qū)動(dòng)程序和PHP環(huán)境??梢韵仍趯HP電腦上并配置好環(huán)境。

安裝

現(xiàn)在,讓我們看看如何設(shè)置Redis PHP驅(qū)動(dòng)程序。
從github庫(kù)下載phpredis=> http://github.com/nicolasff/phpredis。 當(dāng)下載它之后,提取文件到phpredis目錄。在Ubuntu上,安裝以下擴(kuò)展。

cd phpredis sudo phpize sudo ./configure sudo make sudo make install
Shell

現(xiàn)在,將“modules”文件夾的內(nèi)容復(fù)制并粘貼到PHP擴(kuò)展目錄中,并在php.ini中添加以下行。

extension = redis.so
Shell

現(xiàn)在,Redis PHP安裝完成!

使用連接到Redis服務(wù)器

<?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(); ?>
PHP

當(dāng)程序執(zhí)行時(shí),將產(chǎn)生以下結(jié)果。

Connection to server sucessfully Server is running: PONG
Shell

Redis PHP字符串示例

<?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:: ' .$redisget('tutorial-name'); ?>
PHP

執(zhí)行上面代碼,將生成以下結(jié)果 -

Connection to server sucessfully Stored string in redis:: Redis tutorial
Java

Redis php列表示例

<?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); ?>
PHP

執(zhí)行上面代碼,將生成以下結(jié)果 -

Connection to server sucessfully Stored string in redis:: Redis Mongodb Mysql
PHP

Redis php鍵示例

<?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); ?>
PHP

執(zhí)行上面代碼,將生成以下結(jié)果 -

Connection to server sucessfully Stored string in redis:: tutorial-name tutorial-list
PHP

20. C#連接Redis

前面我們已經(jīng)準(zhǔn)備成功開(kāi)啟Redis服務(wù),其端口號(hào)為6379,接下來(lái)我們就看看如何使用C#語(yǔ)言來(lái)操作Redis。就如MongoDB一樣,要操作Redis服務(wù),自然就需要下載C#的客戶端,這里通過(guò)Nuget下載了“ServiceStack.Redis”客戶端,引入成功之后,就可以使用C#來(lái)對(duì)Redis服務(wù)進(jìn)行操作了。

由于Redis一般是用來(lái)作為緩存的,也就是一般我們把一些不經(jīng)常改變的數(shù)據(jù)通過(guò)Redis緩存起來(lái),之后用戶的請(qǐng)求就不需要再訪問(wèn)數(shù)據(jù)庫(kù),而可以直接從Redis緩存中直接獲取,這樣就可以減輕數(shù)據(jù)庫(kù)服務(wù)器的壓力以及加快響應(yīng)速度。既然是用來(lái)做緩存的,也就是通過(guò)指定key值來(lái)把對(duì)應(yīng)Value保存起來(lái),之后再根據(jù)key值來(lái)獲得之前緩存的值。具體的操作代碼如下所示,這里就不過(guò)多介紹了。

請(qǐng)參考以下代碼 -

class Program { static void Main(string[] args) { //在Redis中存儲(chǔ)常用的5種數(shù)據(jù)類型:String,Hash,List,SetSorted set var client = new RedisClient('127.0.0.1', 6379); //AddString(client); //AddHash(client); //AddList(client); //AddSet(client); AddSetSorted(client); Console.ReadLine(); } private static void AddString(RedisClient client) { var timeOut = new TimeSpan(0,0,0,30); client.Add('Test', 'Learninghard', timeOut); while (true) { if (client.ContainsKey('Test')) { Console.WriteLine('String Key: Test -Value: {0}, 當(dāng)前時(shí)間: {1}', client.Get<string>('Test'), DateTime.Now); Thread.Sleep(10000); } else { Console.WriteLine('Value 已經(jīng)過(guò)期了,當(dāng)前時(shí)間:{0}', DateTime.Now); break; } } var person = new Person() {Name = 'Learninghard', Age = 26}; client.Add('lh', person); var cachePerson = client.Get<Person>('lh'); Console.WriteLine('Person's Name is : {0}, Age: {1}', cachePerson.Name, cachePerson.Age); } private static void AddHash(RedisClient client) { if (client == null) throw new ArgumentNullException('client'); client.SetEntryInHash('HashId', 'Name', 'Learninghard'); client.SetEntryInHash('HashId', 'Age', '26'); client.SetEntryInHash('HashId', 'Sex', '男'); var hashKeys = client.GetHashKeys('HashId'); foreach (var key in hashKeys) { Console.WriteLine('HashId--Key:{0}', key); } var haskValues = client.GetHashValues('HashId'); foreach (var value in haskValues) { Console.WriteLine('HashId--Value:{0}', value); } var allKeys = client.GetAllKeys(); //獲取所有的key。 foreach (var key in allKeys) { Console.WriteLine('AllKey--Key:{0}', key); } } private static void AddList(RedisClient client) { if (client == null) throw new ArgumentNullException('client'); client.EnqueueItemOnList('QueueListId', '1.Learnghard'); //入隊(duì) client.EnqueueItemOnList('QueueListId', '2.張三'); client.EnqueueItemOnList('QueueListId', '3.李四'); client.EnqueueItemOnList('QueueListId', '4.王五'); var queueCount = client.GetListCount('QueueListId'); for (var i = 0; i < queueCount; i ) { Console.WriteLine('QueueListId出隊(duì)值:{0}', client.DequeueItemFromList('QueueListId')); //出隊(duì)(隊(duì)列先進(jìn)先出) } client.PushItemToList('StackListId', '1.Learninghard'); //入棧 client.PushItemToList('StackListId', '2.張三'); client.PushItemToList('StackListId', '3.李四'); client.PushItemToList('StackListId', '4.王五'); var stackCount = client.GetListCount('StackListId'); for (var i = 0; i < stackCount; i ) { Console.WriteLine('StackListId出棧值:{0}', client.PopItemFromList('StackListId')); //出棧(棧先進(jìn)后出) } } //它是string類型的無(wú)序集合。set是通過(guò)hash table實(shí)現(xiàn)的,添加,刪除和查找,對(duì)集合我們可以取并集,交集,差集 private static void AddSet(RedisClient client) { if (client == null) throw new ArgumentNullException('client'); client.AddItemToSet('Set1001', 'A'); client.AddItemToSet('Set1001', 'B'); client.AddItemToSet('Set1001', 'C'); client.AddItemToSet('Set1001', 'D'); var hastset1 = client.GetAllItemsFromSet('Set1001'); foreach (var item in hastset1) { Console.WriteLine('Set無(wú)序集合Value:{0}', item); //出來(lái)的結(jié)果是無(wú)須的 } client.AddItemToSet('Set1002', 'K'); client.AddItemToSet('Set1002', 'C'); client.AddItemToSet('Set1002', 'A'); client.AddItemToSet('Set1002', 'J'); var hastset2 = client.GetAllItemsFromSet('Set1002'); foreach (var item in hastset2) { Console.WriteLine('Set無(wú)序集合ValueB:{0}', item); //出來(lái)的結(jié)果是無(wú)須的 } var hashUnion = client.GetUnionFromSets(new string[] { 'Set1001', 'Set1002' }); foreach (var item in hashUnion) { Console.WriteLine('求Set1001和Set1002的并集:{0}', item); //并集 } var hashG = client.GetIntersectFromSets(new string[] { 'Set1001', 'Set1002' }); foreach (var item in hashG) { Console.WriteLine('求Set1001和Set1002的交集:{0}', item); //交集 } var hashD = client.GetDifferencesFromSet('Set1001', new string[] { 'Set1002' }); //[返回存在于第一個(gè)集合,但是不存在于其他集合的數(shù)據(jù)。差集] foreach (var item in hashD) { Console.WriteLine('求Set1001和Set1002的差集:{0}', item); //差集 } } /* sorted set 是set的一個(gè)升級(jí)版本,它在set的基礎(chǔ)上增加了一個(gè)順序的屬性,這一屬性在添加修改.元素的時(shí)候可以指定, * 每次指定后,zset(表示有序集合)會(huì)自動(dòng)重新按新的值調(diào)整順序??梢岳斫鉃橛辛械谋?,一列存 value,一列存順序。操作中key理解為zset的名字. */ private static void AddSetSorted(RedisClient client) { if (client == null) throw new ArgumentNullException('client'); client.AddItemToSortedSet('SetSorted1001', 'A'); client.AddItemToSortedSet('SetSorted1001', 'B'); client.AddItemToSortedSet('SetSorted1001', 'C'); var listSetSorted = client.GetAllItemsFromSortedSet('SetSorted1001'); foreach (var item in listSetSorted) { Console.WriteLine('SetSorted有序集合{0}', item); } client.AddItemToSortedSet('SetSorted1002', 'A', 400); client.AddItemToSortedSet('SetSorted1002', 'D', 200); client.AddItemToSortedSet('SetSorted1002', 'B', 300); // 升序獲取第一個(gè)值:'D' var list = client.GetRangeFromSortedSet('SetSorted1002', 0, 0); foreach (var item in list) { Console.WriteLine(item); } //降序獲取第一個(gè)值:'A' list = client.GetRangeFromSortedSetDesc('SetSorted1002', 0, 0); foreach (var item in list) { Console.WriteLine(item); } } } class Person { public string Name { get; set; } public int Age { get; set; } }
C#

如何要想查看自己操作是否成功,也可以像MongoDB那樣下載一個(gè)客戶端工具,這里推薦一款Redis Desktop Manager。這個(gè)工具就相當(dāng)于SQL Server的客戶端工具一樣。通過(guò)這款工具可以查看Redis服務(wù)器中保存的數(shù)據(jù)和對(duì)應(yīng)格式。其使用也非常簡(jiǎn)單,只需要添加一個(gè)Redis服務(wù)連接即可。該工具的下載地址為:http://pan.baidu.com/s/1sjp55Ul

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多