日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Redis-01Redis概述

發布時間:2025/3/21 数据库 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redis-01Redis概述 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 思維導圖
  • Redis概述
  • Redis的版本
  • Redis的部分應用場景
    • 緩存
    • 高速讀/寫
  • 安裝 Redis
    • Windows下安裝Redis
    • linux下安裝Redis
  • 數據類型
  • 在線網站

思維導圖


Redis概述

在傳統的 Java Web 項目中, 使用數據庫進行存儲數據,弊端主要來自于性能方面。由于數據庫持久化數據主要是面向磁盤,而磁盤的讀/寫比較慢.

如果不存在高并發,因此往往沒有瞬間需要讀/寫大量數據的要求,這 個時候使用數據庫進行讀/寫是沒有太大的問題的,

在互聯網中,往往存在大數據量的 需求 ,比如一些商品搶購的場景,或者是主頁訪問量瞬間較大的時候, 一瞬間成千上萬的 請求就會到來 ,需要系統在極短的時間內完成成千上萬次的讀/寫操作,這個時候往往不是 數據庫能夠承受的,極其容易造成數據庫系統癱瘓,最終導致服務巖機的嚴重生產問題。

為了克服這些問題, Java Web 項目往往就引入了 NoSQL 技術, NoSQL 工具也是一種簡易的數據庫,它主要是一種基于內存的數據庫,并提供一定的持久化功能。Redis 和MongoDB 是當前使用最廣泛的 NoSQL。 我們這里來探討Redis 。

Redis可以支持每秒十幾萬次的讀/寫操作,其性能遠超數據庫,并且支持集群、 分布式、 主從同步等配置,原則上可以無限擴展,讓更多的數據存儲在內存中,還能支持一定的事務能力,這在高并發訪問的場景下保證數據安全和一致性非常重要。


#Redis的優點

  • 基于 ANSI C 語言編寫的,接近于匯編語言的機器語言,運行十分快速

  • 基于于內存的讀/寫,速度自然比數據庫的磁盤讀/寫要快得多

  • 數據庫結構只有 6 種數據類型,數據結構比較簡單,因此規則較少,而數據庫則是范式,完整性、規范性需要考慮的規則比較多,處理業務會比較復雜


  • Redis的版本

    Redis借鑒了Linux操作系統對于版本號的命名規則: 版本號第二位如果是奇數, 則為非穩定版本(例如2.7、 2.9、 3.1) , 如果是偶數, 則為穩定版本(例如2.6、 2.8、 3.0、 3.2、4.0) 。


    Redis的部分應用場景

    • 緩存 : 合理地使用緩存不僅可以加快數據的訪問速度, 而且能夠有效地降低后端數據源的壓力,同時 Redis提供了鍵值過期時間設置, 并且也提供了靈活控制最大內存和內存溢出后的淘汰策略。
    • 高速讀/寫的場合使用它快速讀/寫: 比如一些需要進行商品搶購和搶紅包的場合,把這些需要高速讀/寫的數據 , 緩存到 Redis 中,而在滿足一定的條件下,觸發這些緩存的數據寫入數據庫中
    • 排行榜系統: 按照熱度排名的排行榜, 按照發布時間的排行榜, 按照各種復雜維度計算出的排行榜, Redis提供了列表和有序集合數據結構, 合理地使用這些數據結構可以很方便地構建各種排行榜系統
    • 計數器應用:視頻網站有播放數、 電商網站有瀏覽數, 為了保證數據的實時性, 每一次播放和瀏覽都要做加1的操作,Redis天然支持計數功能而且計數的性能也非常好
    • 社交網絡:贊/踩、 粉絲、 共同好友/喜好、 推送、,Redis提供的數據結構可以相對比較容易地實現這些功能
    • 消息隊列系統: Redis提供了發布訂閱功能和阻塞隊列的功能, 雖然和專業的消息隊列比還不夠足夠強大, 但是對于一般的消息隊列功能基本可以滿足

    緩存

    一般而言在使用Redis 存儲的時候,需要從 3 個方面進行考慮。

  • 業務數據常用嗎?命中率如何?如果命中率很低,就沒有必要寫入緩存。

  • 該業務數據是讀操作多,還是寫操作多 ,如果寫操作多 ,頻繁需要寫入數據庫 ,也沒有必要使用緩存。

  • 業務數據大小如何?如果要存儲幾百兆字節的文件,會給緩存帶來很大的壓力,有沒有必要?


  • 在考慮過這些問題后,如果覺得有必要使用緩存,那么就使用它 。使用 Redis 作為緩 存的讀取邏輯如下:

    • 當第一次讀取數據的時候,讀取 Redis 的數據就會失敗,此時會觸發程序讀取數據庫,把數據讀取出來,并且寫入 Redis 。

    • 當第二次及以后讀取數據時,就直接讀取 Redis , 讀到數據后就結束了流程,速度就大大提高 。

    從上面的分析可知,大部分的操作是讀操作,使用 Redis 應對讀操作,速度就會十分迅速,同時也降低了對數據庫的依賴, 大大降低了數據庫的負擔。


    分析了讀操作的邏輯后,下面再來分析寫操作的流程,

    從上面的流程可以看出,更新或者寫入的操作,需要多個 Redis 的操作 。 如果業務數據寫次數遠大于讀次數沒有必要使用 Redis。如果是讀次數遠大于寫次數, 則使用 Redis 就有其價值了,因為寫入 Redis 雖然要消耗一定的代價,但是其性能良好,相對數據庫而言,幾乎可以忽略不計 。


    高速讀/寫

    在互聯網的應用中,往往存在一些需要高速讀/寫的場合,比如商品的秒殺,搶紅包,淘寶、京東的雙十一活動或者春運搶票等。這類場合在一個瞬間成千上萬的請求就會達到服務器,如果使用的是數據庫, 一個瞬間數據庫就需要執行成千上萬的 SQL,很容易造成數據庫的瓶頸,嚴重的會導致數據庫癱瘓,造成 Java Web 系統服務崩潰。

    在這樣的場合的應對辦法往往是考慮異步寫入數據庫,而在高速讀/寫的場合中單單使用 Redis 去應對, 把這些需要高速讀/寫的數據 , 緩存到 Redis 中,而在滿足一定的條件下,觸發這些緩存的數據寫入數據庫中.

    先看看一次請求操作的流程圖 如下:

    當一個請求達到服務器,只是把業務數據先在 Redi s 讀/寫,而沒有進行任何對數據庫的操作,換句話說系統僅僅是操作 Redis 緩存,而沒有操作數據庫,這個速度就比操作數據庫要快得多,從而達到需要高速響應的效果。

    但是一般緩存不能持久化,或者所持久化的數據不太規范,因此需要把這些數據存入數據庫 ,所以在一個請求操作完 Redis 的讀/寫后,會去判斷該高速讀/寫的業務是否結束。這個判斷的條件往往就是秒殺商 品剩余個數為 0,搶紅包金額為 0,如果不成立,則不會操作數據庫;如果成立,則觸發事件將 Redis 緩存的數據以批量的形式一次性寫入數據庫,從而完成持久化的工作。

    假設面對的是一個商品秒殺的場景,從上面的流程看, 一個用戶搶購商品,絕大部分的場合都是在操作內存數據庫 Redis , 而不是磁盤數據庫,所以其性能更為優越。只有在商品被搶購一空后才會觸發系統把 Redis 緩存的數據寫入數據庫磁盤中 , 這樣系統大部分的操作基于內存,就能夠在秒殺的場合高速響應用戶的請求,達到快速應答。

    而現實中這種需要高速響應的系統會比上面的分析更復雜 , 因為**這里沒有討論高并發下的數據安全和一致性問題,沒有討論有效請求和無效請求 、 事務一致性等諸多問題**,這些后續獨立討論它 。


    安裝 Redis

    Windows下安裝Redis

    請參考 實戰SSM_O2O商鋪_45【Redis緩存】配置Redis在Service層加入緩存


    linux下安裝Redis

    Redis-02Redis在linux下的安裝及常見問題


    數據類型

    Redis 是 一種基于內存的數據庫,并且提供 一定 的 持 久化功能,它 是一 種 鍵值( key-value )數據庫,使用 key 作為索引找到 當前緩存的數據, 并且返回給程序調用 者。

    當前的 Redis (redis3.0)支持 6 種數據類型,它們分別是字符串( String ) 、列表( List)、集合( set )、哈希結構( hash )、有序集合( zset)和基數( HyperLogLog )

    數據類型數據類型存儲的值說 明
    STRING (字符串)可以是保存字符串、整數和浮點數可以對字符串進行操作 ,比如增加字符或在子串,如果是整數或者浮點數 , 可以實現計算,比如自增等
    LIST ( 列表)它是一個鏈表,它 的每一個節點都包 含一個字符串Redis支持從鏈表的兩端插入或者彈出節點,或在通過偏移對它進行裁剪;還可以讀取一個或者多個節點, 根據條件刪除或者查找節點等
    SET (集合)它是一個收集器,但是是無序的,在它里面每一個元素都是一個字符串,而且是獨一無二 , 各不相同的可以新增、讀取、刪除單個元素 ; 檢測一個元索是否在集合中,計算它和1其他集合的交集并集和差集等;隨機從集合中讀取元素
    HASH ( 哈希散列表)它類似于 Java 語言中的 Map,是一個鍵值對應的無序列表可以附、刪 、 查、改單個鍵值對, 也可以獲取所有的鍵值對
    ZSET (有序集合〉它是一個有序的集合 , 可以包含字符串、整數、浮點數、分值( score ) , 元素的排序是依據分值的大小來決定的可以地、刪、查、改元素,根據分值的泡因或者成員來獲取對應的元素
    HyperLogLog (基數)它的作用是計算主復的值, 以確定存儲的數量只提供基數的運算,不提供返回的功能

    如上表格粗略描述了 Redis 的 6 種數據類型 , 并簡要說明了它們的作用,后面還會詳細介紹它們的數據結構和常用 Redis 命令 。

    此外, Red is 還支持一些事務 、 發布訂閱消息模式、 主從復制、持久化等。


    在線網站

    http://try.redis.io/

    總結

    以上是生活随笔為你收集整理的Redis-01Redis概述的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。