【Redis系列】Redis概要及其數據類型

Redis概要

Redis是一個開源的使用ANSI C語言編寫、支持網絡、可基於內存亦可持久化的日誌型、Key-Value數據庫,並提供多種語言的API。從2010年3月15日起,Redis的開發工作由VMware主持。從2013年5月開始,Redis的開發由Pivotal贊助。
官網上給出的解釋是:

Redis is an open source (BSD licensed), in-memory data structure
store, used as database, cache and message broker. It supports data
structures such as strings, hashes, lists, sets, sorted sets with
range queries, bitmaps, hyperloglogs and geospatial indexes with
radius queries. Redis has built-in replication, Lua scripting, LRU
eviction, transactions and different levels of on-disk persistence,
and provides high availability via Redis Sentinel and automatic
partitioning with Redis Cluster.

也就是說,它是一個開源的,在內存中通過數據結構存儲,作爲數據庫緩存,和消息代理。

Redis是一個開源(BSD許可),在內存中數據結構存儲,作爲數據庫,緩存和消息代理。它支持數據結構如字符串,哈希,列表,集合(無序),有序集合。使用內置的複製,Lua腳本等和不同層次的磁盤上的持久性,並提供高可用性通過redis sentinel 和自動劃分Redis集羣。

其中,Redis-Sentinel是Redis官方推薦的高可用性(HA)解決方案,當用Redis做Master-slave的高可用方案時,假如master宕機了,Redis本身(包括它的很多客戶端)都沒有實現自動進行主備切換,而Redis-sentinel本身也是一個獨立運行的進程,它能監控多個master-slave集羣,發現master宕機後能進行自動切換。

關鍵詞:數據類型,緩存,消息代理,持久化,集羣。本篇聊一聊第一個關鍵詞。

數據類型

結構

redis是通過鍵來訪問數據的。它是一個key-value類型的NoSQL數據庫。支持五種key-value數據類型。今天做一個梳理,除了一些常用的命令之外,其他的日後忘記了就回來查一下就可以了。

這裏寫圖片描述

命令

我將數據的類型命令操作按照其實現的功能進行了分類。如下圖。
這裏寫圖片描述

其具體的使用方法解釋有一個API。數據類型API

使用場景:

1.String類型:

String 數據結構是簡單的 key-value 類型,value 不僅可以是 String,也可以是數字(當數字類型用 Long 可以表示的時候encoding 就是整型,其他都存儲在 sdshdr 當做字符串)。使用 Strings 類型,可以完全實現目前 Memcached 的功能,並且效率更高。還可以享受 Redis 的定時持久化(可以選擇 RDB 模式或者 AOF 模式),操作日誌及 Replication 等功能。

2.Hash——字典

存儲、讀取、修改用戶屬性。

在 Memcached 中,我們經常將一些結構化的信息打包成 hashmap,在客戶端序列化後存儲爲一個字符串的值(一般是 JSON 格式),比如用戶的暱稱、年齡、性別、積分等。這時候在需要修改其中某一項時,通常需要將字符串(JSON)取出來,然後進行反序列化,修改某一項的值,再序列化成字符串(JSON)存儲回去。簡單修改一個屬性就幹這麼多事情,消耗必定是很大的,也不適用於一些可能併發操作的場合(比如兩個併發的操作都需要修改積分)。而 Redis 的 Hash 結構可以使你像在數據庫中 Update 一個屬性一樣只修改某一項屬性值。

3.List——列表

最新消息排行
消息隊列

List 既可以做隊列,也可以做棧。使用 List 結構,我們可以輕鬆地實現最新消息排行等功能(比如新浪微博的 TimeLine )。List 的另一個應用就是消息隊列,可以利用 List 的 *PUSH 操作,將任務存在 List 中,然後工作線程再用 POP 操作將任務取出進行執行。Redis 還提供了操作 List 中某一段元素的 API,你可以直接查詢,刪除 List 中某一段的元素。

4.Set——集合

共同好友、二度好友
利用唯一性,可以統計訪問網站的所有獨立 IP
好友推薦的時候,根據 tag 求交集,大於某個 threshold 就可以推薦


Set 就是一個集合,集合的概念就是一堆不重複值的組合。利用 Redis 提供的 Set 數據結構,可以存儲一些集合性的數據。比如在微博應用中,可以將一個用戶所有的關注人存在一個集合中,將其所有粉絲存在一個集合。因爲 Redis 非常人性化的爲集合提供了求交集、並集、差集等操作,那麼就可以非常方便的實現如共同關注、共同喜好、二度好友等功能,對上面的所有集合操作,你還可以使用不同的命令選擇將結果返回給客戶端還是存集到一個新的集合中。

5.Sorted Set——有序集合

帶有權重的元素,比如一個遊戲的用戶得分排行榜
比較複雜的數據結構

和Sets相比,Sorted Sets是將 Set 中的元素增加了一個權重參數 score,使得集合中的元素能夠按 score 進行有序排列,比如一個存儲全班同學成績的 Sorted Sets,其集合 value 可以是同學的學號,而 score 就可以是其考試得分,這樣在數據插入集合的時候,就已經進行了天然的排序。另外還可以用 Sorted Sets 來做帶權重的隊列,比如普通消息的 score 爲1,重要消息的 score 爲2,然後工作線程可以選擇按 score 的倒序來獲取工作任務。讓重要的任務優先執行。

總結:

本篇博客我們簡單介紹了一下redis。並着重介紹了redis的第一個關鍵字 數據類型。主要介紹了其命令和使用場景。後續會繼續推出redis相關的博客,敬請持續關注。

發佈了199 篇原創文章 · 獲贊 122 · 訪問量 38萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章