## Redis是使用C語言編寫的基於記憶體且支援持久化的、高效能的key-value的noSQL資料庫,主要儲存存取量較大、更改頻繁、安全性要求不高的資料。
非關係型資料庫。關係型資料庫是基於關係模型建立的資料庫,關係模型體現的是現實世界中實體間的關聯關係。
BSD開源協定是一個給予用戶極大自由的協議,使用者可以修改源碼,發布修改後的代碼。
支援與保障分散式應用程式間同步或非同步收發訊息的中間件。
為了有效地控制訊息的收發過程而在訊息中介軟體中內建的儲存訊息的資料結構,採用隊列,先進先出。
Service-Oriented Architecture,服務導向的架構,將應用程式分為若干個粗粒度、鬆散耦合的應用模組,再透過中立的介面將這些模組連結起來。
key01::key02:多層,相鄰層用:隔開
redis-server.exe redis-windows-conf:啟動伺服器。
redis-cli.exe -h 127.0.0.1 -p 6379:透過IP與連接埠連接某個redis服務。
keys *:查看目前資料庫中所有的key。
config get *:取得全部設定資訊。
help command:檢視操作意義。
help @string:查看string全部操作。
rename key01 key02:為key重新命名。
type key:取得資料型態。
del key:刪除key。
flushdb:清空目前資料庫。
flushall:清空所有資料庫。
set key value:賦值。
mset key01 value01 key02 value02:為多個鍵賦值,具有原子性,同時成功,同時失敗。
set key value nx:只有在鍵不存在時才可以設定。
set key value xx:只有在鍵存在時才可以設定。
set key value ex seonds:設定鍵的逾時。
getset key value:先取值,然後再賦值。
# del key:刪除key。
# incr key:增1。
incrby key increment:增加指定的量。
incrbyfloat key increment:增float型資料指定的量。
decr key:減1。
decrby key decrement:減去指定的量。
# get key:取值。
strlen key:取得字串長度。
exists key:存在回傳1,不存在回傳0.
從尾開始,索引從-1開始,-2. -3... setrange key index value:從index位置開始替換。 getrange key begin end:取得指定索引區間的值。 getrange key 0 -1:取得全部。 # 1.LinkedList,雙向鍊錶,查詢效率低,增刪效率高。 LPUSH key value01 value02:從左邊壓入元素。 RPUSH key value02 value02:從右側壓入元素。 LPOP KEY:從左邊彈出一個元素,相當於從list中刪除該元素。 RPOP KEY:從右邊彈出一個元素。 ltrim key start end :刪除指定範圍外的元素。 lrem key count value:刪除鍊錶中值為value的元素count個。 count>0:從左邊開始刪除。 count<0:從右邊開始移除。 count=0:刪除全部。 LINSERT key before/after oldValue newValue:在指定元素前後插入元素,如果指定元素不存在,則不進行任何操作。 如果指定元素存在多個,只操作第一個元素。 RPOPLPUSH key01 key02:從key01右邊彈出一個元素壓入key02左邊。 llen key:長度即清單中元素個數。 由左至右,由0開始;由右至左,由-1開始。 LRANGE key start end:取得指定索引區間的元素。 LRANGE key 0 -1:取得完整元素。 LINDEX key index:取得指定索引位置的值。 LSET key index value:設定指定索引位置的值。 # key值空間儲存的不僅是key值,還有其他訊息,例如逾時時間,因此key佔用空間較大,應該減少key的數目,把相關資料存放到同一個key中,這樣就產生了資料型別hash,hash相當於HashMap。 在hash中,逾時時間長度只能設定在key上,無法設定在field上。 # hset key field value:為key中的一個欄位賦值。 hmset key field01 value01 field02 value02:同時為多個欄位賦值。 hdel key field:刪除key中指定欄位。 hincrby key filed increment:增加某個整數欄位。 hincrbyfloat field increment:增加某個浮點型欄位的值。 hget key field:取得key中指定欄位的值。 hmget key field01 field02 :取得多個欄位的值。 hgetall key:取得所有欄位及其對應的值。 hkeys key:取得所有欄位名稱。 kvals key:取得所有欄位的值。 hexists key field:判斷key中是否有指定欄位。 hlen key:取得key中欄位數目。 無序,不可重複。所謂無序就是不同時間查詢同一集合,同一排序處元素不同。 sadd key value01 vlaue02:新增元素。 srem key value01 value02:刪除元素。 spop key:隨機移除一個元素。 smembers key:取得全部元素 srandmember key:隨機回傳一個元素。 scard key:傳回元素個數。 sismember key value:判斷value是否存在。 交並集運算並不會刪除被操作集合中的元素。 sdiff key01 key02:求差集,從key01刪除key02具有的元素,只是一個動作,不會刪除key01中的元素。 sdiffstore destination key01 key02:將差集存入指定集合中。 suinon key01 key02:求並集合。 sninonstore destination key01 key02:將並集結果儲存到指定集合中。 sinter key01 key02:求交集。 sinterstore destination key01 key02:取得交集並儲存到指定集合中。 # 有順序集合,有順序的原因,每個元素都關聯一個分數,依分值排序。 zadd key score01 value01 score02 value02。 zrem key value:刪除指定元素。 zremrangebyrank key start end:刪除指定排序區間的元素。 zremrangebyscore key min max:刪除指定分數區間的元素。 zincrby key increment value:修改分數值。 zrank key value:取得排序,從小到大,從0開始。 zrevrank key value:取得排序,由大到小,從0開始。 zscore key value01:取得分數。 zcard key:取得集合中元素數目。 zrange key start end [withscores]:取得指定索引區間的值。 zrangebyscore key min max [limit offset count]:取得分數在指定區間的值,limit用於從指定偏移處截取count個資料。 min前可以加(表示開區間,只能載入min上。 zcount key min max:取得指定分數區間內元素個數。 ##destination:並集結果儲存的集合。 numKey:參與運算的集合數。 weights:權重,即分數參與運算的百分比,為每一個集合分別指定。 aggregate:整合策略。 zinterstore destination numKeys key[key...] weights weight aggregate max/min/sum:交集運算。 將資料保存到硬碟中的過程稱為持久化。 #RDB: Redis DB,將所有資料以二進位形式儲存到dump .rdb檔案中,預設為開啟。 AOF: AppendOnlyFile,將對資料庫的修改操作儲存到檔案中,預設為關閉。 #RDB持久化會產生一個dump.rdb文件,覆寫原有文件。 RDB方式 使用者發出save操作:阻塞伺服器。 使用者發出bgsave操作:後台執行,不會阻塞伺服器。原理是建立一個子執行緒用來產生持久化檔案。 在設定檔中配置,滿足指定條件自動持久化,這是常用方式。設定條件:save
#
五 LinkedList
2.增
3.刪除
4.改
5.查詢
6.索引
六hash
1.增
2.刪除
3.修改
4.查詢
七 set
1.增
2.刪除
3.查詢
4.交並集合運算
八sortedset
1.增
2.刪除
3.改
4.查詢
5.並收集
zunionstore destination numKeys key[key...] weights weight aggregate max/min/sum
九 Rdis持久化
# 1.什麼是持久化?
2.Redis持久化方式
3.RDB
RDB持久化方式每次都將資料庫中的全部資料保存到硬碟當中,耗費系統資源,不能頻繁執行,為了保證RDB間隔時間內資料的安全,可以並行使用AOF持久化方式。
⑴系統將記憶體中的資料寫入檔案的執行過程:先將資料寫入緩衝區,緩衝區滿後,再將緩衝區裡的內容寫入檔案。
⑵將資料庫的修改作業追加到檔案當中,先執行的操作在前面。
#always:每執行一個修改動作,都會立即寫入檔案。
everysec:每隔1秒,將修改操作寫入檔案一次,預設值。
no:由系統具體,緩衝區滿後再寫入檔案。
# 為了避免AOP檔案過大,可以重寫AOP文件,將會多個操作合併為一個操作。
重寫方式:
#第一種方式,BGREWRITEAOP:用來傳送此動作,重寫AOP檔案。
第二種方式,設定設定條件,滿足條件時自動重寫,以下是重寫條件:
auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb
當AOP檔案大小達到某個值時,重寫。
1.一個Redis服務可以有多個該服務的複製品,這個Redis服務叫做master服務,其他複製品叫做slave服務。
2.master服務會將自己的資料同步給slave服務。
3.master服務可以讀寫,slave服務只可以讀。
4.將一個服務設定為slave服務有兩種方式:
客戶發出slaveof masterip masterport 。
在設定檔中設定:slaveof masterip masterport。
5.可以在設定檔取消設定slave的動作,也可以在由客戶取消:slaveof no one
6.主從複製存在的問題
只有一個master伺服器執行寫入操作,如果master伺服器發生故障,寫入操作就無法執行。
為主伺服器設定一個監聽器,這個監聽器稱為哨兵,當主伺服器發生故障時,哨兵會自動將某一個從伺服器提升為#主伺服器,從而確保伺服器不間斷地執行。
1.在主從複製中,寫任務依然由一個節點承擔,寫壓力並沒有解決,因此產生了Twemproxy叢集機制,使用者向代理髮出請求,由代理將寫入任務指派到伺服器池中的節點。
伺服器集區中的每一個伺服器都有一個接收區間,客戶傳送請求到代理程式後,代理取得key的hashcode,該值落在哪個區間,就呼叫哪個伺服器。
一個中心對象,即代理,如果代理程式出現問題,整個Redis服務就無法使用,解決方式就是去中心化,使得某一部分出現故障,整體仍可運作。
多個Redis主伺服器構成一個集群,其中每個Redis主伺服器都叫做一個節點,節點之間相互通信,節點可以有自己#的從伺服器來分擔讀取的壓力。
每一個節點與其他全部節點通信,並充當sentinal角色監控其他節點的運作狀況,當某一個節點發生故障時其他多個節點綜合訊息,如果判斷該節點無法正常運作,提升該節點的一個從伺服器為節點。
1.在java中存取Redis伺服器,需要匯入架包jedis.jar。
2.Jedis是java語言中連接Redis伺服器的用戶端工具。
3.Jedis基本上保留了命令列存取Redis伺服器的方法。
4.正像連接關係型資料庫最好建立連接池一樣,連接Rdis資料庫也最好建立連接池,建立連接池時所使用的類別# JedisPoolConfig/JedisPool。
5.單一Redis伺服器壓力較大,因此可以建構Redis伺服器集群,建構集群使用時使用的類別HostAndPort/JedisCluster。
以上是java:Redis是做什麼的的詳細內容。更多資訊請關注PHP中文網其他相關文章!