Redis概述與Redis集羣(一)

Redis


  今天給你們分享的是Redis,若有不足之處,敬請指正,那麼什麼是Redis呢?redis

1、Redis簡介

1.1 Redis是什麼

  Redis是一個開源的,使用ANSI C 編寫,高性能的Key-Value的NoSQL數據庫數據庫

1.2 Redis特色

  1. 基於內存
  2. 可持久化數據
  3. 具備豐富的數據結構類型,適應非關係型數據的存儲需求
  4. 支持絕大多數主流開發語言,如C、C++、Java、Python、R、JavaScript等。
  5. 支持集羣模式,高效、穩定。

1.3 數據模型

  1. 鍵值對形式。
  2. Redis的數據結構類型,指的就是Redis值的結構類型。

1.4 Redis做用

  1. 本質是數據庫,能存儲數據。 Redis能靈活處理非關係型數據的讀、寫問題,是對MySQL等關係型數據庫的補充。
  2. 緩存數據。 所謂緩存,就是將數據加載到內存中後直接使用,而不是每次都經過IO流從磁盤上讀取。好處:讀寫效率高。而Redis則是將數據直接存儲在內存中,只有當內存空間不足時,將部分數據持久化到磁盤上。

2、Redis的鍵key

  前面咱們說到Redis的數據模型爲鍵值對形式。接下來咱們來分析Redis的鍵key。緩存

2.1 key的類型

  redis的key 值是二進制安全的,這意味着能夠用任何二進制序列做爲key值,從形如」foo」的簡單字符串到一個JPEG文件的內容均可以。 空字符串也是有效key值。安全

  redis建議使用字符串作爲key的類型服務器

2.2 key取值規範

  1. 鍵值不須要太長,消耗內存,在數據中查找這類鍵值的計算成本較高。
  2. 鍵值不宜太短,可讀性較差,一般建議見名知意。

2.2.1 取值舉例

 將以下數據庫表中的數據,轉換爲redis的key-value存儲。數據結構

id username password email
1 lisi 111111 lisi@163.com
  • 127.0.0.1:6379> set user:id:1:username lisi

   OKapp

  • 127.0.0.1:6379> set user:id:1:password 111111

   OK性能

   OK測試

  • 127.0.0.1:6379> keys user:id:1* #查找有幾個屬性
  1. "user:id:1:password".net

  2. "user:id:1:username"

  3. "user:id:1:email"

  • 127.0.0.1:6379>

2.3 Key命令

命令 做用
exists key 檢查給定key是否存在。
del key 刪除一個key
del key1 key2 key3 刪除多個key
keys pattern (模糊查找) 查找全部符合給定模式 pattern 的 key
expire key seconds 指定key的過時時間。新添加的key,若是沒有指定過時時間,則會一直保存。能夠對一個已經帶有生存時間的key執行EXPIRE命令,新指定的生存時間會取代舊的生存時間。
ttl key 查看某個key的剩餘過時時間,返回值:2 表示這個key已通過期返回1表示沒有設置過時時間 返回其它 表示剩餘的生存時間,單位爲秒。
rename 語法格式:rename key newkey將 key 更名爲 newkey 。當 key 和 newkey 相同,或者 key 不存在時,返回一個錯誤。當 newkey 已經存在時, RENAME 命令將覆蓋舊值。
type key 查看key對應的value的數據結構類型

  其它key命令見redis幫助文檔 http://doc.redisfans.com/


3、Redis的值value(數據結構類型)

3.1 string類型

  string類型是redis最經常使用的數據結構類型,存儲的值爲字符串。

3.1.1 String相關命令

命令 做用
set key value 設置一個key,值爲value,類型爲String類型;若是這個key已經存在,則更新這個key的值。返回值1 表示成功0 表示失敗
get key 獲取key對應的value值;若是key不存在,則返回nil
mget key1 key2 一次獲取多個key的值,若是對應key不存在,則對應返回nil
incr key 將 key 中儲存的數字值增一,而後返回
decr key 將 key 中儲存的數字值減一,而後返回,若是這個key不存在,那麼key的值會先被初始化爲0,而後再執行INCR操做。若是這個key對應的value值,不能表示數字,則會返回一個錯誤
decrby key decrement 將key減小對應的步長值
append key value 若是key已經存在,則將value追加到這個key原先的value值的末尾。若是這個key不存在,則執行set操做

  Redis的key是單線程模式,這就意味一瞬間只有一個線程可以持有這個key,因此可使用redis解決部分涉及線程安全的業務。

  • 127.0.0.1:6379> help @string 查看string類型的幫助文檔
  • 127.0.0.1:6379> help set 查看set命令的幫助文檔

3.2 List類型

3.2.1 特色

  1. 基於Linked List實現
  2. 元素是字符串類型
  3. 列表頭尾增刪快,中間增刪慢,增刪元素是常態
  4. 元素能夠重複出現
  5. 最多包含2^32-1元素
圖示
  • 列表的索引
  1. 從左至右,從0開始
  2. 從右至左,從-1開始
圖示

3.2.2 List類型相關命令

命令 做用
lpush key value [value ...] 將一個或多個值value插入到列表key的表頭(即從左邊插入) 若是 key 不存在,一個空列表會被建立並執行 LPUSH 操做。當 key 存在但不是列表類型時,返回一個錯誤。
rpush key value [value ...] 尾部添加(從右向左),操做同上
llen key 返回key對應list的長度,key不存在返回0,若是key對應類型不是list返回錯誤
lindex key index index元素在list列表中的下角標,從0開始;lindex 是從左到右取元素
lrange key start stop 獲取指定區間的全部元素;下角標從0開始,0表示第一個元素,1表示第二個,依次類推;-1表示最後一個元素,-2表示倒數第二個元素,依次類推;
lpop key 移除並返回列表中的第一個元素
rpop key 移除並返回列表中的最後一個元素

3.3 Hash類型

3.3.1 特色

特色
  1. 由Field和與之關聯的value組成map鍵值對
  2. field和value是字符串類型
  3. 一個hash中最多包含2^32-1鍵值對

3.3.2 Hash相關命令

命令 做用
hset key field value 設置hash field爲指定值,若是key不存在,則先建立 若是field已經存在,那麼將更新這個field的值
hget key field 獲取指定的hash field
hmget key filed1....fieldN 獲取所有指定的hash filed
hmset key filed1 value1 ... filedN valueN 同時設置hash的多個field
hexists key field 測試指定field是否存在
hdel key field 刪除指定的hash field
hlen key 返回指定hash的field數量
hkeys key 返回hash的全部field
hvals key 返回hash的全部value
hgetall 返回hash的全部filed和value

3.3.3 Hash的用途

  節約內存空間

  redis每建立一個鍵,都會爲這個鍵儲存一些附加的管理信息(好比這個鍵的類型,這個鍵最後一次被訪問的時間等等)

  redis的key相對於值來講,更珍貴!!!

  因此數據庫裏面的鍵越多,redis數據庫服務器在儲存附加管理信息方面耗費的內存就越多,在獲取key對應的value值時cpu的開銷也會更多

  Hash結構能夠將具備關聯關係的一組key-value,存儲到同一個hash結構中,從而減小key的數量。

3.3.4 hash不適用的場景

  須要設置鍵過時功能的key: Redis的key的過時功能只能對鍵操做,而Hash結構不能單獨對某一個filed設置過時功能。

3.4 Set類型(集合)

3.4.1 特色

特色
  1. 無序的、去重的;
  2. 元素是字符串類型;
  3. 最多包含2^32-1元素。

3.4.2 Set相關命令

命令 做用
sadd key member [member ...](無序不重複) 將一個或多個 member 元素加入到集合 key 當中,已經存在於集合的 member 元素將被忽略
smembers key 返回集合 key 中的全部成員。不存在的 key 被視爲空集合
spop key 移除並返回集合中的一個隨機元素。被移除的隨機元素。當key不存在或key是空集時,返回nil
scard key 返回集合key的基數(集合中元素的數量)。集合的基數。當key不存在時,返回0
sinter key [key ...] 交集 返回一個集合的所有成員,該集合是全部給定集合的交集。不存在的 key 被視爲空集
sunion key [key ...] 並集 返回一個集合的所有成員,該集合是全部給定集合的並集。不存在的 key 被視爲空集
sdiff key [key ...] 差集 返回一個集合的所有成員,該集合是全部給定集合之間的差集。不存在的 key 被視爲空集

3.5 SortedSet類型

3.5.1 特色

  1. 相似Set集合;
  2. 有序的、去重的;
  3. 元素是字符串類型;
  4. 每個元素都關聯着一個浮點數分值(Score),並按照分值從小到大的順序排列集合中的元素。分值能夠相同
  5. 最多包含2^32-1元素

版權說明:歡迎以任何方式進行轉載,但請在轉載後註明出處!

相關文章
相關標籤/搜索