摘要:收到后則會調用指令一個子進程來持久化存儲的數據,在的持久化的這個短短期間內,的指令則存儲到內存中。經過官網的測試性能結果達到的。
HotFrameLearning Redis_01_簡介
-
一、大致介紹1、介紹Redis之前,我有一堆的疑問,Redis是什么?有什么用?它能干什么?有什么特性?能解決我們日常的哪些問題? 為什么要用Redis?Redis好在哪里?除了Redis外還有其他替代方案么? 2、對于還沒了解過Redis的童鞋,可以帶著這些疑問往下看,而對于了解過Redis的童鞋那就走過路過不要錯過^_^。 3、另外目前討論的版本也是比較新的版本3.x版本;二、簡單認識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.三、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 回收策略
回收策略,還有一個{{BANNED}}的輔助幫手,就是客戶端每執行一個命令,都會檢測內存是否超標,如果超標,果斷淘汰。 六種回收策略如下: ? noeviction 不回收; ? allkeys-lru 從所有鍵中刪除最近最少使用的鍵; ? volatile-lru 從設置了過期時間的鍵中刪除最近最少使用的鍵; ? allkeys-random 從所有鍵中隨機刪除; ? volatile-random 從設置了過期時間的鍵中隨機刪除; ? volatile-ttl 從設置了過期時間的鍵中選擇存活時間最短的鍵刪除;3.8 線程模型
Redis 之所以有著飛一樣的讀寫速度,這還得得益于它的單進程單線程模樣的線程模型。經過Redis官網的測試性能結 果達到10W+的QPS。 優秀的線程模型不但簡化了代碼邏輯,而且也不用考慮并發,也不用考慮各種鎖的問題,更不存在多線程切換消耗CPU 的問題了,一切的一切,就是單線程挨個挨個執行。 但是這種線程模型架構也帶來一定的問題,犧牲了多核CPU性能,視多核CPU如無物,簡直暴殄天物,反過來講,目前 得到大家的方響,也沒說redis十分慢,若如果真的遇到了redis十分慢的話,那很有可能是開發者的姿勢不對,說不定又 在哪里進行了耗時的操作。四、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則不可恢復; ? 數據大?。篟edis的Value最大能支撐1G大小,而memcached最大支撐只有1M; ? 內存分配:Redis會浪費一定時間去分配內存空間,而memcached則事先就分配好了一定的Page、Slab、Chunk空間; ? 等等還有很多,就不一一列舉了,想了解的更多跟詳細,大家可以自行約會度娘問個究竟。五、下載地址
https://gitee.com/ylimhhmily/HotFrameLearning.git
HotFrameLearning交流QQ群: 235322432
HotFrameLearning交流微信群: 微信溝通群二維碼圖片鏈接
歡迎關注,您的肯定是對我最大的支持!!!
-
<上一篇????????首頁????????下一篇>
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/71450.html
摘要:熱門框架學習目錄項目介紹專輯欄目一簡介環境安裝配置客戶端連接常用命令集群搭建分布式鎖二簡介環境安裝配置基本特性啟動過程分析選舉過程主從數據同步過程分析集群搭建分布式鎖三簡介環境安裝配置基本特性基本概念和模型收發消息案例架構初識收發消息原 HotFrameLearning 熱門框架學習(目錄) - I、項目介紹 - II、專輯欄目 一、Redis Redis 簡介 Redis 環境安裝...
摘要:熱門框架學習前言一初衷知識是共享的,知識是大家的,本人也只是盡人事,幫助能幫助的人,將知識取之于民,用之于民。但游戲規則是需要服務于游戲服務于大眾的,脫離了這些,游戲規則僅僅只是一堆文字描述而已。 HotFrameLearning 熱門框架學習(前言) - 一、初衷 知識是共享的,知識是大家的,本人也只是盡人事,幫助能幫助的人,將知識取之于民,用之于民。 原本...
閱讀 1408·2023-04-26 01:58
閱讀 2282·2021-11-04 16:04
閱讀 1753·2021-08-31 09:42
閱讀 1765·2021-07-25 21:37
閱讀 1066·2019-08-30 15:54
閱讀 2074·2019-08-30 15:53
閱讀 3047·2019-08-29 13:28
閱讀 2687·2019-08-29 10:56