HotFrameLearning Redis_01_簡介

HotFrameLearning Redis_01_簡介

-git

1、大體介紹

一、介紹Redis以前,我有一堆的疑問,Redis是什麼?有什麼用?它能幹什麼?有什麼特性?能解決咱們平常的哪些問題?
   爲何要用Redis?Redis好在哪裏?除了Redis外還有其餘替代方案麼?
二、對於還沒了解過Redis的童鞋,能夠帶着這些疑問往下看,而對於瞭解過Redis的童鞋那就走過路過不要錯過^_^。
三、另外目前討論的版本也是比較新的版本3.x版本;

2、簡單認識Redis

2.1 何爲Redis?

Redis 是一個開源的基於內存的數據結構化存儲媒介,多用於數據庫、緩存以及消息代理。
   再簡言之,Redis 是一個基於內存的 key-value 數據庫。

2.2 原滋原味解釋

原文地址:https://redis.io/topics/introduction

Redis is an open source (BSD licensed), in-memory data structure store, used as a 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.

You can run atomic operations on these types, like appending to a string; incrementing the value in a hash; pushing an element to a list; computing set intersection, union and difference; or getting the member with highest ranking in a sorted set.

In order to achieve its outstanding performance, Redis works with an in-memory dataset. Depending on your use case, you can persist it either by dumping the dataset to disk every once in a while, or by appending each command to a log. Persistence can be optionally disabled, if you just need a feature-rich, networked, in-memory cache.

Redis also supports trivial-to-setup master-slave asynchronous replication, with very fast non-blocking first synchronization, auto-reconnection with partial resynchronization on net split.

Other features include:

Transactions
 - Pub/Sub
 - Lua scripting
 - Keys with a limited time-to-live
 - LRU eviction of keys
 - Automatic failover
You can use Redis from most programming languages out there.

Redis is written in ANSI C and works in most POSIX systems like Linux, *BSD, OS X without external dependencies. Linux and OS X are the two operating systems where Redis is developed and more tested, and we recommend using Linux for deploying. Redis may work in Solaris-derived systems like SmartOS, but the support is best effort. There is no official support for Windows builds, but Microsoft develops and maintains a Win-64 port of Redis.

3、Redis的一些特性

3.1 數據類型

Redis支持多種數據結構,這也是它的亮點所在,除外Redis的單個Value最大限制爲1GB,已經遠遠超過memcached的
1MB的大小限制。下面咱們看看它有哪些數據類型,能幹什麼用,內部結構是怎麼樣的。

    • strings:字符串類型,最基本的數據類型,一般來存儲基本的字段值;
    • hash:是一個string類型的Field和Value之間的映射表,一般用來存儲一個對象中各個Key與Value信息的映射;
    • lists:元素都是string類型的雙向鏈表,一般用來存儲好友列表,粉絲列表,前十首熱門歌曲,最新消息排行等;
    • set:是一個無序的string類型數據的集合,其內部用的是HashMap實現,只是Value都是空的而已,一般用來對數據
      作交集、並集、差集等操做,所以就有相似共同好友,共同興趣等業務數據應運而生;
    • sortset:有序set,其內部僅僅只是在set基礎上新增了一個排序score字段,一般用於具備排序功能的業務數據展現;

3.2 持久化

Redis 提供了兩種持久化方式,一個是RDB(Redis DataBase),另外一個是AOF(Append Only File),至於說誰好誰差
呢?應該說各有所長,然而官網卻建議咱們二者結合使用,雙保險嘛。   

    • RDB:就是在不一樣的時間點生成的快照文件並存儲到硬盤上;
    • AOF:就是將redis的那些寫指令記錄下來,目的就是爲了下次redis重啓時能夠快速執行這些指令恢復數據;
    
   不過既然用到Redis存儲,我的建議若是你們沒有什麼特殊的持久化需求的話,徹底不用理會這兩種持久化的方式,直接
關閉便可,由於redis原本擅長的領域就是內存數據庫,對於持久化存儲方面不擅長。

3.3 主從同步

Redis 所謂的主從一方面但是一主有多從,可是另一方面每一個從節點也能夠有多個從節點。而這樣作的目的其實很簡
單,一來是爲了提高讀的性能,二來也是爲了去中心化增長數據冗餘備份。一旦主節點掛了,從節點就得立馬頂上去。
   
   然而主從之間的同步的思路也是挺簡單的,都是slave主動向master發出sync指令,意思就是告訴master,slave須要同
步數據啦。master收到sync後則會調用bgsave指令fork一個子進程來持久化存儲master的數據,在master的持久化的這個
短短時間間內,master的write指令則存儲到內存中。待master的子進程持久化完成後則將持久化的這個文件發送給slave節點,
待slave接收完成並將數據加載到slave內存中,而後master節點還會將持久化期間緩存的write指令再次發給slave節點。

3.4 發佈訂閱

該發佈訂閱,和咱們經常使用的MQ發送訂閱的模式是同樣的,支持訂閱單個頻道,也支持訂閱多個頻道,還支持相似正則表
達式同樣的模式匹配。

3.5 事務

Redis 也擁有本身的一套事務機制,只是這個所謂的事務機制沒有關係型數據庫那麼強大,可是仍是勉強夠用,其實Redis
的事務,就是一組命令的集合,MULTI、EXEC、DISCARD 和 WATCH 是 Redis 事務相關的命令。既然是一組命令的執行,那麼
Redis給了咱們什麼樣的保證呢?來保證執行不被其餘命令打斷或篡改呢?

    • 保證一:事務是一個單獨的隔離操做,全部命令被序列號有序執行;
    • 保證二:事務是一個原子操做,要麼所有執行,要麼所有不執行;

   然而在實際應用中老是那麼差強人意,事務中若是是由於語法錯誤的話,則是不會提交事務,可是若是是運行時錯誤的
話,那就完蛋了,全部命令都會被執行,沒有回滾機制,難道就沒有解救措施了麼,這個還真沒有,運行時錯誤是編程時
須要杜絕的,這樣的話其實也不存在須要什麼回滾操做,一切順其天然一鼓作氣。

   固然Redis還提供一個WATCH命令,來防止EXEC執行後發現值被篡改的話,則EXEC也照樣返回失敗處理;

3.6 Lua腳本

Lua腳本功能是Reids 2.6版本的最大亮點,經過內嵌對Lua環境的支持,解決了長久以來不能高效地處理CAS命令的缺點, 
而且能夠經過組合使用多個命令, 輕鬆實現之前很難實現或者不能高效實現的模式。

3.7 回收策略

回收策略,還有一個變態的輔助幫手,就是客戶端每執行一個命令,都會檢測內存是否超標,若是超標,果斷淘汰。
    
    六種回收策略以下:
    • noeviction 不回收;
    • allkeys-lru 從全部鍵中刪除最近最少使用的鍵;
    • volatile-lru 從設置了過時時間的鍵中刪除最近最少使用的鍵;
    • allkeys-random 從全部鍵中隨機刪除;
    • volatile-random 從設置了過時時間的鍵中隨機刪除;
    • volatile-ttl 從設置了過時時間的鍵中選擇存活時間最短的鍵刪除;

3.8 線程模型

Redis 之因此有着飛同樣的讀寫速度,這還得得益於它的單進程單線程模樣的線程模型。通過Redis官網的測試性能結
果達到10W+的QPS。

    優秀的線程模型不但簡化了代碼邏輯,並且也不用考慮併發,也不用考慮各類鎖的問題,更不存在多線程切換消耗CPU
的問題了,一切的一切,就是單線程挨個挨個執行。

    可是這種線程模型架構也帶來必定的問題,犧牲了多核CPU性能,視多核CPU如無物,簡直暴殄天物,反過來說,目前
獲得你們的方響,也沒說redis十分慢,若若是真的遇到了redis十分慢的話,那頗有多是開發者的姿式不對,說不定又
在哪裏進行了耗時的操做。

4、Redis優缺點

4.1 優勢

• 速度快,10W+的QPS,並且數據結構相似HashMap查詢複雜度低;
    • 數據結構相對比較豐富,並且存儲的Value也相對足夠大;
    • 支持事務,並且還支持Lua腳本進行CAS操做;
    • 主從複製,支持讀寫分離,並且還支持RDB與AOF兩種持久化方式;

4.2 缺點

• 不能充分利用多核CPU的硬件優點;
    • 多主多從模式中,若是某一區域獨立的主從同時掛掉且形成哈希槽的部分不可用,那麼整個集羣將會致使不可用;
    • 網絡波動會形成主從之間會進行全量數據複製,若是快照文件過大,則會給內存帶來很是大的壓力;
    • 主從複製若是不在同一局域網,則會給主從複製的性能帶來很大的損傷;

4.3 對比memcached

• 數據類型:Redis不只支持簡單的k/v類型,還支持list,set.zset,hash等數據結構,但memcached支持圖片視頻緩存;
    • 存儲方式:Redis在物理內存用完時還能將不多用的Value進行磁盤存儲,有AOF與RDB兩種持久化存儲方式;
    • 主從模式:Redis支持一主多從,也能夠支持多主多從,但memcached利用magent適用於一主多從;
    • 災難恢復:Redis能夠經過從AOF或RDB方式恢復數據,而memcached則不可恢復;
    • 數據大小:Redis的Value最大能支撐1G大小,而memcached最大支撐只有1M;
    • 內存分配:Redis會浪費必定時間去分配內存空間,而memcached則事先就分配好了必定的Page、Slab、Chunk空間;
    • 等等還有不少,就不一一列舉了,想了解的更多跟詳細,你們能夠自行約會度娘問個究竟。

5、下載地址

https://gitee.com/ylimhhmily/HotFrameLearning.gitredis

HotFrameLearning交流QQ羣: 235322432數據庫

HotFrameLearning交流微信羣: 微信溝通羣二維碼圖片連接編程

歡迎關注,您的確定是對我最大的支持!!!segmentfault

-
<上一篇        首頁        下一篇>緩存

相關文章
相關標籤/搜索