當前位置:編程學習大全網 - 源碼下載 - redis 放入的值何時會沒有

redis 放入的值何時會沒有

Redis是壹個開源的使用ANSI C語言編寫、支持網絡、可基於內存亦可持久化的日誌型、Key-Value數據庫,並提供多種語言的API。從2010年3月15日起,Redis的開發工作由VMware主持。

Redis能運行在大多數POSIX(Linux, *BSD, OS X 和Solaris等)系統上,官方沒有支持Windows的版本。目前最新的版本是2.2.11,這個版本主要是修復了壹個2.2.7版本中遍歷方式優化帶來的壹個bug。

和普通的Key-Value結構不同,Redis的Key支持靈活的數據結構,除了strings,還有hashes、lists、 sets 和sorted sets等結構。正是這些靈活的數據結構,豐富了Redis的應用場景,能滿足更多業務上的靈活存儲需求。

Redis的數據都保存在內存中,而且底層實現上是自己寫了epoll event loop部分,而沒有采用開源的libevent等通用框架,所以讀寫效率很高。為了實現數據的持久化,Redis支持定期刷新(可通過配置實現)或寫日誌的方式來保存數據到磁盤。

1、數據類型

作為Key-value型數據庫,Redis也提供了鍵(Key)和鍵值(Value)的映射關系。但是,除了常規的數值或字符串,Redis的鍵值還可以是以下形式之壹:

●Lists (列表)

●Sets (集合)

●Sorted sets (有序集合)

●Hashes (哈希表)

鍵值的數據類型決定了該鍵值支持的操作。Redis支持諸如列表、集合或有序集合的交集、並集、查集等高級原子操作;同時,如果鍵值的類型是普通數字,Redis則提供自增等原子操作。

2、持久化

通常,Redis將數據存儲於內存中,或被配置為使用虛擬內存。通過兩種方式可以實現數據持久化:使用截圖的方式,將內存中的數據不斷寫入磁盤;或使用類似MySQL的日誌方式,記錄每次更新的日誌。前者性能較高,但是可能會引起壹定程度的數據丟失;後者相反。

3、主從同步

Redis支持將數據同步到多臺從庫上,這種特性對提高讀取性能非常有益。

4、性能

相比需要依賴磁盤記錄每個更新的數據庫,基於內存的特性無疑給Redis帶來了非常優秀的性能。讀寫操作之間有顯著的性能差異。

5、提供API的語言

●C

●C++

●C#

●Clojure

●Common Lisp

●Erlang

●Haskell

●Java

●Javascript

●Lua

●Objective-C

●Perl

●PHP

●Python

●Ruby

●Scala

●Go

●Tcl

6、適用場合

毫無疑問,Redis開創了壹種新的數據存儲思路,使用Redis,我們不用在面對功能單調的數據庫時,把精力放在如何把大象放進冰箱這樣的問題上,而是利用Redis靈活多變的數據結構和數據操作,為不同的大象構建不同的冰箱。希望妳喜歡這個比喻。

下面是Redis適用的壹些場景:

(1)、取最新N個數據的操作

比如典型的取妳網站的最新文章,通過下面方式,我們可以將最新的5000條評論的ID放在Redis的List集合中,並將超出集合部分從數據庫獲取。

使用LPUSH latest.comments命令,向list集合中插入數據

插入完成後再用LTRIM latest.comments 0 5000命令使其永遠只保存最近5000個ID

然後我們在客戶端獲取某壹頁評論時可以用下面的邏輯

FUNCTION get_latest_comments(start,num_items):

id_list = redis.lrange("latest.comments",start,start+num_items-1)

IF id_list.length < num_items

id_list = SQL_DB("SELECT ... ORDER BY time LIMIT ...")

END

RETURN id_list

END

如果妳還有不同的篩選維度,比如某個分類的最新N條,那麽妳可以再建壹個按此分類的List,只存ID的話,Redis是非常高效的。

  • 上一篇:人工智能源代碼架構
  • 下一篇:Nmap源代碼
  • copyright 2024編程學習大全網