Redis零起點-探索Redis,學習Redis基礎用法,零起點redis

來源:互聯網
上載者:User

Redis零起點-探索Redis,學習Redis基礎用法,零起點redis

作者:Gigi Sayfan 時間:2018.8.28

廣告

Redis是一個在記憶體中的索引值資料庫,它是免費且開源的。它是用C語言實現的,運行速度非常快。Redis已經是一個成熟(現在是3.03版本)的產品了。它經曆了非常嚴酷的戰火的洗禮,給大大小小的使用者們使用了多年。Redis提供了非常好的文檔,以及供各種程式設計語言使用的使用者庫。
在本文中,我會帶領大家一起探索Redis,學習它的基本用法。

Redis有什麼特殊之處?

Redis的速度非常快。要使一個軟體運行速度快,最典型的方法就是關注每個細小的功能片,然後玩命地最佳化它。Redis則不同。它提供的豐富的進階特效能夠匹敵甚至超越大多數的索引值資料庫,但不影響速度。讓我們一起快速過一下Redis的特性:

  • 豐富的索引值類型:字串,字典(雜湊),集合,位元影像和hyperlogs
  • 對這些值的進階操作
  • 可選擇的持久性
  • 主-從式設定
  • 非同步複製
  • 監控哨兵、通過、自動故障處理
  • 事務
  • 發布、訂閱訊息
  • 自動回收最不常用的索引值
  • 自動回收逾時的索引值
  • 指令碼(使用Lua)
Redis的基礎用例

Redis可用於多種目的。它作為超快的分布式緩衝區非常棒。但是,它常被當作隊列(使用命令對一個list的條目作push和pop)使用,或者利用它的發布-訂閱系統實現事件路由器功能。Redis通過它的增量命令來計數。對於需要跟蹤最後一條item的用例,Redis提供了一個很好的替代方法,不再需要關聯式資料庫中過多的索引,而只是對項目保持一個修剪列表就可以了。

Redis實踐

讓我們進一步探索Redis。從這裡下載和安裝Redis。
linking…
如果你使用的是Mac OSX,我建議使用Homebrew來安裝。
然後讓我們啟動redis。在redis-server終端視窗,你會看見這個:
img…
還有一些可愛的ASCII藝術字。現在,在另一個終端視窗redis-cli。這裡少了一些色彩,你會看到這個:

~>redis-cli127.0.0.1:6379

不管怎樣,我們就要開始了。先存一些關鍵字和值到資料庫裡去吧。

簡單的值

這個例子是關於如何設定和擷取簡單的字串型值

127.0.0.1:6379> set k vOK127.0.0.1:6379> get k"v"127.0.0.1:6379> get no_such_key(nil)

哇!你已經掌握了Redis的80%了。這是一個非常簡單的快取。
那麼怎麼刪除關鍵字呢?沒問題。

127.0.0.1:6379> del k(integer) 1127.0.0.1:6379> del no_such_key(integer) 0

Redis會告訴有多少個關鍵字被刪除了。

計數

Redis能夠支援+1和+n兩種計數方式來改變鍵所對應的值。

127.0.0.1:6379> set counter 0OK127.0.0.1:6379> incr counter 1(integer) 1127.0.0.1:6379> incrby counter 3(integer) 4

“incrby”命令表示+n。因此,你想加多少都可以。redis還可以返回增加後計數器的值。
通過把n設定為負數,你也可以實現向下計數。

127.0.0.1:6379> incrby counter -2(integer) 2

計數器的操作是原子操作,這對多使用者環境來說很重要。

瀏覽關鍵字

如果你想知道哪些關鍵字是可用的,你可以使用命令”keys”結合模型匹配:

127.0.0.1:6379> set k1 1OK127.0.0.1:6379> set k2 2OK127.0.0.1:6379> keys k*1) "k1"2) "k2"
lists

redis不只是可以儲存簡單的字串和數字。讓我們來看一下list。lists是有序的item集合。你可以從lists尾部push或pop item。你可以查詢lists的長度,你可以擷取lists的片段。這裡有一個簡單的例子:

127.0.0.1:6379> lpush superheroes batman(integer) 1127.0.0.1:6379> lpush superheroes spiderman(integer) 2127.0.0.1:6379> llen superheroes(integer) 2127.0.0.1:6379> lrange superheroes 0 -11) "spiderman"2) "batman

“lrange”命令接收合始索引和最後索引。-1表示顯示到最後一條。第一個索引是0。輸出結果從1開始時不要覺得困惑。
更多例子:

127.0.0.1:6379> rpush superheroes "the incredible hulk" catwoman(integer) 4127.0.0.1:6379> rpop superheroes"catwoman"127.0.0.1:6379> lpop superheroes"spiderman"127.0.0.1:6379> lrange superheroes 0 -11) "batman"2) "the incredible hulk"

它對資料結構操作的介面非常完整,它能夠提供隨機訪問隊列lists(使用lrange),後進先出棧stack(使用lpush/lpop),先進先出隊列queue(使用lpush,rpop)或雙端隊列dequeue(對兩端的push/pop)。

sets
對於item的無序集合,常常會選擇sets。redis對於管理sets有著非常完整的命令:

127.0.0.1:6379> sadd primes 2 3 5 7 11 13 17 19(integer) 8127.0.0.1:6379> sadd integers_to_10 1 2 3 4 5 6 7 8 9 10(integer) 10

舉個例子,這裡有兩個sets。一個是不超過20的素數,另一個是1-10的整數。
現在,你可以做第一個測試—“sismember”命令:

127.0.0.1:6379> sismember primes 8(integer) 0127.0.0.1:6379> sismember primes 7(integer) 1

找到不超過10的素數,我們可以使用求交集命令

127.0.0.1:6379> sinter primes integers_to_101) "2"2) "3"3) "5"4) "7"

這個例子中我們很幸運,因為結果是排序的。但是通常情況下,sets是無序的,我們得到的結果可能是任意序列的。Redis也支援對sets排序,每個item對應一個分數,然後基於這個分數對sets排序。

總結
redis是一個多功能的資料庫,擁有豐富的進階特性。它還有一個相對較新的產品配件來擴充它的能力,使它能夠處理那些不能只在一個機器上處理的用例。那就花些時間學習並把它用到你的系統中吧。

作者簡介:
Gigi Sayfan是Aclima一個負責軟體架構的主管。Aclima是一個創業公司,負責設計和部署分布式感應器網路,提供進階別的環境意識。Gigi從事專業軟體開發20多年了,涉及領域廣泛,包括即時通訊、變形、晶片製造工藝控制、遊戲控制台和嵌入式多媒體應用、腦啟發機器學習、客戶瀏覽器開發、3D分布式遊戲平台的WEB服務和最近的物聯網感應器。它每天寫到產品中的程式設計語言包括C、C++、C#、Python、Java、Delphi、Javascript,甚至還有為作業系統(Windows3.11到windows7,Linux,Max OSX, 嵌入式Lynx和索尼遊戲機)所寫的Cobol和PowerBuilder。它的擅長的技術領域包括資料庫、底層網路、分布式系統、非傳統的使用者介面和通用的軟體開發生命週期。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.