成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Redis實(shí)戰(zhàn)回顧

kelvinlee / 2995人閱讀

摘要:取消命令對所有的監(jiān)視?;蛘哌@樣登錄打印字符串查看服務(wù)是否運(yùn)行關(guān)閉當(dāng)前連接切換到指定的數(shù)據(jù)庫數(shù)據(jù)持久化是一個(gè)支持持久化的內(nèi)存數(shù)據(jù)庫,需要經(jīng)常將內(nèi)存中的數(shù)據(jù)同步到磁盤來保證持久化。

前言

Remote Dictionary Server(遠(yuǎn)程數(shù)據(jù)的服務(wù)),是一種NoSQL技術(shù),是一個(gè)基于key-value的高速緩存系統(tǒng),是目前應(yīng)用面最廣的緩存系統(tǒng)之一。

Redis實(shí)戰(zhàn) 第一部分 基本概念和注意事項(xiàng) 1.1 Redis是什么?

Redis:Remote Dictionary Server(遠(yuǎn)程數(shù)據(jù)的服務(wù)),是一種NoSQL技術(shù),是一個(gè)基于key-value的高速緩存系統(tǒng),Redis是一個(gè)開源的使用ANSI C語言編寫、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫,并提供多種語言的API。類似于Memcache,但是支持更復(fù)雜的數(shù)據(jù)結(jié)構(gòu)List,Set,SortedSet等,并且有持久化[1]的功能。

Redis有以下特點(diǎn):

Redis支持?jǐn)?shù)據(jù)的持久化,可以講內(nèi)存中數(shù)據(jù)曹村在磁盤中,重啟的時(shí)候可以再次加載進(jìn)行使用。

Redis不僅僅是支持簡單的key-value類型的數(shù)據(jù),同事還提供List,Set,Hash等數(shù)據(jù)結(jié)構(gòu)的存儲。

Redis支持?jǐn)?shù)據(jù)的備份,即master-salve模式的數(shù)據(jù)備份。

1.2 Redis緩存的原理

一般場景就是數(shù)據(jù)緩存服務(wù)器,與Memcache的角色保持一致;實(shí)質(zhì)上Redis緩存數(shù)據(jù)庫服務(wù)器在提供的緩存的基礎(chǔ)上,同時(shí)提供數(shù)據(jù)持久化(復(fù)制),也就是提供數(shù)據(jù)庫層面的功能。

實(shí)現(xiàn)機(jī)制:操作時(shí),操作的內(nèi)存允許設(shè)置同步到磁盤上。

1.3 Redis和Memcache的區(qū)別?

1.存儲方式:

Memcache吧數(shù)據(jù)全部存在內(nèi)存中,斷電或者重啟服務(wù)器會掛掉,不可以恢復(fù)數(shù)據(jù),數(shù)據(jù)大小不能草果內(nèi)存大小。

Redis有部分?jǐn)?shù)據(jù)在磁盤上,這樣能保證數(shù)據(jù)的持久化??梢远ㄆ诒4娴酱疟P(持久化),內(nèi)存上的數(shù)據(jù)丟失后可以通過aof恢復(fù)。

2.數(shù)據(jù)支持類型:

Redis在數(shù)據(jù)支持上要比Memcache多的多。Redis不僅僅支持簡單的key-value類型的數(shù)據(jù),同時(shí)還支持List,Set,Hash等數(shù)據(jù)結(jié)構(gòu)的存儲。

Redis的value最大支持512M,Memcache的value最大支持1M。

3.使用底層模型不同

新版本的Redis直接構(gòu)建了自己的VM機(jī)制,因?yàn)橐话愕南到y(tǒng)調(diào)用系統(tǒng)函數(shù)需要耗費(fèi)一定的時(shí)間去移動和請求,有了自己的VM機(jī)制就節(jié)省了時(shí)間。

Redis是單核運(yùn)行的,Memcache是多喝運(yùn)行的。

讀寫速度:Redis的寫速度與Memcache差不多,讀速度Memcache比Redis快。

4.運(yùn)行的環(huán)境不同

RedisRedis只支持Linux上執(zhí)行,這樣省去了對其他操作系統(tǒng)的支持,可以更好的用于本系統(tǒng)環(huán)境的優(yōu)化。

5.對于兩者的選擇具體看應(yīng)用場景

如果需要緩存的數(shù)據(jù)只是key-value這樣簡單的結(jié)構(gòu)時(shí)首先考慮Memcache,它是足夠穩(wěn)定可靠。

如果涉及到存儲,排序等一系列復(fù)雜操作時(shí),毫無疑問選擇Redis。

1.4 Redis.conf配置文件說明

1.Redis默認(rèn)不是以守護(hù)進(jìn)程的方式運(yùn)行,可以通過該配置項(xiàng)修改,使用yes啟用守護(hù)進(jìn)程:daemonize no。

2.當(dāng)Redis以守護(hù)進(jìn)程方式運(yùn)行時(shí),Redis默認(rèn)會把pid寫入/var/run/redis.pid文件,可以通過pidfile制定存儲位置:pidfile /var/run/redis.pid。

3.指定Redis監(jiān)聽端口,默認(rèn)端口為6379.

4.綁定的主機(jī)地址:bind 127.0.0.1

5.當(dāng)客戶端閑置多長時(shí)間后關(guān)閉連接,如果制定為0,表示關(guān)閉該功能。timeout 300。

6.指定日志記錄級別,Redis總共支持你四個(gè)級別debug、verbose、notice、warning、默認(rèn)是verbose:loglevel verbose。

7.設(shè)置數(shù)據(jù)庫的數(shù)量,默認(rèn)數(shù)據(jù)庫為0,可以使用SELECT 命令在連接上指定數(shù)據(jù)庫id:databases 16。

8.指定在多長時(shí)間內(nèi),有多少次更新數(shù)據(jù),就將數(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è)更改。

9.指定本地?cái)?shù)據(jù)文件名,默認(rèn)值為dump.rdb:dbfilename dump.rdb

10.指定本地?cái)?shù)據(jù)庫存放目錄:dir ./

11.設(shè)置Redis連接密碼,如果配置了連接密碼,客戶端在連接Redis時(shí)需要通過AUTH 命令提供密碼,默認(rèn)關(guān)閉:requirepass 輸入密碼

12.登錄服務(wù)器的狀態(tài):info

1.5 Redis數(shù)據(jù)備份與恢復(fù)

備份原理和過程:緩存數(shù)據(jù)庫服務(wù)器 =>緩存數(shù)據(jù)存儲在內(nèi)存 =>數(shù)據(jù)庫存儲在磁盤上 =>執(zhí)行指令,都是在自動在內(nèi)存中增加數(shù)據(jù),數(shù)據(jù)備份到指定文件位置 => Redis SAVE 命令用于創(chuàng)建當(dāng)前數(shù)據(jù)庫的備份。

save:立即存儲快照(內(nèi)存數(shù)據(jù)保存到磁盤中)

bgsave:后臺立即存儲快照(內(nèi)存數(shù)據(jù)保存到磁盤中)

1.6 Redis事務(wù)處理

Redis的事務(wù)處理比較簡單。只能保證client發(fā)起的事務(wù)中的命令可以連續(xù)的執(zhí)行,而且不會插入其他的client命令,當(dāng)一個(gè)client在連接中發(fā)出multi命令時(shí),這個(gè)連接就進(jìn)入一個(gè)事務(wù)的上下文,該連接后續(xù)的命令不會執(zhí)行,而是存放到一個(gè)隊(duì)列中,當(dāng)執(zhí)行exec命令時(shí),redis會順序的執(zhí)行隊(duì)列中的所有命令。如果其中執(zhí)行出現(xiàn)錯(cuò)誤,執(zhí)行正確的不會回滾,不同于關(guān)系型數(shù)據(jù)庫的事務(wù)。

1.MULTI標(biāo)記一個(gè)事務(wù)塊的開始(開啟)。

2.EXEC執(zhí)行所以事務(wù)塊內(nèi)的命令。

127.0.0.1:6379> multi
Ok
127.0.0.1:6379> set user ak
QUEUED
127.0.0.1:6379> set school Tsinghua
QUEUED
127.0.0.1:6379> set Class Pking
QUEUED
127.0.0.1:6379> exec
OK
OK
OK

3.DISCARD取消事務(wù),放棄執(zhí)行事務(wù)塊內(nèi)的所以命令。

127.0.0.1:6379> multi
Ok
127.0.0.1:6379> set user ak
QUEUED
127.0.0.1:6379> set school Tsinghua
QUEUED
127.0.0.1:6379> discard
OK
127.0.0.1:6379> get user
(nil)

4.WATCH key [key ...]監(jiān)視一個(gè)(或多個(gè))key,如果在事務(wù)執(zhí)行之前這個(gè)(或這些)key被其他命令所改動,那么事務(wù)將被打斷。

127.0.0.1:6379> watch user
Ok
127.0.0.1:6379> watch school
ok

5.UNWATCH取消WATCH命令對所有key的監(jiān)視。

1.7 Redis安全連接命令

1.設(shè)置在客戶端連接是需要指定的密碼(由于redis速度相當(dāng)?shù)目?,一秒鐘可?50K次的密碼嘗試,所以需要設(shè)置一個(gè)密碼強(qiáng)度很大的密碼)。

設(shè)置密碼的方式有兩種:

(1) 使用config set 命令的requirepass 參數(shù),具體格式為config set requirepass “password”。 (2) 配置redis.conf 中設(shè)置requirepass屬性,后面為密碼。

輸入認(rèn)證的方式也有兩種:

(1) 登錄時(shí)可以 redis-cli -a password

(2)登錄后使用 auth password

//1.設(shè)置密碼:首先需要進(jìn)入Redis的安裝目錄,然后修改配置文件redis.conf。根據(jù)grep命令的結(jié)果,使用vi編輯器修改“# requirepass foobared” 為“requirepass aklman”,然后保存退出。
$ grep -n requirepass /etc/redis.conf
$ sudo vim /etc/redis.conf

//2.重啟redis-server與redis-cli:
$ sudo service redis-server restart
$ redis-cli
> info
//沒有權(quán)限提示
> auth aklman
> info
//成功查詢數(shù)據(jù)
> exit
//結(jié)果表明第一次info命令失敗,在auth認(rèn)證之后info命令正常返回。最后退出redis-cli。
//或者這樣登錄:
$ redis-cli -a aklman
> info

2.ECHO message:打印字符串

3.PING:查看服務(wù)是否運(yùn)行

4.QUIT:關(guān)閉當(dāng)前連接

5.SELECT index:切換到指定的數(shù)據(jù)庫

1.8 Redis數(shù)據(jù)持久化aof(Append Only File)

Redis是一個(gè)支持持久化的內(nèi)存數(shù)據(jù)庫,Redis需要經(jīng)常將內(nèi)存中的數(shù)據(jù)同步到磁盤來保證持久化。

Redis支持兩種持久化方式:

1、snapshottingRDB(快照),將數(shù)據(jù)存放到文件里,默認(rèn)方式。也就是把內(nèi)存中的內(nèi)容,壓縮之后,直接存儲到硬盤中,這種方式在啟動的時(shí)候,加載速度非常的快!

是將內(nèi)存中的數(shù)據(jù)已快照的方式寫入到二進(jìn)制文件中,默認(rèn)文件dump.rdb,可以通過配置設(shè)置自動做快照持久化的方式??膳渲肦edis在n秒內(nèi)如果超過m個(gè)key被修改就自動保存快照。

save   900   1   #900秒有1個(gè)keys改變,就會執(zhí)行持久化
save   300   10  #300秒有10個(gè)keys改變,就會執(zhí)行持久化,改成save 100 6更方便
save   60    10000 #60秒有1w個(gè)keys改變,就會執(zhí)行持久化

優(yōu)勢:

1.數(shù)據(jù)庫只包含一個(gè)文件,通過文件備份策略,定期配置,恢復(fù)系統(tǒng)災(zāi)難。

2.壓縮文件轉(zhuǎn)移到其他介質(zhì)上。

3.性能最大化,Redis開始持久化時(shí),分叉出進(jìn)程,由進(jìn)程完成持久化工作,避免服務(wù)器進(jìn)程執(zhí)行I/O操作,啟動效率高。

劣勢:

1.無法高可用:系統(tǒng)一定在定時(shí)持久化之前宕機(jī),數(shù)據(jù)還沒寫入,數(shù)據(jù)已經(jīng)丟失。

通過fock分叉進(jìn)程完成工作,數(shù)據(jù)集大的時(shí)候,服務(wù)器停止幾百毫秒甚至1秒。

總結(jié):

redis是一個(gè)內(nèi)存服務(wù)器,我們要操作的數(shù)據(jù)都存儲在內(nèi)存里面的。訪問速度是非常的快的,但是我們的數(shù)據(jù)想要存儲到硬盤,就要持久化。持久化的時(shí)候,就有持久化的機(jī)制,機(jī)制就有快照持久化;這種持久化是通過時(shí)間與key的改變來確定的。

默認(rèn)的配置是非常好的配置,說明被改變的值,在沒有持久化的時(shí)候,是在內(nèi)存里面的。這個(gè)時(shí)候如果服務(wù)器有異常,這些在內(nèi)存里面的值,都會被清空!如果服務(wù)器異常之后,再次啟動,我們就會從持久化的文件里面讀取數(shù)據(jù)到內(nèi)存,之前沒有持久化的數(shù)據(jù),就在也找不到了。

2、 Append-only file(縮寫為aof),將讀寫操作存放到文件中。

由于快照方式在一定間隔時(shí)間做一次,所以如果Redis意外down掉的話,就會丟失最后一次快照后的所有修改。

aof比快照方式有更好的持久化性,是由于使用aof時(shí),redis會將每一個(gè)收到的寫命令都通過write函數(shù)寫入到文件中當(dāng)redis啟動時(shí)會通過重新執(zhí)行文件中保存的寫命令來在內(nèi)存中重新建立整個(gè)數(shù)據(jù)庫的內(nèi)容。

由于os會在內(nèi)核中緩存write做的修改,所以可能不是立即寫到磁盤上,這樣aof方式的持久化也還是有可能會丟失一部分?jǐn)?shù)據(jù)??梢酝ㄟ^配置文件告訴redis我們想要通過fsync函數(shù)強(qiáng)制os寫入到磁盤的時(shí)機(jī)。

配置文件中的可配置參數(shù):

appendonly   yes     //啟用aof持久化方式
#appendfsync  always //收到寫命令就立即寫入磁盤,最慢,但是保證了數(shù)據(jù)的完整持久化
appendfsync   everysec  //每秒中寫入磁盤一次,在性能和持久化方面做了很好的折中
#appendfsync  no     //完全依賴os,性能最好,持久化沒有保證  

參數(shù)說明:

always :總是保存執(zhí)行的命令到我們的文件里面。任何一個(gè)的改變,都要保存到我們的文件里面。時(shí)時(shí)的寫文件,這個(gè)就會和IO相關(guān),我們的速度就會變慢。

everysec :每一秒中持久化一次。每一秒有多少改變都進(jìn)行持久化!就是把我們一秒之內(nèi)的寫操作,修改操作,寫進(jìn)我們的文件里面。

no :就是根據(jù)我們系統(tǒng)的IO來隨機(jī)操作。

每一秒中有600個(gè)key被改變,這個(gè)時(shí)候,如果有異常服務(wù)器掛了。我們就失去了600個(gè)KEY。

優(yōu)勢:

1.同步:

每秒同步:異步完成,效率高,一旦系統(tǒng)宕機(jī),修改的數(shù)據(jù)丟失;

每修改同步:同步持久化,每分鐘發(fā)生的變化記錄到磁盤中,效率低,安全;

不同步

2.日志寫入操作追加模式append:系統(tǒng)宕機(jī),不影響存在的內(nèi)容,寫入一半數(shù)據(jù),若系統(tǒng)崩潰,下次啟動redis,redis-check-aof工具解決數(shù)據(jù)一致性。

3.如果日志過大,自動重寫機(jī)制,修改的數(shù)據(jù)寫入到到磁盤文件,創(chuàng)建新文件,記錄產(chǎn)生的修改命令,重寫切換時(shí),保證數(shù)據(jù)安全。

4.格式清晰的日志文件,完成數(shù)據(jù)的重建

劣勢:

對于相同數(shù)據(jù)文件,相比RDB,AOF文件較大

效率低

總結(jié):對比兩個(gè)持久化

快照持久化是把內(nèi)存中的數(shù)據(jù),壓縮之后,直接存儲到硬盤里面的。啟動服務(wù)器的時(shí)候,直接拷貝到內(nèi)存就可以直接使用了。

AOF持久化是把我們的操作語句存儲到文件里面,啟動服務(wù)器的時(shí)候,會執(zhí)行這些語句,寫在我們的內(nèi)存里面。寫操作會慢于拷貝??!

AOF可以做到每一秒持久化一次;快照持久化是時(shí)間和key的改變來匹配的。

1.9 Redis的主從模式(讀寫分析模式)

Redis通過主從模式可以允許多個(gè)slave(副) server擁有和master(主) server相同的數(shù)據(jù)庫副本。從服務(wù)器只能讀,不能寫。

1.Redis Replication的工作原理:

Slave與master建立連接,發(fā)送sync同步命令。

Master會啟動一個(gè)后臺進(jìn)程,將數(shù)據(jù)庫快照保存到文件中,同時(shí)Master主進(jìn)程會開始收集新的寫命令并緩存。

后臺完成保存后,就將此文件發(fā)送給Slave。

Slave將此文件保存到磁盤上。

原理解讀:
在Slave啟動并連接到Master之后,它將主動發(fā)送一個(gè)SYNC命令。此后Master將啟動后臺存盤進(jìn)程,同時(shí)收集所有接收到的用于修改數(shù)據(jù)集的命令,在后臺進(jìn)程執(zhí)行完畢后,Master將傳送整個(gè)數(shù)據(jù)庫文件到Slave,以完成一次完全同步。而Slave服務(wù)器在接收到數(shù)據(jù)庫文件數(shù)據(jù)之后將其存盤并加載到內(nèi)存中。此后,Master繼續(xù)將所有已經(jīng)收集到的修改命令,和新的修改命令依次傳送給Slaves,Slave將在本次執(zhí)行這些數(shù)據(jù)修改命令,從而達(dá)到最終的數(shù)據(jù)同步。

如果Master和Slave之間的鏈接出現(xiàn)斷連現(xiàn)象,Slave可以自動重連Master,但是在連接成功之后,一次完全同步將被自動執(zhí)行。

總結(jié):

當(dāng)從服務(wù)器連接上主服務(wù)器時(shí)候,我們的主服務(wù)器就會把數(shù)據(jù)發(fā)送給從服務(wù)器,這些數(shù)據(jù)都是二進(jìn)制,第一次連接的時(shí)候,是全量拷貝。

之后主服務(wù)器有任何數(shù)據(jù)的修改,都會發(fā)送給從服務(wù)器,現(xiàn)在發(fā)送都是修改的數(shù)據(jù),就叫增量拷貝。

只要主從之間斷開過,再次連接,就會實(shí)現(xiàn)一次全量拷貝。

2.Redis Replication的特點(diǎn):

1.同一個(gè)Master可以同步多個(gè)Slaves。

2.多個(gè)slave可以連接同一個(gè)master外,還可以連接到其他的slave(當(dāng)master重啟后,相連的slave轉(zhuǎn)變?yōu)閙aster)。

3.Slave同樣可以接受其它Slaves的連接和同步請求,這樣可以有效的分載Master的同步壓力。因此我們可以將Redis的Replication架構(gòu)視為圖結(jié)構(gòu)。

4.Master Server是以非阻塞的方式為Slaves提供服務(wù)。所以在Master-Slave同步期間,客戶端仍然可以提交查詢或修改請求。

5.Slave Server同樣是以非阻塞的方式完成數(shù)據(jù)同步。在同步期間,如果有客戶端提交查詢請求,Redis則返回同步之前的數(shù)據(jù)。

6.為了分載Master的讀操作壓力,Slave服務(wù)器可以為客戶端提供只讀操作的服務(wù),寫服務(wù)仍然必須由Master來完成。即便如此,系統(tǒng)的伸縮性還是得到了很大的提高(提高了系統(tǒng)的可伸縮性。)。

7.Master可以將數(shù)據(jù)保存操作交給Slaves完成,從而避免了在Master中要有獨(dú)立的進(jìn)程來完成此操作。

3.如何配置

最少有兩臺(及以上)服務(wù)器

主服務(wù)器,端口號:6379;pid文件配置好了;數(shù)據(jù)目錄也配置好了。

從服務(wù)器,端口號:6380;pid文件不能和主服務(wù)在一起;數(shù)據(jù)目錄不能和主服務(wù)器在一起。

也就是一句話把主服務(wù)器的配置文件拷貝一份到從服務(wù)器一份修改文件名及相應(yīng)配置參數(shù)。(slave.conf與主服務(wù)器的redis.conf一個(gè)目錄里面,端口號是6380,dir /sdata ,appendonly no,再啟動新服務(wù)器,檢驗(yàn)是否啟動成功,連接主服務(wù)器的IP地址和端口號 slaveod 127.0.0.1 6379,連接主服務(wù)器密碼 masterauth aklman,停止從服務(wù)器再啟動,驗(yàn)證)

總結(jié):在Redis的主從配置中,從服務(wù)器是一個(gè)只讀的設(shè)備。不能寫操作。

第二部分 Redis支持的常用數(shù)據(jù)類型 2.1 字符串(String)

設(shè)置一個(gè)值:set key value

set name aklman

獲取一個(gè)值:get key

get name

同時(shí)設(shè)置多個(gè)值:mset key1 value key2 value

同時(shí)獲取多個(gè)值:mget key1 key2

刪除值:del key

自增1(值必須是數(shù)字):incr key

自增指定的值:incrby key

incrby可以操作的最大范圍:有符號的2^64;而修改Memcache的最大范圍描述是無符號的2^64

超過Redis在整形最大范圍的時(shí)候,繼續(xù)自增會報(bào)錯(cuò);而Memcache在最大值時(shí)繼續(xù)增加會到0再繼續(xù)加。自減也同理,只是把增加數(shù)值設(shè)定負(fù)數(shù)即可。Memcache在最小值時(shí)繼續(xù)向下減依然是最小值。

Redis設(shè)置的數(shù)和增加的數(shù)值可以使用負(fù)數(shù),Memcache不能使用負(fù)數(shù)。增減與上同理。

2.2 散列表(Hash)

形式:key => array(field1=>value1,field2=>value2,field3=>value2);value1可以重復(fù),field不能重復(fù)。

設(shè)置值:hset key field value

hset user name aklman

獲取值:hget key field

hget user name

設(shè)定多個(gè)值:hmset key field1 value1 field2 value2

hmset student name aklman age 18 sex 1

獲取多個(gè)值(字段值的順序可以換):hmget key field1 field2 field3

hash表中設(shè)定的字段值是唯一的,如果之前有,就會覆蓋??!

獲取hash標(biāo)的field和value(獲取所以字段及相應(yīng)值):hgetall key

獲取hash表里面的field:hkeys key

獲取hash表里面的value的個(gè)數(shù):hlen key

刪除hash表里面的field值:hdel key field1 field2

注意:hash表中的操作,必須使用hash的方法來操作,字符串的操作就用字符串的方式,不能混著用。

2.3 列表(List)

列表:雙向列表,隊(duì)列,堆棧;里面的值是可以重復(fù)的。

雙向列表:一邊可以進(jìn)出,另一邊也可以進(jìn)出

隊(duì)列:只能一邊進(jìn)入,另一邊彈出,先進(jìn)先出

堆棧:只有一個(gè)口,口先進(jìn)先出

1.雙向列表:

給一個(gè)列表從左(右)邊添加內(nèi)容:lpush(rpush) Listname value1 value2 value3

查看list的內(nèi)容:lrange Listname 起始位置(0或者其他) 結(jié)束位置(-1表示最后面)

從左(右)邊彈出一個(gè)值:lpop(rpop) Listname

查看列表的長度:llen Listname

2.隊(duì)列:

給一個(gè)列表從左邊添加內(nèi)容:lpushListname value1 value2 value3

從左邊彈出一個(gè)值:lpop Listname

給一個(gè)列表從右邊添加內(nèi)容:rpush Listname value1 value2 value3

從右邊彈出一個(gè)值:rpop Listname

3.堆棧

給一個(gè)列表從左邊添加內(nèi)容:lpushListname value1 value2 value3

從左邊彈出一個(gè)值:lpop Listname

給一個(gè)列表從右邊添加內(nèi)容:rpush Listname value1 value2 value3

從右邊彈出一個(gè)值:rpop Listname

2.4 集合(Set)

添加數(shù)據(jù):sadd set value1 value2 value3

添加完數(shù)據(jù)后再想添加數(shù)據(jù),可以再sadd setvalue4 value5 value3,發(fā)現(xiàn)直插入成功兩個(gè),因?yàn)榧喜辉试Svalues的值重復(fù)出現(xiàn)。

查看數(shù)據(jù):smembers set

隨機(jī)彈出:spop set

為什么集合里面的數(shù)據(jù)能隨機(jī)彈出?原因是集合中的數(shù)據(jù)是無序的,也就是無序集合有這個(gè)特性。

隨機(jī)彈出多個(gè)值:spop set n (n不能超過集合元素?cái)?shù))

查看長度:scard set

交集:sinter setA setB

交集就是它們的共同部分,與數(shù)學(xué)中學(xué)的一個(gè)樣

并集:sunion setA setB

重復(fù)的內(nèi)容只顯示一次。

差集:sdiff setA setB

redis里面的差集,是只顯示,第一個(gè)集合的內(nèi)容
2.5 有序集合(SortedSet)

添加數(shù)據(jù):zadd SortedSetKey number1 value1 number2 value2

查看長度:zcard SortedSetKey

查看有序集合里面的值:zrange SortedSetKey 起始位置 結(jié)束位置(-1表示最后的位置)

顯示有序集合排序的編號:zrange SortedSetKey 起始位置 結(jié)束位置(-1表示最后的位置) withscores

修改排序號:zincrby SortedSetKey n value1

把value1的排序號改成n(表示數(shù)字)

顯示倒序:zrevrange SortedSetKey 起始位置 結(jié)束位置(-1表示最后的位置)

顯示帶編號的倒序:zrevrange SortedSetKey 起始位置 結(jié)束位置(-1表示最后的位置) withscores

注意:

當(dāng)插入相同排的值時(shí)會覆蓋寫之前數(shù)據(jù)也就說會number一樣覆蓋value,value一樣覆蓋number。

無序集合與有序集合:里面的值都是唯一的,不可重復(fù)。當(dāng)寫入的值,里面已經(jīng)有的時(shí)候,就直接覆蓋??!

2.6 鍵(Key)

1.查看Redis里面有多少個(gè)key:keys *

一一列出來,星號是通配符,分左匹配和右匹配,左匹配列出指定字符開頭的key,右匹配列出指定字符結(jié)尾的key。

通配符很重要,用Redis的時(shí)候,肯定是數(shù)據(jù)兩特別大,此時(shí)要去測試數(shù)據(jù),有很多類型的測試數(shù)據(jù),都是只能使用一次,使用一次之后就要刪除的,假如這些數(shù)據(jù)都要存儲在Redis里面的,因此我們就要使用這種操作來刪除不需要的數(shù)據(jù)。反復(fù)此時(shí),測試玩刪除數(shù)據(jù)之后再測試。

2.幾條常用命令:

//在命令行直接運(yùn)行命令
redis-cli keys "*"
//在命令行刪除內(nèi)容,指定刪除的key
redis-cli del "test"
//結(jié)合兩個(gè)命令實(shí)現(xiàn)搜索并且刪除key,這樣寫會報(bào)錯(cuò),因?yàn)閗eys在執(zhí)行完成之后,一次性把文檔里面拿給了del,此時(shí),del就認(rèn)為你文檔里面的值,是一個(gè)值,要刪除就會報(bào)錯(cuò)。
redis-cli keys "*" | redis-cli del
//解決方式如下,xargs的含義是:當(dāng)左邊命令結(jié)果通過管道的時(shí)候,只要有xargs參數(shù),它就是告訴左邊的命令,你執(zhí)行一條結(jié)果,就給我一條結(jié)果。左邊在執(zhí)行的時(shí)候,執(zhí)行一個(gè)結(jié)果,就立即傳給我們右邊去執(zhí)行
redis-cli keys "*t" |xargs redis-cli del

思考問題:

1.當(dāng)我們左邊的查詢內(nèi)容是10G的時(shí)候,它要傳給右邊,需要的內(nèi)存多少?

占用內(nèi)存20G,因?yàn)槭褂昧藊args參數(shù),就是執(zhí)行完一個(gè)結(jié)構(gòu)就傳給右邊,一個(gè)結(jié)構(gòu)可以占10K,傳給右邊也是10K,加起來就是20K。

2.在結(jié)合find的使用

當(dāng)數(shù)據(jù)左邊查詢(操作)的數(shù)據(jù)量大的時(shí)候,一定使用xargs命令

find /toot/ -name "*php" | xargs ls -l

3.判斷key是否存在:exists key

在Redis服務(wù)器里面使用

4.設(shè)置過期時(shí)間:expire key 20

比如,expire sex 10,時(shí)間到了就過期,過期了get sex得不到值

5.查看過期時(shí)間:ttl key

6.查看key的類型:type key

7.選擇庫:select 2

默認(rèn)有16個(gè)庫,索引是從0開始的,到15結(jié)束,默認(rèn)庫是0.

每一個(gè)庫的數(shù)據(jù)都是互相獨(dú)立的。

8.是在redis的客戶端去ping我們r(jià)edis的服務(wù)端:ping hello

回hello,也就是發(fā)什么給服務(wù)器,服務(wù)器如果在線都會回復(fù)你什么。如果沒有在線,那就回復(fù)不了。只發(fā)ping回pong

9.清空當(dāng)前庫:flushdb

這個(gè)命令一般都不會使用,萬一刪了別人的數(shù)據(jù)就不好。

10.清空索引的庫:flushall

11.Redis的key命名規(guī)范

給key進(jìn)行設(shè)置的時(shí)候,一定使用:來作為分隔符。

在項(xiàng)目中,應(yīng)該給每一個(gè)項(xiàng)目都設(shè)置多帶帶的前綴來區(qū)分不同的項(xiàng)目。如,k122009,hedu2009

Redis是有密碼驗(yàn)證功能的,可以在服務(wù)器端開啟密碼驗(yàn)證,登錄的時(shí)候,就要輸入密碼,auth:密碼。而Memcache服務(wù)器是沒有密碼驗(yàn)證功能的。密碼在redis.conf中設(shè)置,設(shè)置玩重啟redis(ps -ef | grep redis)。

kill pid號:默認(rèn)是使用-15參數(shù)。就是我們的通知我們主進(jìn)程,關(guān)閉系統(tǒng)。主進(jìn)程會回收它的資源,然后進(jìn)行關(guān)閉。-9 參數(shù):就是我們強(qiáng)制性把程序關(guān)閉。

第三部分 總結(jié)和擴(kuò)展 3.1 Redis其他令總結(jié)

1.EXISTS and DEL

EXISTS key 判斷一個(gè)key是否存在;存在返回 1;否則返回0; DEL key 刪除某個(gè)key,或是一系列key;

DEL key1 key2 key3 key4。成功返回1,失敗返回0(key值不存在)。

2.TYPE and KEYS

TYPE key:返回某個(gè)key元素的數(shù)據(jù)類型 ( none:不存在,string:字符,list,set,zset,hash),key不存在返回空。

KEYS key—pattern :返回匹配的key列表 (KEYS foo*:查找foo開頭的keys)

3.RANDOMKEY and CLEAR

RANDOMKEY : 隨機(jī)獲得一個(gè)已經(jīng)存在的key,如果當(dāng)前數(shù)據(jù)庫為空,則返回空字符串。

CLEAR :清除界面。

4.RENAME and RENAMENX

RENAME oldname newname:改key的名字,新鍵如果存在將被覆蓋 。

RENAMENX oldname newname:更改key的名字,如果newname存在,則更新失敗;

5.DBSIZE

DBSIZE :返回當(dāng)前數(shù)據(jù)庫的key的總數(shù)

6.CONFIG GET and CONFIG SET

CONFIG GET:用來讀取運(yùn)行Redis服務(wù)器的配置參數(shù)。

CONFIG SET:用于更改運(yùn)行Redis服務(wù)器的配置參數(shù)。

AUTH : 認(rèn)證密碼

7.CONFIG RESETSTAT

CONFIG RESETSTAT:重置數(shù)據(jù)統(tǒng)計(jì)報(bào)告,通常返回值為"OK"

3.2 PHP操作Redis基本操作

PHP操作Redis:使用我們的php客戶端(redis擴(kuò)展)連接到redis服務(wù)器

connect("127.0.0.1",6379);
    
    $redis->auth("aklman");
    $redis->set("DomainServer","Aklman.com");

就可以在Redis從服務(wù)器中看到這條信息了。

3.3 INFO 查詢信息解讀

INFO [section] :查詢Redis相關(guān)信息。 INFO命令可以查詢Redis幾乎所有的信息,其命令選項(xiàng)有如下:

server: Redis server的常規(guī)信息

clients: Client的連接選項(xiàng)

memory: 存儲占用相關(guān)信息

persistence: RDB and AOF 相關(guān)信息

stats: 常規(guī)統(tǒng)計(jì)

replication: Master/slave請求信息

cpu: CPU 占用信息統(tǒng)計(jì)

cluster: Redis 集群信息

keyspace: 數(shù)據(jù)庫信息統(tǒng)計(jì)

all: 返回所有信息

default: 返回常規(guī)設(shè)置信息

標(biāo)注

[1] 持久化是指存儲到磁盤,服務(wù)器重啟后還可以存在。而存儲到內(nèi)存中的數(shù)據(jù),一重啟服務(wù)器就不存在。

參考資料

Redis實(shí)戰(zhàn)
Aklman的讀書筆記

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/61977.html

相關(guān)文章

  • Redis實(shí)戰(zhàn)回顧

    摘要:取消命令對所有的監(jiān)視。或者這樣登錄打印字符串查看服務(wù)是否運(yùn)行關(guān)閉當(dāng)前連接切換到指定的數(shù)據(jù)庫數(shù)據(jù)持久化是一個(gè)支持持久化的內(nèi)存數(shù)據(jù)庫,需要經(jīng)常將內(nèi)存中的數(shù)據(jù)同步到磁盤來保證持久化。 前言 Remote Dictionary Server(遠(yuǎn)程數(shù)據(jù)的服務(wù)),是一種NoSQL技術(shù),是一個(gè)基于key-value的高速緩存系統(tǒng),是目前應(yīng)用面最廣的緩存系統(tǒng)之一。 Redis實(shí)戰(zhàn) 第一部分 基本概念和...

    fireflow 評論0 收藏0
  • Redis實(shí)戰(zhàn)回顧

    摘要:取消命令對所有的監(jiān)視?;蛘哌@樣登錄打印字符串查看服務(wù)是否運(yùn)行關(guān)閉當(dāng)前連接切換到指定的數(shù)據(jù)庫數(shù)據(jù)持久化是一個(gè)支持持久化的內(nèi)存數(shù)據(jù)庫,需要經(jīng)常將內(nèi)存中的數(shù)據(jù)同步到磁盤來保證持久化。 前言 Remote Dictionary Server(遠(yuǎn)程數(shù)據(jù)的服務(wù)),是一種NoSQL技術(shù),是一個(gè)基于key-value的高速緩存系統(tǒng),是目前應(yīng)用面最廣的緩存系統(tǒng)之一。 Redis實(shí)戰(zhàn) 第一部分 基本概念和...

    Vicky 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<