已經有一段時間麼有寫博客了,換了家公司,最近因爲項目須要,開始瞭解之前沒有接觸過的NoSql(確切的說是做爲緩存使用)之一的Redis數據庫,淺顯的瞭解了一下,以爲蠻有意思,遂寫下筆記開始學習這個之前認爲「高大上」的工具。
redis
一.Redis簡介數據庫
Redis是一個開源的,使用C語言編寫的,基於內存的Key-Value型數據庫,因爲是基於內存操做,所以其性能很是出色,每秒鐘能夠處理10W次以上的讀寫操做。
編程
根據官方網站,Redis有許多優勢,包括豐富的數據類型(我的認爲這裏應該用數據結構更合適)、數據持久化(與memcache不一樣)、支持主從複製。
緩存
Redis的安裝和配置在本次記錄中就不寫了,對於Redis的初步學習,主要是經過熟悉基本操做命令來知道Redis能夠幹什麼,這裏推薦Redis官方網站上的互動學習窗口,用它來學習Redis的基本命令真的很方便,不須要本身再安裝Redis了,讓初學者把注意力集中在使用上,而不至於由於安裝過程的繁瑣致使挫敗感。
安全
二.Redis對於key的操做數據結構
既然是一個K-V型的數據庫,那麼少不了key和value的概念,key能夠看作是須要存儲數據的一個標識,是一個字符串(惟一),它用來指向/映射所存儲的值(value),而Redis的值(value),也是字符串,可是Redis自己提供了多種數據結構來存儲值(有的書上說是數據類型),這就使得Redis相比memcache而言,有着更爲強大的存儲能力,字符串的key多對應的值不只僅能夠是單一的string類型了,還能夠是集合(set),隊列(list),哈希表(hash)等結構。
工具
Redis的key使用字符串存儲,可是key中不能出現空格或者換行符。
post
關於key的基本操做命令,以下所示,只給出基本的幾個,其餘的能夠參考手冊。
性能
命令 | 描述 |
exists key |
測試製定的key是否存在 |
del key1 key2........keyn | 刪除給定的key |
type key | 返回指定的key的數據結構類型(list,set....) |
expire key seconds | 設定指定的key的過時時間(seconds) |
rename oldkey newkey | 重命名oldkey爲newkey |
三.Redis支持的value數據結構學習
Redis支持多種數據存儲結構,每種結構都有其各自的特色和針對性的操做。
1.String類型
String類型是二進制安全的。也就是一個key對應一個String類型的字符串,其所支持的命令如表所示:
命令 | 描述 |
set key value | 設置某個key所對應的string值 |
get key | 獲取key對應的string值 |
mset key1 value1 key2 value2 ...... | 設置多個key及其對應的string值 |
mget key1 key2 ......... | 獲取多個key的string值 |
2.List類型
List類型表示key對應的value是一個雙向鏈表結構,因此若是學過數據結構的鏈表,就容易理解List的相關操做。
如下命令中,key表示其對應的數據結構
命令 | 描述 |
lpush key string | 向key對應的列表的頭部添加一個元素 |
rpush key string | 向key對應的列表的尾部添加一個元素 |
llen key | 返回key對應的列表的長度 |
lrange key start end | 返回指定區域(start~end,0開始)的元素 |
lset key index value | 設置key對應的列表中指定下標(index)的值 |
lpop key | 從key對應的列表的頭部刪除並返回刪除的元素 |
rpop key | 從key對應的列表的尾部刪除並返回刪除的元素 |
3.Set類型
這裏的Set其實和數學概念上的Set(集合)是相似的,都有集合的特性,即無序性、互異性(即一個集合中不能有重複的元素)。
Set類型的優勢是快速查找元素是否存在,能夠用來記錄一些不能重複的數據。
命令 | 描述 |
sadd key member | 向給定集合key中添加元素member |
srem key member | 將元素member從給定集合key中刪除 |
scard key | 返回集合key中元素的個數 |
sismember key member | 判斷元素member是否在給定集合key中 |
sinter key1 key2 ...... | 返回給定集合的交集 |
sunion key1 key2 ...... | 返回給定集合的並集 |
sdiff key1 key2 ....... | 返回全部給定集合的差集 |
smembers key | 返回給定集合key中全部的元素 |
4.Sorted Set類型
SortedSet類型顧名思義,就是有序集合類型,和集合類型所不一樣的是,SortedSet中每一個元素有一個score做爲權值,使得Sorted Set以此爲依據進行排序。下表中只列出SortedSet特點命令
命令 | 描述 |
zadd key score member | 將給定元素member加入到集合key中,權值爲score |
zincrby key incr member | 將給定集合key中的元素member的score增長incr,並從新排序。 |
zrangebyscore key min max | 返回集合key中給定score區間(min max)的元素 |
zscore key element | 返回給定元素對應的score |
5.Hash類型
Hash類型比較特別,每個key對應一個HashTable,增刪改查的時間複雜度都是O(1),這個結構適合存儲對象。用圖表示也許更直觀一些:
從圖裏能夠看出,Hash的存儲是一個key對應一個HashTable,而在HashTable中,又包括字段和值得映射,很像面向對象編程中對象的引用指向對象,而對象自己包括字段和值同樣。因此說HashTable適合存儲對象。
基本命令如表所示:
命令 | 描述 |
hset key field value | 設置Hash表key中field字段的值 |
hget key field | 獲取Hash表key中field字段的值 |
hmget key field1 field2 ....... | 獲取多個字段 |
hmset key field1 value1 field2 value2 .... | 設置多個字段 |
hgetall key |
返回Hash表key中全部字段及其值 |
關於Redis的基本命令操做暫時就記錄這些,前述表中的命令不全,須要的時候能夠查看文檔獲取更詳細的信息,因爲是初學,整個學習過程當中確定有遺漏,誤差並不斷修正,往後會對文章進行修改。