Redis從入門到精通


什么是Redis?

Redis是非關系型數據庫,是一個高性能的key-value數據庫,它是開源的,更是免費的。

Redis能做什么?

存儲數據

Redis的優點有哪些?

1.它支持存儲豐富的數據類型,比如:Sting,hash,set,List,zset等數據結構的存儲。

2.性能極高 – Redis能讀的速度是110000次/s,寫的速度是81000次/s。

3.原子 – Redis的所有操作都是原子性的,同時Redis還支持對幾個操作全並后的原子性執行。

這里解釋一下什么叫做原子性:操作不可再分,要么全部執行,要么全部不執行。

redis的原子性:

  • 單個操作是原子性的

  • 多個操作也支持事務,即原子性,通過MULTIEXEC指令包起來

這里不得不提一下redis的事物,redis的事物原理是這樣子的:

 1.批量操作在發送EXEC命令前被放入隊列緩存

 2.收到EXEC命令后進入事物執行,事物中任意命令執行失敗,其余的命令都不會被執行

 3.在事物執行過程中,其他客戶端提交的命令不會插入到事物執行命令序列中

下面是redis事物的一個例子:redis 127.0.0.1:6379> MULTOK

 redis 127.0.0.1:6379> SET book-name "Mastering C++ in 21 days" QUEUED redis 127.0.0.1:6379> GET book-name QUEUED redis 127.0.0.1:6379> SADD tag "C++" "Programming" "Mastering Series" QUEUED redis 127.0.0.1:6379> SMEMBERS tag QUEUED redis 127.0.0.1:6379> EXEC 1) OK 2) "Mastering C++ in 21 days" 3) (integer) 3 4) 1) "Mastering Series" 2) "C++" 3) "Programming"

它是以MULT開始一個事物,然后將多個命令入隊到事物中,最后由EXEC命令觸發事物,一並執行事物中的所有命令。
Redis事物的一些常用命令:
1.DISCARD 
取消事務,放棄執行事務塊內的所有命令
2.EXEC 
執行所有事務塊內的命令
3.MULTI 
標記一個事務塊的開始
4.UNWATCH 
取消 WATCH 命令對所有 key 的監視
5.WATCH key [key ...] 
監視一個(或多個) key ,如果在事務執行之前這個(或這些) key 被其他命令所改動,那么事務將被打斷

4.豐富的特性 – Redis還支持 publish/subscribe, 通知, key 過期等等特性。

Redis與其他key-value存儲有什么不同?

  • Redis有着更為復雜的數據結構並且提供對他們的原子性操作,這是一個不同於其他數據庫的進化路徑。Redis的數據類型都是基於基本數據結構的同時對程序員透明,無需進行額外的抽象。

  • Redis運行在內存中但是可以持久化到磁盤,所以在對不同數據集進行高速讀寫時需要權衡內存,因為數據量不能大於硬件內存。在內存數據庫方面的另一個優點是,相比在磁盤上相同的復雜的數據結構,在內存中操作起來非常簡單,這樣Redis可以做很多內部復雜性很強的事情。同時,在磁盤格式方面他們是緊湊的以追加的方式產生的,因為他們並不需要進行隨機訪問。

Redis的命令有哪些?

 INCR 命令將字符串值解析成整型,將其加一,最后將結果保存為新的字符串值,類似的命令有INCRBYDECR 和 DECRBY。實際上他們在內部就是同一個命令,只是看上去有點兒不同。

使用EXISTS命令返回1或0標識給定key的值是否存在,使用DEL命令可以刪除key對應的值,DEL命令返回1或0標識值是被刪除(值存在)或者沒被刪除(key對應的值不存在)。

TYPE命令可以返回key對應的值的存儲類型

用EXPIRE來設置超時時間(也可以再次調用這個命令來改變超時時間,使用PERSIST命令去除超時時間 )。我們也可以在創建值的時候設置超時時間

LPUSH 命令可向list的左邊(頭部)添加一個新元素,而RPUSH命令可向list的右邊(尾部)添加一個新元素。最后LRANGE 命令可從list中取出一定范圍的元素

LRANGE 帶有兩個索引,一定范圍的第一個和最后一個元素。這兩個索引都可以為負來告知Redis從尾部開始計數,因此-1表示最后一個元素,-2表示list中的倒數第二個元素,以此類推

還有一個重要的命令是pop,它從list中刪除元素並同時返回刪除的值。可以在左邊或右邊操作

我們增加了三個元素,並彈出了三個元素,因此,在這最后 列表中的命令序列是空的,沒有更多的元素可以被彈出。如果我們嘗試彈出另一個元素,將會得到一個null

可以使用LTRIM把list從左邊截取指定長度。比如 mylist 1 2 3 4 5 ,ltrim mylist 0 2,結果 lrange mylist 0 -1 是 1 2 3

SADD key member1 [member2] 
向集合添加一個或多個成員

SCARD key 
獲取集合的成員數

SMEMBERS key 
返回集合中的所有成員


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM