這篇文章給大家分享的是有關(guān)redis怎么使用的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。
為鳳泉等地區(qū)用戶(hù)提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及鳳泉網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為做網(wǎng)站、成都網(wǎng)站制作、鳳泉網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專(zhuān)業(yè)、用心的態(tài)度為用戶(hù)提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶(hù)的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
一、Redis簡(jiǎn)介
什么是Redis?全稱(chēng):REmote DIctionary Server,是可支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value高性能數(shù)據(jù)庫(kù),并提供多種語(yǔ)言的API,它通常被稱(chēng)為數(shù)據(jù)結(jié)構(gòu)服務(wù)器,因?yàn)橹担╲alue)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等類(lèi)型:
String: 字符串
Hash: 散列
List: 列表
Set: 集合
Sorted Set: 有序集合
是相對(duì)于關(guān)系型數(shù)據(jù)庫(kù)來(lái)說(shuō)的非關(guān)系型數(shù)據(jù)庫(kù)。
二、優(yōu)勢(shì)優(yōu)點(diǎn)
Redis 與其他 key - value 緩存產(chǎn)品有以下三個(gè)特點(diǎn):
Redis支持?jǐn)?shù)據(jù)的持久化,可以將內(nèi)存中的數(shù)據(jù)保存在磁盤(pán)中,重啟的時(shí)候可以再次加載進(jìn)行使用。
Redis不僅僅支持簡(jiǎn)單的key-value類(lèi)型的數(shù)據(jù),同時(shí)還提供list,set,zset,hash等數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)。
Redis支持?jǐn)?shù)據(jù)的備份,即master-slave模式的數(shù)據(jù)備份。
三、Redis安裝
Redis安裝很簡(jiǎn)單,下載地址:https://github.com/MSOpenTech/redis/releases。然后下載“Redis-x64-xx.x.xxx.zip”放入硬盤(pán)自己喜歡的位置解壓出來(lái)即可,雙擊“redis-server.exe”則按照默認(rèn)配置啟動(dòng)Redis服務(wù)了;雙擊“redis-cli.exe”打開(kāi)客戶(hù)端控制臺(tái)可以進(jìn)行命令操作Redis服務(wù)了。
也可:
打開(kāi)一個(gè) cmd 窗口 使用cd命令切換目錄到 C:\redis運(yùn)行 redis-server.exe redis.windows.conf。
執(zhí)行redis-cli.exe -h 127.0.0.1 -p 6379進(jìn)入到客戶(hù)端模式 ,
“-h”指定Redis服務(wù)器主機(jī)
“-p”指定Redis服務(wù)器端口
四、Redis配置
Redis 的配置文件位于 Redis 安裝目錄下,文件名為 redis.conf。
你可以通過(guò) **“CONFIG ”**命令查看或設(shè)置配置項(xiàng)。
CONFIG GET 'CONFIG_SETTING_NAME' //獲取對(duì)應(yīng)的參數(shù)配置 CONFIG GET * //獲取所有的參數(shù)配置
CONFIG SET "CONFIG_SETTING_NAME" "NEW_CONFIG_VALUE"http://設(shè)置對(duì)應(yīng)的參數(shù)值
參數(shù)說(shuō)明
redis.conf 配置項(xiàng)說(shuō)明如下:
1.Redis默認(rèn)不是以守護(hù)進(jìn)程的方式運(yùn)行,可以通過(guò)該配置項(xiàng)修改,使用yes啟用守護(hù)進(jìn)程
daemonize no
2.當(dāng)Redis以守護(hù)進(jìn)程方式運(yùn)行時(shí),Redis默認(rèn)會(huì)把pid寫(xiě)入/var/run/redis.pid文件,可以通過(guò)pidfile指定
pidfile /var/run/redis.pid
3.指定Redis監(jiān)聽(tīng)端口,默認(rèn)端口為6379,作者在自己的一篇博文中解釋了為什么選用6379作為默認(rèn)端口,因?yàn)?379在手機(jī)按鍵上MERZ對(duì)應(yīng)的號(hào)碼,而MERZ取自意大利歌女Alessia Merz的名字
port 6379
4.綁定的主機(jī)地址
bind 127.0.0.1
5.當(dāng) 客戶(hù)端閑置多長(zhǎng)時(shí)間后關(guān)閉連接,如果指定為0,表示關(guān)閉該功能
timeout 300
6.指定日志記錄級(jí)別,Redis總共支持四個(gè)級(jí)別:debug、verbose、notice、warning,默認(rèn)為verbose
loglevel verbose
7.日志記錄方式,默認(rèn)為標(biāo)準(zhǔn)輸出,如果配置Redis為守護(hù)進(jìn)程方式運(yùn)行,而這里又配置為日志記錄方式為標(biāo)準(zhǔn)輸出,則日志將會(huì)發(fā)送給/dev/null
logfile stdout
8.設(shè)置數(shù)據(jù)庫(kù)的數(shù)量,默認(rèn)數(shù)據(jù)庫(kù)為0,可以使用SELECT 命令在連接上指定數(shù)據(jù)庫(kù)id
databases 16
9.指定在多長(zhǎng)時(shí)間內(nèi),有多少次更新操作,就將數(shù)據(jù)同步到數(shù)據(jù)文件,可以多個(gè)條件配合
save
Redis默認(rèn)配置文件中提供了三個(gè)條件:
save 900 1 save 300 10 save 60 10000
分別表示900秒(15分鐘)內(nèi)有1個(gè)更改,300秒(5分鐘)內(nèi)有10個(gè)更改以及60秒內(nèi)有10000個(gè)更改。
10.指定存儲(chǔ)至本地?cái)?shù)據(jù)庫(kù)時(shí)是否壓縮數(shù)據(jù),默認(rèn)為yes,Redis采用LZF壓縮,如果為了節(jié)省CPU時(shí)間,可以關(guān)閉該選項(xiàng),但會(huì)導(dǎo)致數(shù)據(jù)庫(kù)文件變的巨大
rdbcompression yes
11.指定本地?cái)?shù)據(jù)庫(kù)文件名,默認(rèn)值為dump.rdb
dbfilename dump.rdb
12.指定本地?cái)?shù)據(jù)庫(kù)存放目錄
dir ./
13.設(shè)置當(dāng)本機(jī)為slav服務(wù)時(shí),設(shè)置master服務(wù)的IP地址及端口,在Redis啟動(dòng)時(shí),它會(huì)自動(dòng)從master進(jìn)行數(shù)據(jù)同步
slaveof
14.當(dāng)master服務(wù)設(shè)置了密碼保護(hù)時(shí),slav服務(wù)連接master的密碼
masterauth
15.設(shè)置Redis連接密碼,如果配置了連接密碼,客戶(hù)端在連接Redis時(shí)需要通過(guò)AUTH 命令提供密碼,默認(rèn)關(guān)閉
requirepass foobared
16.設(shè)置同一時(shí)間最大客戶(hù)端連接數(shù),默認(rèn)無(wú)限制,Redis可以同時(shí)打開(kāi)的客戶(hù)端連接數(shù)為Redis進(jìn)程可以打開(kāi)的最大文件描述符數(shù),如果設(shè)置 maxclients 0,表示不作限制。當(dāng)客戶(hù)端連接數(shù)到達(dá)限制時(shí),Redis會(huì)關(guān)閉新的連接并向客戶(hù)端返回max number of clients reached錯(cuò)誤信息
maxclients 128
17.指定Redis最大內(nèi)存限制,Redis在啟動(dòng)時(shí)會(huì)把數(shù)據(jù)加載到內(nèi)存中,達(dá)到最大內(nèi)存后,Redis會(huì)先嘗試清除已到期或即將到期的Key,當(dāng)此方法處理 后,仍然到達(dá)最大內(nèi)存設(shè)置,將無(wú)法再進(jìn)行寫(xiě)入操作,但仍然可以進(jìn)行讀取操作。Redis新的vm機(jī)制,會(huì)把Key存放內(nèi)存,Value會(huì)存放在swap區(qū)
maxmemory
18.指定是否在每次更新操作后進(jìn)行日志記錄,Redis在默認(rèn)情況下是異步的把數(shù)據(jù)寫(xiě)入磁盤(pán),如果不開(kāi)啟,可能會(huì)在斷電時(shí)導(dǎo)致一段時(shí)間內(nèi)的數(shù)據(jù)丟失。因?yàn)?redis本身同步數(shù)據(jù)文件是按上面save條件來(lái)同步的,所以有的數(shù)據(jù)會(huì)在一段時(shí)間內(nèi)只存在于內(nèi)存中。默認(rèn)為no
appendonly no
19.指定更新日志文件名,默認(rèn)為appendonly.aof
appendfilename appendonly.aof
20.指定更新日志條件,共有3個(gè)可選值:
no:表示等操作系統(tǒng)進(jìn)行數(shù)據(jù)緩存同步到磁盤(pán)(快)
always:表示每次更新操作后手動(dòng)調(diào)用fsync()將數(shù)據(jù)寫(xiě)到磁盤(pán)(慢,安全)
everysec:表示每秒同步一次(折衷,默認(rèn)值)
appendfsync everysec
21.指定是否啟用虛擬內(nèi)存機(jī)制,默認(rèn)值為no,簡(jiǎn)單的介紹一下,VM機(jī)制將數(shù)據(jù)分頁(yè)存放,由Redis將訪問(wèn)量較少的頁(yè)即冷數(shù)據(jù)swap到磁盤(pán)上,訪問(wèn)多的頁(yè)面由磁盤(pán)自動(dòng)換出到內(nèi)存中(在后面的文章我會(huì)仔細(xì)分析Redis的VM機(jī)制)
vm-enabled no
22.虛擬內(nèi)存文件路徑,默認(rèn)值為/tmp/redis.swap,不可多個(gè)Redis實(shí)例共享
vm-swap-file /tmp/redis.swap
23.將所有大于vm-max-memory的數(shù)據(jù)存入虛擬內(nèi)存,無(wú)論vm-max-memory設(shè)置多小,所有索引數(shù)據(jù)都是內(nèi)存存儲(chǔ)的(Redis的索引數(shù)據(jù) 就是keys),也就是說(shuō),當(dāng)vm-max-memory設(shè)置為0的時(shí)候,其實(shí)是所有value都存在于磁盤(pán)。默認(rèn)值為0
vm-max-memory 0
24.Redis swap文件分成了很多的page,一個(gè)對(duì)象可以保存在多個(gè)page上面,但一個(gè)page上不能被多個(gè)對(duì)象共享,vm-page-size是要根據(jù)存儲(chǔ)的 數(shù)據(jù)大小來(lái)設(shè)定的,作者建議如果存儲(chǔ)很多小對(duì)象,page大小最好設(shè)置為32或者64bytes;如果存儲(chǔ)很大大對(duì)象,則可以使用更大的page,如果不 確定,就使用默認(rèn)值
vm-page-size 32
25.設(shè)置swap文件中的page數(shù)量,由于頁(yè)表(一種表示頁(yè)面空閑或使用的bitmap)是在放在內(nèi)存中的,,在磁盤(pán)上每8個(gè)pages將消耗1byte的內(nèi)存。
vm-pages 134217728
26.設(shè)置訪問(wèn)swap文件的線(xiàn)程數(shù),最好不要超過(guò)機(jī)器的核數(shù),如果設(shè)置為0,那么所有對(duì)swap文件的操作都是串行的,可能會(huì)造成比較長(zhǎng)時(shí)間的延遲。默認(rèn)值為4
vm-max-threads 4
27.設(shè)置在向客戶(hù)端應(yīng)答時(shí),是否把較小的包合并為一個(gè)包發(fā)送,默認(rèn)為開(kāi)啟
glueoutputbuf yes
28.指定在超過(guò)一定的數(shù)量或者最大的元素超過(guò)某一臨界值時(shí),采用一種特殊的哈希算法
hash-max-zipmap-entries 64 hash-max-zipmap-value 512
29.指定是否激活重置哈希,默認(rèn)為開(kāi)啟(后面在介紹Redis的哈希算法時(shí)具體介紹)
activerehashing yes
30.指定包含其它的配置文件,可以在同一主機(jī)上多個(gè)Redis實(shí)例之間使用同一份配置文件,而同時(shí)各個(gè)實(shí)例又擁有自己的特定配置文件
include /path/to/local.conf
五、Redis 數(shù)據(jù)類(lèi)型
String: 字符串
Hash: 散列
List: 列表
Set: 集合
Sorted Set: 有序集合
1.String(字符串)
string是redis最基本的類(lèi)型,你可以理解成與Memcached一模一樣的類(lèi)型,一個(gè)key對(duì)應(yīng)一個(gè)value。
string類(lèi)型是二進(jìn)制安全的。意思是redis的string可以包含任何數(shù)據(jù)。比如jpg圖片或者序列化的對(duì)象 。
string類(lèi)型是Redis最基本的數(shù)據(jù)類(lèi)型,一個(gè)鍵最大能存儲(chǔ)512MB。
redis 127.0.0.1:6379> SET name "xlosy" OK redis 127.0.0.1:6379> GET name "xlosy"
在以上實(shí)例中我們使用了 Redis 的 SET 和 GET 命令。鍵為 name,對(duì)應(yīng)的值為 xlosy。
2.Hash(哈希)
Redis hash 是一個(gè)鍵值(key=>value)對(duì)集合。
Redis hash 是一個(gè) string 類(lèi)型的 field 和 value 的映射表,hash 特別適合用于存儲(chǔ)對(duì)象。
redis> HMSET myhash field1 "Hello" field2 "World" "OK" redis> HGET myhash field1 "Hello" redis> HGET myhash field2 "World"
實(shí)例中我們使用了 Redis HMSET, HGET 命令,HMSET 設(shè)置了兩個(gè) field=>value 對(duì), HGET 獲取對(duì)應(yīng) field 對(duì)應(yīng)的 value。
3.List(列表)
Redis 列表是簡(jiǎn)單的字符串列表,按照插入順序排序。你可以添加一個(gè)元素到列表的頭部(左邊)或者尾部(右邊)。
redis 127.0.0.1:6379> lpush xlosy redis (integer) 1 redis 127.0.0.1:6379> lpush xlosy MongoDB (integer) 2 redis 127.0.0.1:6379> lpush xlosy rabitmq (integer) 3 redis 127.0.0.1:6379> lrange xlosy 0 10 1) "rabitmq" 2) "mongodb" 3) "redis"
列表最多可存儲(chǔ) 232 - 1 元素 (4294967295, 每個(gè)列表可存儲(chǔ)40多億)。
4.Set(集合)
Redis的Set是string類(lèi)型的無(wú)序集合。
集合是通過(guò)哈希表實(shí)現(xiàn)的,所以添加,刪除,查找的復(fù)雜度都是O(1)。
redis 127.0.0.1:6379> sadd xlosy redis (integer) 1 redis 127.0.0.1:6379> sadd xlosy mongodb (integer) 1 redis 127.0.0.1:6379> sadd xlosy rabitmq (integer) 1 redis 127.0.0.1:6379> sadd xlosy rabitmq (integer) 0 redis 127.0.0.1:6379> smembers xlosy 1) "redis" 2) "rabitmq" 3) "mongodb"
注意:以上實(shí)例中 rabitmq 添加了兩次,但根據(jù)集合內(nèi)元素的唯一性,第二次插入的元素將被忽略。
集合中最大的成員數(shù)為 232 - 1(4294967295, 每個(gè)集合可存儲(chǔ)40多億個(gè)成員)。
5.zset(sorted set:有序集合)
Redis zset 和 set 一樣也是string類(lèi)型元素的集合,且不允許重復(fù)的成員。
不同的是每個(gè)元素都會(huì)關(guān)聯(lián)一個(gè)double類(lèi)型的分?jǐn)?shù)。redis正是通過(guò)分?jǐn)?shù)來(lái)為集合中的成員進(jìn)行從小到大的排序。
zset的成員是唯一的,但分?jǐn)?shù)(score)卻可以重復(fù)。
redis 127.0.0.1:6379> zadd xlosy 0 redis (integer) 1 redis 127.0.0.1:6379> zadd xlosy 0 mongodb (integer) 1 redis 127.0.0.1:6379> zadd xlosy 0 rabitmq (integer) 1 redis 127.0.0.1:6379> zadd xlosy 0 rabitmq (integer) 0 redis 127.0.0.1:6379> > ZRANGEBYSCORE xlosy 0 1000 1) "mongodb" 2) "rabitmq" 3) "redis"
六、Redis命令
Ping:命令驗(yàn)證服務(wù)是否啟動(dòng)
$redis-cli -h 127.0.0.1 -p 6379 -a "mypass"http://“-h”是主機(jī)地址,“-p”是主機(jī)端口,“-a”是主機(jī)密碼 redis 127.0.0.1:6379> PING PONG
如果執(zhí)行ping命令后輸出pong則表示Redis服務(wù)器運(yùn)行正常。
**1).Redis對(duì)鍵(key)操作的命令 **
SET:添加鍵值
redis 127.0.0.1:6379> SET xlosykey redis OK
DEL:刪除已經(jīng)存在的鍵值
redis 127.0.0.1:6379> DEL xlosykey (integer) 1
1 DEL key
該命令用于在 key 存在時(shí)刪除 key。
2 DUMP key
序列化給定 key ,并返回被序列化的值。
3 EXISTS key
檢查給定 key 是否存在。
4 EXPIRE key seconds
為給定 key 設(shè)置過(guò)期時(shí)間。
5 EXPIREAT key timestamp
EXPIREAT 的作用和 EXPIRE 類(lèi)似,都用于為 key 設(shè)置過(guò)期時(shí)間。 不同在于 EXPIREAT 命令接受的時(shí)間參數(shù)是 UNIX 時(shí)間戳(unix timestamp)。
6 PEXPIRE key milliseconds
設(shè)置 key 的過(guò)期時(shí)間以毫秒計(jì)。
7 PEXPIREAT key milliseconds-timestamp
設(shè)置 key 過(guò)期時(shí)間的時(shí)間戳(unix timestamp) 以毫秒計(jì)
8 KEYS pattern
查找所有符合給定模式( pattern)的 key 。
9 MOVE key db
將當(dāng)前數(shù)據(jù)庫(kù)的 key 移動(dòng)到給定的數(shù)據(jù)庫(kù) db 當(dāng)中。
10 PERSIST key
移除 key 的過(guò)期時(shí)間,key 將持久保持。
11 PTTL key
以毫秒為單位返回 key 的剩余的過(guò)期時(shí)間。
12 TTL key
以秒為單位,返回給定 key 的剩余生存時(shí)間(TTL, time to live)。
13 RANDOMKEY
從當(dāng)前數(shù)據(jù)庫(kù)中隨機(jī)返回一個(gè) key 。
14 RENAME key newkey
修改 key 的名稱(chēng)
15 RENAMENX key newkey
僅當(dāng) newkey 不存在時(shí),將 key 改名為 newkey 。
16 TYPE key
返回 key 所儲(chǔ)存的值的類(lèi)型。
更多命令請(qǐng)參考:https://redis.io/commands
2).Redis對(duì)字符串(String)操作的命令
redis 127.0.0.1:6379> SET xlosykey redis OK redis 127.0.0.1:6379> GET xlosykey "redis"
1 SET key value
設(shè)置指定 key 的值
2 GET key
獲取指定 key 的值。
3 GETRANGE key start end
返回 key 中字符串值的子字符
4 GETSET key value
將給定 key 的值設(shè)為 value ,并返回 key 的舊值(old value)。
5 GETBIT key offset
對(duì) key 所儲(chǔ)存的字符串值,獲取指定偏移量上的位(bit)。
6 MGET key1 [key2…]
獲取所有(一個(gè)或多個(gè))給定 key 的值。
7 SETBIT key offset value
對(duì) key 所儲(chǔ)存的字符串值,設(shè)置或清除指定偏移量上的位(bit)。
8 SETEX key seconds value
將值 value 關(guān)聯(lián)到 key ,并將 key 的過(guò)期時(shí)間設(shè)為 seconds (以秒為單位)。
9 SETNX key value
只有在 key 不存在時(shí)設(shè)置 key 的值。
10 SETRANGE key offset value
用 value 參數(shù)覆寫(xiě)給定 key 所儲(chǔ)存的字符串值,從偏移量 offset 開(kāi)始。
11 STRLEN key
返回 key 所儲(chǔ)存的字符串值的長(zhǎng)度。
12 MSET key value [key value …]
同時(shí)設(shè)置一個(gè)或多個(gè) key-value 對(duì)。
13 MSETNX key value [key value …]
同時(shí)設(shè)置一個(gè)或多個(gè) key-value 對(duì),當(dāng)且僅當(dāng)所有給定 key 都不存在。
14 PSETEX key milliseconds value
這個(gè)命令和 SETEX 命令相似,但它以毫秒為單位設(shè)置 key 的生存時(shí)間,而不是像 SETEX 命令那樣,以秒為單位。
15 INCR key
將 key 中儲(chǔ)存的數(shù)字值增一。
16 INCRBY key increment
將 key 所儲(chǔ)存的值加上給定的增量值(increment) 。
17 INCRBYFLOAT key increment
將 key 所儲(chǔ)存的值加上給定的浮點(diǎn)增量值(increment) 。
18 DECR key
將 key 中儲(chǔ)存的數(shù)字值減一。
19 DECRBY key decrement
key 所儲(chǔ)存的值減去給定的減量值(decrement) 。
20 APPEND key value
如果 key 已經(jīng)存在并且是一個(gè)字符串, APPEND 命令將指定的 value 追加到該 key 原來(lái)值(value)的末尾。
更多命令請(qǐng)參考:https://redis.io/commands
3).Redis對(duì)哈希(Hash)操作的命令
127.0.0.1:6379> HMSET xlosykey name "redis tutorial" description "redis basic commands for caching" likes 20 visitors 23000 OK 127.0.0.1:6379> HGETALL xlosykey 1) "name" 2) "redis tutorial" 3) "description" 4) "redis basic commands for caching" 5) "likes" 6) "20" 7) "visitors" 8) "23000"
1 HDEL key field1 [field2]
刪除一個(gè)或多個(gè)哈希表字段
2 HEXISTS key field
查看哈希表 key 中,指定的字段是否存在。
3 HGET key field
獲取存儲(chǔ)在哈希表中指定字段的值。
4 HGETALL key
獲取在哈希表中指定 key 的所有字段和值
5 HINCRBY key field increment
為哈希表 key 中的指定字段的整數(shù)值加上增量 increment 。
6 HINCRBYFLOAT key field increment
為哈希表 key 中的指定字段的浮點(diǎn)數(shù)值加上增量 increment 。
7 HKEYS key
獲取所有哈希表中的字段
8 HLEN key
獲取哈希表中字段的數(shù)量
9 HMGET key field1 [field2]
獲取所有給定字段的值
10 HMSET key field1 value1 [field2 value2 ]
同時(shí)將多個(gè) field-value (域-值)對(duì)設(shè)置到哈希表 key 中。
11 HSET key field value
將哈希表 key 中的字段 field 的值設(shè)為 value 。
12 HSETNX key field value
只有在字段 field 不存在時(shí),設(shè)置哈希表字段的值。
13 HVALS key
獲取哈希表中所有值
14 HSCAN key cursor [MATCH pattern] [COUNT count]
迭代哈希表中的鍵值對(duì)。
更多命令請(qǐng)參考:https://redis.io/commands
4).Redis對(duì)列表(List)操作的命令
redis 127.0.0.1:6379> LPUSH xlosykey redis (integer) 1 redis 127.0.0.1:6379> LPUSH xlosykey mongodb (integer) 2 redis 127.0.0.1:6379> LPUSH xlosykey MySQL (integer) 3 redis 127.0.0.1:6379> LRANGE xlosykey 0 10 1) "mysql" 2) "mongodb" 3) "redis"
1 BLPOP key1 [key2 ] timeout
移出并獲取列表的第一個(gè)元素, 如果列表沒(méi)有元素會(huì)阻塞列表直到等待超時(shí)或發(fā)現(xiàn)可彈出元素為止。
2 BRPOP key1 [key2 ] timeout
移出并獲取列表的最后一個(gè)元素, 如果列表沒(méi)有元素會(huì)阻塞列表直到等待超時(shí)或發(fā)現(xiàn)可彈出元素為止。
3 BRPOPLPUSH source destination timeout
從列表中彈出一個(gè)值,將彈出的元素插入到另外一個(gè)列表中并返回它; 如果列表沒(méi)有元素會(huì)阻塞列表直到等待超時(shí)或發(fā)現(xiàn)可彈出元素為止。
4 LINDEX key index
通過(guò)索引獲取列表中的元素
5 LINSERT key BEFORE|AFTER pivot value
在列表的元素前或者后插入元素
6 LLEN key
獲取列表長(zhǎng)度
7 LPOP key
移出并獲取列表的第一個(gè)元素
8 LPUSH key value1 [value2]
將一個(gè)或多個(gè)值插入到列表頭部
9 LPUSHX key value
將一個(gè)值插入到已存在的列表頭部
10 LRANGE key start stop
獲取列表指定范圍內(nèi)的元素
11 LREM key count value
移除列表元素
12 LSET key index value
通過(guò)索引設(shè)置列表元素的值
13 LTRIM key start stop
對(duì)一個(gè)列表進(jìn)行修剪(trim),就是說(shuō),讓列表只保留指定區(qū)間內(nèi)的元素,不在指定區(qū)間之內(nèi)的元素都將被刪除。
14 RPOP key
移除并獲取列表最后一個(gè)元素
15 RPOPLPUSH source destination
移除列表的最后一個(gè)元素,并將該元素添加到另一個(gè)列表并返回
16 RPUSH key value1 [value2]
在列表中添加一個(gè)或多個(gè)值
17 RPUSHX key value
為已存在的列表添加值
5).Redis對(duì)集合(Set)操作的命令
redis 127.0.0.1:6379> SADD xlosykey redis (integer) 1 redis 127.0.0.1:6379> SADD xlosykey mongodb (integer) 1 redis 127.0.0.1:6379> SADD xlosykey mysql (integer) 1 redis 127.0.0.1:6379> SADD xlosykey mysql (integer) 0 redis 127.0.0.1:6379> SMEMBERS xlosykey 1) "mysql" 2) "mongodb" 3) "redis"
1 SADD key member1 [member2]
向集合添加一個(gè)或多個(gè)成員
2 SCARD key
獲取集合的成員數(shù)
3 SDIFF key1 [key2]
返回給定所有集合的差集
4 SDIFFSTORE destination key1 [key2]
返回給定所有集合的差集并存儲(chǔ)在 destination 中
5 SINTER key1 [key2]
返回給定所有集合的交集
6 SINTERSTORE destination key1 [key2]
返回給定所有集合的交集并存儲(chǔ)在 destination 中
7 SISMEMBER key member
判斷 member 元素是否是集合 key 的成員
8 SMEMBERS key
返回集合中的所有成員
9 SMOVE source destination member
將 member 元素從 source 集合移動(dòng)到 destination 集合
10 SPOP key
移除并返回集合中的一個(gè)隨機(jī)元素
11 SRANDMEMBER key [count]
返回集合中一個(gè)或多個(gè)隨機(jī)數(shù)
12 SREM key member1 [member2]
移除集合中一個(gè)或多個(gè)成員
13 SUNION key1 [key2]
返回所有給定集合的并集
14 SUNIONSTORE destination key1 [key2]
所有給定集合的并集存儲(chǔ)在 destination 集合中
15 SSCAN key cursor [MATCH pattern] [COUNT count]
迭代集合中的元素
6).Redis對(duì)有序集合(sorted set)操作的命令
redis 127.0.0.1:6379> ZADD xlosykey 1 redis (integer) 1 redis 127.0.0.1:6379> ZADD xlosykey 2 mongodb (integer) 1 redis 127.0.0.1:6379> ZADD xlosykey 3 mysql (integer) 1 redis 127.0.0.1:6379> ZADD xlosykey 3 mysql (integer) 0 redis 127.0.0.1:6379> ZADD xlosykey 4 mysql (integer) 0 redis 127.0.0.1:6379> ZRANGE xlosykey 0 10 WITHSCORES 1) "redis" 2) "1" 3) "mongodb" 4) "2" 5) "mysql" 6) "4"
1 ZADD key score1 member1 [score2 member2]
向有序集合添加一個(gè)或多個(gè)成員,或者更新已存在成員的分?jǐn)?shù)
2 ZCARD key
獲取有序集合的成員數(shù)
3 ZCOUNT key min max
計(jì)算在有序集合中指定區(qū)間分?jǐn)?shù)的成員數(shù)
4 ZINCRBY key increment member
有序集合中對(duì)指定成員的分?jǐn)?shù)加上增量 increment
5 ZINTERSTORE destination numkeys key [key …]
計(jì)算給定的一個(gè)或多個(gè)有序集的交集并將結(jié)果集存儲(chǔ)在新的有序集合 key 中
6 ZLEXCOUNT key min max
在有序集合中計(jì)算指定字典區(qū)間內(nèi)成員數(shù)量
7 ZRANGE key start stop [WITHSCORES]
通過(guò)索引區(qū)間返回有序集合成指定區(qū)間內(nèi)的成員
8 ZRANGEBYLEX key min max [LIMIT offset count]
通過(guò)字典區(qū)間返回有序集合的成員
9 ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT]
通過(guò)分?jǐn)?shù)返回有序集合指定區(qū)間內(nèi)的成員
10 ZRANK key member
返回有序集合中指定成員的索引
11 ZREM key member [member …]
移除有序集合中的一個(gè)或多個(gè)成員
12 ZREMRANGEBYLEX key min max
移除有序集合中給定的字典區(qū)間的所有成員
13 ZREMRANGEBYRANK key start stop
移除有序集合中給定的排名區(qū)間的所有成員
14 ZREMRANGEBYSCORE key min max
移除有序集合中給定的分?jǐn)?shù)區(qū)間的所有成員
15 ZREVRANGE key start stop [WITHSCORES]
返回有序集中指定區(qū)間內(nèi)的成員,通過(guò)索引,分?jǐn)?shù)從高到底
16 ZREVRANGEBYSCORE key max min [WITHSCORES]
返回有序集中指定分?jǐn)?shù)區(qū)間內(nèi)的成員,分?jǐn)?shù)從高到低排序
17 ZREVRANK key member
返回有序集合中指定成員的排名,有序集成員按分?jǐn)?shù)值遞減(從大到小)排序
18 ZSCORE key member
返回有序集中,成員的分?jǐn)?shù)值
19 ZUNIONSTORE destination numkeys key [key …]
計(jì)算給定的一個(gè)或多個(gè)有序集的并集,并存儲(chǔ)在新的 key 中
20 ZSCAN key cursor [MATCH pattern] [COUNT count]
迭代有序集合中的元素(包括元素成員和元素分值)
七、Redis的發(fā)布與訂閱
Redis 發(fā)布訂閱(pub/sub)是一種消息通信模式:發(fā)送者(pub)發(fā)送消息,訂閱者(sub)接收消息。
Redis 客戶(hù)端可以訂閱任意數(shù)量的頻道。
redis 127.0.0.1:6379> SUBSCRIBE redisChat Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "redisChat" 3) (integer) 1
訂閱一個(gè)通道名稱(chēng)為“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 xlosy.com" (integer) 1
訂閱者的客戶(hù)端會(huì)顯示如下消息
1) "message" 2) "redisChat" 3) "Redis is a great caching technique" 1) "message" 2) "redisChat" 3) "Learn redis by xlosy.com"
1 PSUBSCRIBE pattern [pattern …]
訂閱一個(gè)或多個(gè)符合給定模式的頻道。
2 PUBSUB subcommand [argument [argument …]]
查看訂閱與發(fā)布系統(tǒng)狀態(tài)。
3 PUBLISH channel message
將信息發(fā)送到指定的頻道。
4 PUNSUBSCRIBE [pattern [pattern …]]
退訂所有給定模式的頻道。
5 SUBSCRIBE channel [channel …]
訂閱給定的一個(gè)或多個(gè)頻道的信息。
6 UNSUBSCRIBE [channel [channel …]]
指退訂給定的頻道。
七、Redis 事務(wù)
Redis 事務(wù)可以一次執(zhí)行多個(gè)命令, 并且?guī)в幸韵聝蓚€(gè)重要的保證:
批量操作在發(fā)送 EXEC 命令前被放入隊(duì)列緩存。
收到 EXEC 命令后進(jìn)入事務(wù)執(zhí)行,事務(wù)中任意命令執(zhí)行失敗,其余的命令依然被執(zhí)行。
在事務(wù)執(zhí)行過(guò)程,其他客戶(hù)端提交的命令請(qǐng)求不會(huì)插入到事務(wù)執(zhí)行命令序列中。
一個(gè)事務(wù)從開(kāi)始到執(zhí)行會(huì)經(jīng)歷以下三個(gè)階段:
開(kāi)始事務(wù)。
命令入隊(duì)。
執(zhí)行事務(wù)。
redis 127.0.0.1:6379> MULTI OK redis 127.0.0.1:6379> SET book-name "Mastering C++ in 21 days" QUEUED redis 127.0.0.1:6379> GET book-name QUEUED redis 127.0.0.1:6379> SADD tag "C++" "Programming" "Mastering Series" QUEUED redis 127.0.0.1:6379> SMEMBERS tag QUEUED redis 127.0.0.1:6379> EXEC 1) OK 2) "Mastering C++ in 21 days" 3) (integer) 3 4) 1) "Mastering Series" 2) "C++" 3) "Programming"
單個(gè) Redis 命令的執(zhí)行是原子性的,但 Redis 沒(méi)有在事務(wù)上增加任何維持原子性的機(jī)制,所以 Redis 事務(wù)的執(zhí)行并不是原子性的。
事務(wù)可以理解為一個(gè)打包的批量執(zhí)行腳本,但批量指令并非原子化的操作,中間某條指令的失敗不會(huì)導(dǎo)致前面已做指令的回滾,也不會(huì)造成后續(xù)的指令不做。
1 DISCARD
取消事務(wù),放棄執(zhí)行事務(wù)塊內(nèi)的所有命令。
2 EXEC
執(zhí)行所有事務(wù)塊內(nèi)的命令。
3 MULTI
標(biāo)記一個(gè)事務(wù)塊的開(kāi)始。
4 UNWATCH
取消 WATCH 命令對(duì)所有 key 的監(jiān)視。
5 WATCH key [key …]
監(jiān)視一個(gè)(或多個(gè)) key ,如果在事務(wù)執(zhí)行之前這個(gè)(或這些) key 被其他命令所改動(dòng),那么事務(wù)將被打斷。
八、Redis 腳本
Redis 腳本使用 Lua 解釋器來(lái)執(zhí)行腳本。 Redis 2.6 版本通過(guò)內(nèi)嵌支持 Lua 環(huán)境。執(zhí)行腳本的常用命令為 EVAL。
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"
1 EVAL script numkeys key [key …] arg [arg …]
執(zhí)行 Lua 腳本。
2 EVALSHA sha1 numkeys key [key …] arg [arg …]
執(zhí)行 Lua 腳本。
3 SCRIPT EXISTS script [script …]
查看指定的腳本是否已經(jīng)被保存在緩存當(dāng)中。
4 SCRIPT FLUSH
從腳本緩存中移除所有腳本。
5 SCRIPT KILL
殺死當(dāng)前正在運(yùn)行的 Lua 腳本。
6 SCRIPT LOAD script
將腳本 script 添加到腳本緩存中,但并不立即執(zhí)行這個(gè)腳本。
九、Redis 連接
redis 127.0.0.1:6379> AUTH "password" OK redis 127.0.0.1:6379> PING PONG
1 AUTH password
驗(yàn)證密碼是否正確
2 ECHO message
打印字符串
3 PING
查看服務(wù)是否運(yùn)行
4 QUIT
關(guān)閉當(dāng)前連接
5 SELECT index
切換到指定的數(shù)據(jù)庫(kù)
十、Redis 服務(wù)器
redis 127.0.0.1:6379> INFO //顯示服務(wù)相關(guān)信息
1 BGREWRITEAOF
異步執(zhí)行一個(gè) AOF(AppendOnly File) 文件重寫(xiě)操作
2 BGSAVE
在后臺(tái)異步保存當(dāng)前數(shù)據(jù)庫(kù)的數(shù)據(jù)到磁盤(pán)
3 CLIENT KILL [ip:port] [ID client-id]
關(guān)閉客戶(hù)端連接
4 CLIENT LIST
獲取連接到服務(wù)器的客戶(hù)端連接列表
5 CLIENT GETNAME
獲取連接的名稱(chēng)
6 CLIENT PAUSE timeout
在指定時(shí)間內(nèi)終止運(yùn)行來(lái)自客戶(hù)端的命令
7 CLIENT SETNAME connection-name
設(shè)置當(dāng)前連接的名稱(chēng)
8 CLUSTER SLOTS
獲取集群節(jié)點(diǎn)的映射數(shù)組
9 COMMAND
獲取 Redis 命令詳情數(shù)組
10 COMMAND COUNT
獲取 Redis 命令總數(shù)
11 COMMAND GETKEYS
獲取給定命令的所有鍵
12 TIME
返回當(dāng)前服務(wù)器時(shí)間
13 COMMAND INFO command-name [command-name …]
獲取指定 Redis 命令描述的數(shù)組
14 CONFIG GET parameter
獲取指定配置參數(shù)的值
15 CONFIG REWRITE
對(duì)啟動(dòng) Redis 服務(wù)器時(shí)所指定的 redis.conf 配置文件進(jìn)行改寫(xiě)
16 CONFIG SET parameter value
修改 redis 配置參數(shù),無(wú)需重啟
17 CONFIG RESETSTAT
重置 INFO 命令中的某些統(tǒng)計(jì)數(shù)據(jù)
18 DBSIZE
返回當(dāng)前數(shù)據(jù)庫(kù)的 key 的數(shù)量
19 DEBUG OBJECT key
獲取 key 的調(diào)試信息
20 DEBUG SEGFAULT
讓 Redis 服務(wù)崩潰
21 FLUSHALL
刪除所有數(shù)據(jù)庫(kù)的所有key
22 FLUSHDB
刪除當(dāng)前數(shù)據(jù)庫(kù)的所有key
23 INFO [section]
獲取 Redis 服務(wù)器的各種信息和統(tǒng)計(jì)數(shù)值
24 LASTSAVE
返回最近一次 Redis 成功將數(shù)據(jù)保存到磁盤(pán)上的時(shí)間,以 UNIX 時(shí)間戳格式表示
25 MONITOR
實(shí)時(shí)打印出 Redis 服務(wù)器接收到的命令,調(diào)試用
26 ROLE
返回主從實(shí)例所屬的角色
27 SAVE
同步保存數(shù)據(jù)到硬盤(pán)
28 SHUTDOWN [NOSAVE] [SAVE]
異步保存數(shù)據(jù)到硬盤(pán),并關(guān)閉服務(wù)器
29 SLAVEOF host port
將當(dāng)前服務(wù)器轉(zhuǎn)變?yōu)橹付ǚ?wù)器的從屬服務(wù)器(slave server)
30 SLOWLOG subcommand [argument]
管理 redis 的慢日志
31 SYNC
用于復(fù)制功能(replication)的內(nèi)部命令
十一、java中使用redis
首先你需要下載驅(qū)動(dòng)包 下載 jedis.jar,確保下載最新驅(qū)動(dòng)包。
在你的 classpath 中包含該驅(qū)動(dòng)包。
import redis.clients.jedis.Jedis; public class RedisJava { public static void main(String[] args) { //連接本地的 Redis 服務(wù) Jedis jedis = new Jedis("localhost"); System.out.println("連接成功"); //查看服務(wù)是否運(yùn)行 System.out.println("服務(wù)正在運(yùn)行: "+jedis.ping()); } }
操作字符串
import redis.clients.jedis.Jedis; public class RedisStringJava { public static void main(String[] args) { //連接本地的 Redis 服務(wù) Jedis jedis = new Jedis("localhost"); System.out.println("連接成功"); //設(shè)置 redis 字符串?dāng)?shù)據(jù) jedis.set("xlosykey", "www.xlosy.com"); // 獲取存儲(chǔ)的數(shù)據(jù)并輸出 System.out.println("redis 存儲(chǔ)的字符串為: "+ jedis.get("runoobkey")); } }
Redis Java List(列表) 實(shí)例
import java.util.List; import redis.clients.jedis.Jedis; public class RedisListJava { public static void main(String[] args) { //連接本地的 Redis 服務(wù) Jedis jedis = new Jedis("localhost"); System.out.println("連接成功"); //存儲(chǔ)數(shù)據(jù)到列表中 jedis.lpush("site-list", "xlosy"); jedis.lpush("site-list", "Google"); jedis.lpush("site-list", "Taobao"); // 獲取存儲(chǔ)的數(shù)據(jù)并輸出 Listlist = jedis.lrange("site-list", 0 ,2); for(int i=0; i Redis Java Keys 實(shí)例
import java.util.Set; import redis.clients.jedis.Jedis; public class RedisKeyJava { public static void main(String[] args) { //連接本地的 Redis 服務(wù) Jedis jedis = new Jedis("localhost"); System.out.println("連接成功"); // 獲取數(shù)據(jù)并輸出 Setkeys = jedis.keys("*"); Iterator it=keys.iterator() ; while(it.hasNext()){ String key = it.next(); System.out.println(key); } } } Redis開(kāi)發(fā)建議
最后附上Redis的一些開(kāi)發(fā)規(guī)范和建議:1.冷熱數(shù)據(jù)分離,不要將所有數(shù)據(jù)全部都放到Redis中
雖然Redis支持持久化,但是Redis的數(shù)據(jù)存儲(chǔ)全部都是在內(nèi)存中的,成本昂貴。建議根據(jù)業(yè)務(wù)只將高頻熱數(shù)據(jù)存儲(chǔ)到Redis中【QPS大于5000】,對(duì)于低頻冷數(shù)據(jù)可以使用MySQL/ElasticSearch/MongoDB等基于磁盤(pán)的存儲(chǔ)方式,不僅節(jié)省內(nèi)存成本,而且數(shù)據(jù)量小在操作時(shí)速度更快、效率更高!2.不同的業(yè)務(wù)數(shù)據(jù)要分開(kāi)存儲(chǔ)
不要將不相關(guān)的業(yè)務(wù)數(shù)據(jù)都放到一個(gè)Redis實(shí)例中,建議新業(yè)務(wù)申請(qǐng)新的單獨(dú)實(shí)例。因?yàn)镽edis為單線(xiàn)程處理,獨(dú)立存儲(chǔ)會(huì)減少不同業(yè)務(wù)相互操作的影響,提高請(qǐng)求響應(yīng)速度;同時(shí)也避免單個(gè)實(shí)例內(nèi)存數(shù)據(jù)量膨脹過(guò)大,在出現(xiàn)異常情況時(shí)可以更快恢復(fù)服務(wù)! 在實(shí)際的使用過(guò)程中,redis最大的瓶頸一般是CPU,由于它是單線(xiàn)程作業(yè)所以很容易跑滿(mǎn)一個(gè)邏輯CPU,可以使用redis代理或者是分布式方案來(lái)提升redis的CPU使用率。3.存儲(chǔ)的Key一定要設(shè)置超時(shí)時(shí)間
如果應(yīng)用將Redis定位為緩存Cache使用,對(duì)于存放的Key一定要設(shè)置超時(shí)時(shí)間!因?yàn)槿舨辉O(shè)置,這些Key會(huì)一直占用內(nèi)存不釋放,造成極大的浪費(fèi),而且隨著時(shí)間的推移會(huì)導(dǎo)致內(nèi)存占用越來(lái)越大,直到達(dá)到服務(wù)器內(nèi)存上限!另外Key的超時(shí)長(zhǎng)短要根據(jù)業(yè)務(wù)綜合評(píng)估,而不是越長(zhǎng)越好!4.對(duì)于必須要存儲(chǔ)的大文本數(shù)據(jù)一定要壓縮后存儲(chǔ)
對(duì)于大文本【+超過(guò)500字節(jié)】寫(xiě)入到Redis時(shí),一定要壓縮后存儲(chǔ)!大文本數(shù)據(jù)存入Redis,除了帶來(lái)極大的內(nèi)存占用外,在訪問(wèn)量高時(shí),很容易就會(huì)將網(wǎng)卡流量占滿(mǎn),進(jìn)而造成整個(gè)服務(wù)器上的所有服務(wù)不可用,并引發(fā)雪崩效應(yīng),造成各個(gè)系統(tǒng)癱瘓!5.線(xiàn)上Redis禁止使用Keys正則匹配操作
Redis是單線(xiàn)程處理,在線(xiàn)上KEY數(shù)量較多時(shí),操作效率極低【時(shí)間復(fù)雜度為O(N)】,該命令一旦執(zhí)行會(huì)嚴(yán)重阻塞線(xiàn)上其它命令的正常請(qǐng)求,而且在高QPS情況下會(huì)直接造成Redis服務(wù)崩潰!如果有類(lèi)似需求,請(qǐng)使用scan命令代替!6.可靠的消息隊(duì)列服務(wù)
Redis List經(jīng)常被用于消息隊(duì)列服務(wù)。假設(shè)消費(fèi)者程序在從隊(duì)列中取出消息后立刻崩潰,但由于該消息已經(jīng)被取出且沒(méi)有被正常處理,那么可以認(rèn)為該消息已經(jīng)丟失,由此可能會(huì)導(dǎo)致業(yè)務(wù)數(shù)據(jù)丟失,或業(yè)務(wù)狀態(tài)不一致等現(xiàn)象發(fā)生。為了避免這種情況,Redis提供了RPOPLPUSH命令,消費(fèi)者程序會(huì)原子性的從主消息隊(duì)列中取出消息并將其插入到備份隊(duì)列中,直到消費(fèi)者程序完成正常的處理邏輯后再將該消息從備份隊(duì)列中刪除。同時(shí)還可以提供一個(gè)守護(hù)進(jìn)程,當(dāng)發(fā)現(xiàn)備份隊(duì)列中的消息過(guò)期時(shí),可以重新將其再放回到主消息隊(duì)列中,以便其它的消費(fèi)者程序繼續(xù)處理。
7.謹(jǐn)慎全量操作Hash、Set等集合結(jié)構(gòu)
在使用HASH結(jié)構(gòu)存儲(chǔ)對(duì)象屬性時(shí),開(kāi)始只有有限的十幾個(gè)field,往往使用HGETALL獲取所有成員,效率也很高,但是隨著業(yè)務(wù)發(fā)展,會(huì)將field擴(kuò)張到上百個(gè)甚至幾百個(gè),此時(shí)還使用HGETALL會(huì)出現(xiàn)效率急劇下降、網(wǎng)卡頻繁打滿(mǎn)等問(wèn)題【時(shí)間復(fù)雜度O(N)】,此時(shí)建議根據(jù)業(yè)務(wù)拆分為多個(gè)Hash結(jié)構(gòu);或者如果大部分都是獲取所有屬性的操作,可以將所有屬性序列化為一個(gè)STRING類(lèi)型存儲(chǔ)!同樣在使用SMEMBERS操作SET結(jié)構(gòu)類(lèi)型時(shí)也是相同的情況!8.根據(jù)業(yè)務(wù)場(chǎng)景合理使用不同的數(shù)據(jù)結(jié)構(gòu)類(lèi)型
目前Redis支持的數(shù)據(jù)庫(kù)結(jié)構(gòu)類(lèi)型較多:字符串(String),哈希(Hash),列表(List),集合(Set),有序集合(Sorted Set), Bitmap, HyperLogLog和地理空間索引(geospatial)等,需要根據(jù)業(yè)務(wù)場(chǎng)景選擇合適的類(lèi)型。常見(jiàn)的如:String可以用作普通的K-V、計(jì)數(shù)類(lèi);Hash可以用作對(duì)象如商品、經(jīng)紀(jì)人等,包含較多屬性的信息;List可以用作消息隊(duì)列、粉絲/關(guān)注列表等;Set可以用于推薦;Sorted Set可以用于排行榜等!
9.命名規(guī)范
雖然說(shuō)Redis支持多個(gè)數(shù)據(jù)庫(kù)(默認(rèn)32個(gè),可以配置更多),但是除了默認(rèn)的0號(hào)庫(kù)以外,其它的都需要通過(guò)一個(gè)額外請(qǐng)求才能使用。所以用前綴作為命名空間可能會(huì)更明智一點(diǎn)。另外,在使用前綴作為命名空間區(qū)隔不同key的時(shí)候,最好在程序中使用全局配置來(lái)實(shí)現(xiàn),直接在代碼里寫(xiě)前綴的做法要嚴(yán)格避免,這樣可維護(hù)性實(shí)在太差了。
如:系統(tǒng)名:業(yè)務(wù)名:業(yè)務(wù)數(shù)據(jù):其他
但是注意,key的名稱(chēng)不要過(guò)長(zhǎng),盡量清晰明了,容易理解,需要自己衡量
10.線(xiàn)上禁止使用monitor命令
禁止生產(chǎn)環(huán)境使用monitor命令,monitor命令在高并發(fā)條件下,會(huì)存在內(nèi)存暴增和影響Redis性能的隱患11.禁止大string
核心集群禁用1mb的string大key(雖然redis支持512MB大小的string),如果1mb的key每秒重復(fù)寫(xiě)入10次,就會(huì)導(dǎo)致寫(xiě)入網(wǎng)絡(luò)IO達(dá)10MB;12.redis容量
單實(shí)例的內(nèi)存大小不建議過(guò)大,建議在10~20GB以?xún)?nèi)。redis實(shí)例包含的鍵個(gè)數(shù)建議控制在1kw內(nèi),單實(shí)例鍵個(gè)數(shù)過(guò)大,可能導(dǎo)致過(guò)期鍵的回收不及時(shí)。
13 可靠性
需要定時(shí)監(jiān)控redis的健康情況:使用各種redis健康監(jiān)控工具,實(shí)在不行可以定時(shí)返回redis 的 info信息。客戶(hù)端連接盡量使用連接池(長(zhǎng)鏈接和自動(dòng)重連)
感謝各位的閱讀!關(guān)于“Redis怎么使用”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
網(wǎng)頁(yè)題目:Redis怎么使用
標(biāo)題來(lái)源:http://weahome.cn/article/ijsgis.html