Redis優(yōu)勢(shì):
1.性能極高– Redis能讀的速度是110000次/s,寫的速度是81000次/s 。
2.豐富的數(shù)據(jù)類型– Redis支持二進(jìn)制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 數(shù)據(jù)類型操作。
3.原子– Redis的所有操作都是原子性的,同時(shí)Redis還支持對(duì)幾個(gè)操作合并后的原子性執(zhí)行。(事務(wù))
4.豐富的特性– Redis還支持 publish/subscribe, 通知, key 過期等等特性。
安裝(我一般安裝在服務(wù)器):
源碼包下載鏈接:http://download.redis.io/releases/
安裝依賴:yum install gcc-c++
下載后解壓縮,make && make install即可
啟動(dòng):
可啟動(dòng)多個(gè)redis,復(fù)制配置文件,修改其端口即可
后臺(tái)進(jìn)程運(yùn)行:把配置文件中的daemonize no 為 yes
Eg:./src/redis-server?redis.conf
連接:
Eg:./src/redis-cli -h 指定ip -p 指定端口 -a 指定密碼
也可以用桌面工具連接:RedisDesktopManager
使用:
1.Redis自己安裝一般有十五個(gè)倉庫;
Eg:切換1倉庫 select 1;
[if !supportLists]2.?[endif]redis有五種類型:字符串,集合,有序集合,哈希,列表
字符串:?key-value?
集合:是String 類型的無序集合。集合成員是唯一的,這就意味著集合中不能出現(xiàn)重復(fù)的數(shù)據(jù)
有序集合:有序集合和集合一樣也是string類型元素的集合,且不允許重復(fù)的成員。
不同的是每個(gè)元素都會(huì)關(guān)聯(lián)一個(gè)double類型的分?jǐn)?shù)。redis正是通過分?jǐn)?shù)來為集合中的成員進(jìn)行從小到大的排序。
有序集合的成員是唯一的,但分?jǐn)?shù)(score)卻可以重復(fù)
哈希:是一個(gè)string類型的field和value的映射表,Redis 中每個(gè) hash 可以存儲(chǔ) 232?- 1 鍵值對(duì)(40多億)
列表:列表是簡(jiǎn)單的字符串列表,按照插入順序排序
Eg:
哈希值設(shè)置:HSET myhash field1 "foo"
哈希值獲?。篐GET myhash field1
具體每種類型的語法文檔描述的很清晰了:https://www.runoob.com/redis/redis-strings.html
[if !supportLists]3.?[endif]訂閱
發(fā)布訂閱(pub/sub)是一種消息通信模式:發(fā)送者(pub)發(fā)送消息,訂閱者(sub)接收消息
[if !supportLists]4.?[endif]事務(wù)
單個(gè)Redis 命令的執(zhí)行是原子性的,但 Redis 沒有在事務(wù)上增加任何維持原子性的機(jī)制,所以 Redis 事務(wù)的執(zhí)行并不是原子性的。
事務(wù)可以理解為一個(gè)打包的批量執(zhí)行腳本,但批量指令并非原子化的操作,中間某條指令的失敗不會(huì)導(dǎo)致前面已做指令的回滾,也不會(huì)造成后續(xù)的指令不做。
持久化:
Rdb(默認(rèn)):RDB持久化方式是通過快照(snapshotting)完成的,當(dāng)符合一定條件時(shí),redis會(huì)自動(dòng)將內(nèi)存中所有數(shù)據(jù)以二進(jìn)制方式生成一份副本并存儲(chǔ)在硬盤上。當(dāng)redis重啟時(shí),并且AOF持久化未開啟時(shí),redis會(huì)讀取RDB持久化生成的二進(jìn)制文件(默認(rèn)名稱dump.rdb,可通過設(shè)置dbfilename修改)進(jìn)行數(shù)據(jù)恢復(fù),對(duì)于持久化信息可以用過命令“info?Persistence”查看
優(yōu)點(diǎn):
1.RDB?是一個(gè)非常緊湊(compact)的文件,體積小,因此在傳輸速度上比較快,因此適合災(zāi)難恢復(fù)。
2.RDB?可以最大化?Redis?的性能:父進(jìn)程在保存?RDB?文件時(shí)唯一要做的就是?fork?出一個(gè)子進(jìn)程,然后這個(gè)子進(jìn)程就會(huì)處理接下來的所有保存工作,父進(jìn)程無須執(zhí)行任何磁盤?I/O?操作。
3.RDB?在恢復(fù)大數(shù)據(jù)集時(shí)的速度比?AOF?的恢復(fù)速度要快。
缺點(diǎn):
1.RDB是一個(gè)快照過程,無法完整的保存所以數(shù)據(jù),尤其在數(shù)據(jù)量比較大時(shí)候,一旦出現(xiàn)故障丟失的數(shù)據(jù)將更多。
2.當(dāng)redis中數(shù)據(jù)集比較大時(shí)候,RDB由于RDB方式需要對(duì)數(shù)據(jù)進(jìn)行完成拷貝并生成快照文件,fork的子進(jìn)程會(huì)耗CPU,并且數(shù)據(jù)越大,RDB快照生成會(huì)越耗時(shí)。
3.RDB文件是特定的格式,閱讀性差,由于格式固定,可能存在不兼容情況。
Aof(默認(rèn)關(guān)閉):當(dāng)redis存儲(chǔ)非臨時(shí)數(shù)據(jù)時(shí),為了降低redis故障而引起的數(shù)據(jù)丟失,redis提供了AOF(Append Only File)持久化,從單詞意思講,將命令追加到文件。AOF可以將Redis執(zhí)行的每一條寫命令追加到磁盤文件(appendonly.aof)中,在redis啟動(dòng)時(shí)候優(yōu)先選擇從AOF文件恢復(fù)數(shù)據(jù)。由于每一次的寫操作,redis都會(huì)記錄到文件中,所以開啟AOF持久化會(huì)對(duì)性能有一定的影響,但是大部分情況下這個(gè)影響是可以接受的,我們可以使用讀寫速率高的硬盤提高AOF性能。與RDB持久化相比,AOF持久化數(shù)據(jù)丟失更少,其消耗內(nèi)存更少(RDB方式執(zhí)行bgsve會(huì)有內(nèi)存拷貝)。
優(yōu)點(diǎn):
1.數(shù)據(jù)更完整,秒級(jí)數(shù)據(jù)丟失(取決于設(shè)置fsync策略)。
2.兼容性較高,由于是基于redis通訊協(xié)議而形成的命令追加方式,無論何種版本的redis都兼容,再者aof文件是明文的,可閱讀性較好。
缺點(diǎn):
1.數(shù)據(jù)文件體積較大,即使有重寫機(jī)制,但是在相同的數(shù)據(jù)集情況下,AOF文件通常比RDB文件大。
2.相對(duì)RDB方式,AOF速度慢于RDB,并且在數(shù)據(jù)量大時(shí)候,恢復(fù)速度AOF速度也是慢于RDB。
3.由于頻繁地將命令同步到文件中,AOF持久化對(duì)性能的影響相對(duì)RDB較大,但是對(duì)于我們來說是可以接受的。
?