SegmentFault 技術週刊 Vol.37 - 分佈式緩存利器:Redis

clipboard.png

Redis 是由意大利程序員 Salvatore Sanfilippo(暱稱:antirez)開發的一款內存高速緩存數據庫。Redis 全稱爲 Remote Dictionary Server(遠程數據服務),使用 C 語言編寫,是一個 key-value 存儲系統,支持豐富的數據類型,如:string、list、set、zset(sorted set)、hash等。前端

Redis 之內存做爲數據存儲介質,因此讀寫數據的效率極高,遠遠超過數據庫,在服務器中經常使用來存儲一些須要頻繁調取的數據,這樣能夠大大節省系統直接讀取磁盤來得到數據的I/O開銷,更重要的是能夠極大提高速度。node

Redis 的應用很是普遍,可謂服務器中的一件利器,如今咱們就來一步步學習 Redis 吧。nginx

Redis 安裝

Redis簡介、數據類型應用場景程序員

Redis,一個開源的 key-value,內存中的數據結構存儲系統,它能夠用做數據庫、緩存和消息中間件。 它支持多種類型的數據結構,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets)。>redis

Redis 使用C語言開發,支持的客戶端語言也很是豐富,如C、C#、C++、Object-C、PHP、Python、 Java、Perl、Lua等。Redis 支持 master-slave(主-從)模式應用,支持數據的持久化,能夠將內存中的數據村春在硬盤中,重啓、斷電的時候並不會丟失數據。sql

Redis的11種Web應用場景簡介數據庫

下面列出11種Web應用場景,在這些場景下能夠充分的利用Redis的特性,大大提升效率。編程

  • 在主頁中顯示最新的項目列表segmentfault

  • 刪除和過濾瀏覽器

  • 排行榜及相關問題

  • 按照用戶投票和時間排序

  • 過時項目處理

  • 計數

  • 特定時間內的特定項目

  • 實時分析正在發生的狀況,用於數據統計與防止垃圾郵件等

  • Pub/Sub

  • 隊列

  • 緩存

走進Redis:Redis的安裝、使用以及集羣的搭建

  • 1、Redis的安裝

  • 2、Redis的啓動與基本操做

  • 3、Redis的持久化方案

  • 4、Redis集羣的搭建

  • 5、使用Java操做Redis

【Redis】Redis安裝+主從部署

Redis開機啓動配置

redis Q&A

Redis 入門

10分鐘快速入門Redis

  • Redis安裝

  • 服務管理

  • 更改配置

  • 基本操做

  • 支持的數據類型

  • 開啓通知

  • 開啓遠程登陸鏈接

  • 提供的原生監控

  • 配置說明

Redis快速入門及應用

Redis的使用難嗎?不難,Redis用好容易嗎?不容易。Redis的使用雖然不難,但與業務結合的應用場景特別多、特別緊,用好並不容易。咱們但願經過一篇文章及Demo,便可輕鬆、快速入門並學會應用。

redis 學習筆記

這篇 redis 學習筆記主要介紹 redis 的數據結構和數據類型,並討論數據結構的選擇以及應用場景的優化。

【Redis】Redis經常使用命令

  • 1、全局命令

  • 2、針對key的操做

  • 3、 Hash操做

  • 4、列表List操做

  • 5、Set操做(不可重複)

  • 6、ZADD操做(有序集合)

  • 7、pub/sub(發佈、訂閱)

  • 8、Transaction(事務)

  • 9、Connection(鏈接)

  • 10、Server(服務器)

Redis--主從複製--主從切換

  • 配置文件

  • redis持久化

  • 主從複製

  • sentinel 主從切換

Redis 實現隊列

場景說明:

  • 用於處理比較耗時的請求,例如批量發送郵件,若是直接在網頁觸發執行發送,程序會出現超時

  • 高併發場景,當某個時刻請求瞬間增長時,能夠把請求寫入到隊列,後臺在去處理這些請求

  • 搶購場景,先入先出的模式

redis & redis-cluster

redis在年初發布了3.0.0,官方支持了redis cluster,也就是集羣。redis cluster在設計的時候,就考慮到了去中心化,去中間件,也就是說,集羣中的每一個節點都是平等的關係,都是對等的,每一個節點都保存各自的數據和整個集羣的狀態。每一個節點都和其餘全部節點鏈接,並且這些鏈接保持活躍,這樣就保證了咱們只須要鏈接集羣中的任意一個節點,就能夠獲取到其餘節點的數據。

Redis中5種數據結構的使用場景介紹

這篇文章主要介紹了Redis中5種數據結構的使用場景介紹,本文對Redis中的5種數據類型String、Hash、List、Set、Sorted Set作了講解,須要的朋友能夠參考下。

[Redis源碼閱讀]sds字符串實現

經過詳細地閱讀sds的源碼,不只學習到sds的實現細節,還學習到了一些經常使用字符串操做函數的實現。若是隻是僅僅看看數據結構的定義也能夠初步瞭解,可是要深刻了解的話仍是須要詳細的閱讀具體函數的實現代碼。仍是那句,寫代碼的,須要閱讀更多代碼來加強靈感。

Redis 源碼學習之 Redis 事務

Redis做爲一個內存型數據庫,一樣支持傳統數據庫的事務特性。這篇文章會從源代碼角度來分析Redis中事務的實現原理。

  • What

  • How

  • Why

  • Other

Redis 通訊協議-瞭解 Redis 客戶端實現原理

幾乎全部的主流編程語言都有Redis的客戶端(http://redis.io/clients),不考慮Redis很是流行的緣由,若是站在技術的角度看緣由還有兩個:

  • 客戶端與服務端之間的通訊協議是在 TCP 協議之上構建的。

  • 客戶端和服務器經過 TCP 鏈接來進行數據交互, 服務器默認的端口號爲 6379 。

客戶端和服務器發送的命令或數據一概以 rn (CRLF)結尾。

Redis制定了 RESP(REdis Serialization Protocol,Redis序列化協議)實現客戶端與服務端的正常交互,這種協議簡單高效,既可以被機器解析,又容易被人類識別。

Redis Shell

Redis提供了redis-cli、redis-server、redis-benchmark等Shell工具。它們雖然比較簡單,可是麻雀雖小五臟俱全,有時能夠很巧妙地解決一些問題。

Redis 服務器管理相關命令

  • 查看客戶端列表

    • 獲取/設置名稱

    • 客戶端限制

    • 關閉客戶端

    • 阻塞客戶端

    • 客戶端回覆設定

    • 監控

    • 其餘配置

    • 源碼查看

  • INFO

Redis 圖形化監控方案 RedisLive 介紹

做爲一款開源的 Redis 圖形化監控工具,RedisLive 提供對 Redis 實例的內存使用狀況,接收的客戶端命令,接收的請求數量以及鍵進行監控。RedisLive 的工做原理基於 Redis 的 INFO 和 MONITOR 命令,經過向 Redis 實例發送 INFO 和 MONITOR 命令來獲取 Redis 實例當前的運行數據。

服務端指南 數據存儲篇 | 聊聊 Redis 使用場景

  1. 緩存

  2. 會話緩存

  3. 時效性

  4. 訪問頻率

  5. 計數器

  6. 社交列表

  7. 記錄用戶斷定信息

  8. 交集、並集和差集

  9. 熱門列表與排行榜

  10. 最新動態

  11. 消息隊列

redis五種常見使用場景下PHP實現

redis等nosql簡單高效的解決了高併發場景下的一系列問題,並很大程度的解放了持久化DB的業務壓力。

實現:

  • 基於redis字符串string類型的簡單緩存實現

  • 基於redis列表list類型的簡單隊列實現

  • 基於redis字符串setnx的悲觀鎖實現

  • 基於redis事務的樂觀鎖實現

  • 基於redis的發佈訂閱實現

redis的簡單使用 異步發送郵件

你是否也困在redis,知其然不知其因此然~~ 項目中,到底怎麼用?? 一個簡單的實例,使用消息隊列實現下yii異步發送郵件。

  • 準備工做

  • 同步與異步

  • 郵件發送

使用redis watch實現秒殺搶購,避免超賣

涉及搶購、秒殺、抽獎、搶票等活動時,爲了不超賣,那麼庫存數量是有限的,可是若是同時下單人數超過了庫存數量,就會致使商品超賣問題。那麼咱們怎麼來解決這個問題呢?

redis 經常使用場景-慢慢完善中

獲取最新插入的100記錄

進階

Redis拾遺

最近幾天拜讀了Josiah L. Carlson的《Redis in Action》,對Redis有了更深刻的理解。不禁感嘆它真是應了」重劍無鋒,大巧不工「。幾種簡單的數據結構,不一樣的組合與運用,居然能夠優雅的解決各類項目中常見的需求,甚至獨立的支持不少應用的存儲與業務邏輯。

這是接下來要寫的一系列Redis文章的第一篇,介紹基本數據結構、持久化與事務,以及關於Redis性能的測試。

[深刻學習Redis]RedisAPI的原子性分析

原子性是數據庫的事務中的特性。在數據庫事務的情景下,原子性指的是:一個事務(transaction)中的全部操做,要麼所有完成,要麼所有不完成,不會結束在中間某個環節。【維基百科】

對於Redis而言,命令的原子性指的是:一個操做的不能夠再分,操做要麼執行,要麼不執行。

Redis 集羣方法

  • 配置 Redis

  • 安裝 ruby

  • 安裝 rubygems

  • 安裝配置集羣管理

  • [ERR] Sorry, can't connect to node 127.0.0.1:6370

  • 測試

  • Java Jedis 訪問

Redis高級功能 - 慢查詢日誌

許多存儲系統(如:MySQL)提供慢查詢日誌幫助開發與運維人員定位系統存在的慢操做.所謂慢查詢日誌就是系統在命令執行先後計算每條命令的執行時間,當超過預設閾值,就將這條命令的相關信息(例如:發生時間,耗時,命令的詳細信息)記錄到慢查詢日誌中,Redis也提供了相似的功能.

搭建Tomcat集羣&經過Redis緩存共享session的一種流行方案

若是有一個Tomcat集羣都能訪問的公共session存取區就行了,基於這個概念,咱們想到了使用Redis來作這個session公共存取區,這樣子的話就有一個統一管理回話的地方了。

  1. 持久化Tomcat Session到Redis中

  2. nginx反向代理的負載均衡

  3. 基於sentinel的redis集羣搭建

如何實現從 Redis 中訂閱消息轉發到 WebSocket 客戶端

PHP 的redis擴展是阻塞式 IO ,使用訂閱/發佈模式時,會致使整個進程進入阻塞。所以必須使用SwooleRedis異步客戶端來實現。

負載均衡中使用Redis實現共享Session

首先要明確session和cookie的區別。瀏覽器端存的是cookie每次瀏覽器發請求到服務端是http 報文頭是會自動加上你的cookie信息的。服務端拿着用戶的cookie做爲key去存儲裏找對應的value(session).

同一域名下的網站的cookie都是同樣的。因此不管幾臺服務器,不管請求分配到哪一臺服務器上同一用戶的cookie是不變的。也就是說cookie對應的session也是惟一的。

因此,這裏只要保證多臺業務服務器訪問同一個redis服務器(或集羣)就好了。

面對緩存,我須要思考哪些問題?

緩存能夠說是無處不在,好比 PC 電腦中的內存、CPU 中的二級緩存、HTTP 協議中的緩存控制、CDN 加速技術都是使用了緩存的思想來解決性能問題。

緩存是用於解決高併發場景下系統的性能及穩定性問題的銀彈。

本文主要是討論咱們常用的分佈式緩存 Redis 在開發過程當中的相關思考。

redis持久化策略淺析

做爲目前做爲流行的cash,redis除了支持豐富的數據類型以外,還支持對內存中u數據的持久化,這樣一來即可以防止由於一些崩潰狀況(忽然間斷電、內存吃滿)形成的整個內存數據的丟失,這對咱們來講無疑是巨大的幫助。這裏咱們簡單的瞭解一下redis持久化的策略。

redis實現數據持久化的兩種策略:

  • rdb(redis database)-- 快照持久化

  • aof(append only file ) -- 只追加文件持久化

Redis集羣實現原理探討

Redis集羣是一個distribute、fault-tolerant的Redis實現,主要設計目標是達到線性可擴展性、可用性、數據一致性。

Redis中bitmap的妙用

在Redis中咱們常常用到set,get等命令,細心的你有沒有發現,還有幾個類似的命令叫setbit,getbit,它們是用來幹嗎的?

BitMap是什麼?就是經過一個bit位來表示某個元素對應的值或者狀態,其中的key就是對應元素自己。咱們知道8個bit能夠組成一個Byte,因此bitmap自己會極大的節省儲存空間。

Redis 未受權訪問漏洞利用

Redis 應用

使用Redis記錄系統日誌

在構建一個系統時,咱們經常須要記錄當前發生的事情,以及記錄特定消息出現的頻率,根據出現頻率的高低來決定消息的排列信息,幫助咱們找到重要的信息。

常見記錄日誌的方法有兩種:

  • 將日誌記錄在文件中。隨時時間流逝將日誌行不斷添加到文件裏面,並在一段時間後建立新的日誌文件。這種方式爲每一個不一樣的服務建立不一樣的日誌,因爲服務輪換日誌的機制不一樣,也缺乏一種可以方便地聚合全部日誌並對其進行處理的常見方法。

  • syslog服務。這種服務幾乎運行在Linux服務器和Unix服務器的514號TCP端口和UDP端口上。syslog接受其餘程序發來的日誌消息,並將這個消息路由至存儲在硬盤上的各個日誌文件,而且負責舊日誌的輪換和刪除工做。甚至還能夠將日誌消息轉發給其餘服務來作進一步的處理。

Redis的發佈與訂閱

Redis的發佈訂閱功能由 PUBLISH、SUBSCRIBE、PSUBSCRIBE等命令組成。

經過執行SUBSCRIBE命令,客戶端能夠訂閱一個或多個頻道從而成爲這些頻道的訂閱者(subscriber),當有其它客戶端向被訂閱的頻道發送消息時,頻道的全部訂閱者都能收到這條消息。

購物網站的redis相關實現

需求:

  • (1)登陸和cookie緩存

  • (2)使用redis實現購物車

  • (3)網頁緩存

  • (4)數據行緩存

  • (5)網頁分析

使用Redis Zset來處理活動經常使用排行榜(精確排行)

一個嚴格的排行榜,必需要知足每一個人的排序都是有實際意義的,簡單來講就是即便兩我的的分數同樣,那麼也要分出前後來。

活動週期在92天之內的話,那麼咱們就可使用200w加活動結束時間做爲數字A來保證排行榜的順序正確。

Redis分佈式鎖解決搶購問題

廢話很少說,首先分享一個業務場景-搶購。一個典型的高併發問題,所需的最關鍵字段就是庫存,在高併發的狀況下每次都去數據庫查詢顯然是不合適的,所以把庫存信息存入Redis中,利用redis的鎖機制來控制併發訪問,是一個不錯的解決方案。

一步步實現 Redis 搜索引擎

這是某購物網站的搜索條件:搜索總共分爲6大類,每大類中又分了各個子類。這中間,各大類條件之間是取的交集,各子類中有單選、多選、以及自定義的狀況,最終輸出符合條件的結果集。

若是讓你實現這樣的一個搜索接口,你會如何實現?

途牛原創|無線中心運營研發Redis酷實踐

Redis當然很贊,切記當你手上有一把錘子的時候,看全部的東西都是釘子,理解他,用好他。

運營研發-場景:

  • 武器一覽

  • CMS頁面緩存

  • API限速器

  • 性能分析

  • API狀態統計

  • CMS智能提醒-異常線路

Redis在京東到家的訂單中的使用

Redis做爲一款性能優異的內存數據庫,在互聯網公司有着多種應用場景,下面介紹下Redis在京東到家的訂單列表中的使用場景。主要從如下幾個方面來介紹:

  • 訂單列表在Redis中的存儲結構

  • Redis和DB數據一致性保證

  • Redis中的分佈式鎖

  • 緩存防穿透和雪崩

Redis 應用案例 - 在問題中不斷成長

本文翻譯整理自 Andy Grunwald 發佈的一篇文章,寫的是做者所在公司使用 Redis 時遇到的問題,以及處理過程,在不斷解決調整中積累了不少 Redis 的使用經驗。

問題描述:

  • 用戶量快速增加,訪問量在短期內翻倍,因爲前期容量規劃作得比較好,硬件資源能夠支撐,但是軟件系統方面出現了大問題:

  • 40% 的請求都會返回 HTTP 500: Internal Server Error

  • 經過查看日誌,發現錯誤是在 PHP <-> Redis 的鏈接處理上

使用 阿里巴巴 Canal 增量訂閱&消費組件 同步 MySQL 數據到 Redis

早期,阿里巴巴B2B公司由於存在杭州和美國雙機房部署,存在跨機房同步的業務需求。不過早期的數據庫同步業務,主要是基於trigger的方式獲取增量變動,不過從2010年開始,阿里系公司開始逐步的嘗試基於數據庫的日誌解析,獲取增量變動進行同步,由此衍生出了增量訂閱&消費的業務,今後開啓了一段新紀元。

秒殺活動的設計

業務的基本說明

  • 運營評估最高的併發會達到 10W(根據推廣的力度,以及以往的經驗)

  • 業務現有的服務器架構 反向代理 4臺,前端機 8臺, db 2臺(主從),redis 2臺(主從)。

本期完
:)


歡迎關注 SegmentFault 微信服務號,獲取最新講堂及優惠信息。

clipboard.png

相關文章
相關標籤/搜索