【Redis】背景知識

一、Redis的特性

???????Redis是一種基于鍵值對(key-value)的NoSQL數據庫,與很多鍵值對數據庫不同的是,Redis中的值可以是由string(字符串),hash(哈希),list(列表),set(集合),zset(有序集合),Bitmaps(位圖)等多種數據結構和算法組成,因此Redis可以滿足很多的應用場景,而且因為Redis會將所有數據都存放在內存中,所以他的讀寫性能非常驚人。不僅如此,Redis還可以將內存的數據利用快照和日志的形式保存到硬盤中,這樣在發生類似斷電或者機器故障的時候,內存中的數據不會“丟失”。除了上述功能以外,Redis還提供了鍵過期、發布訂閱、事務、流水線、Lua腳本等附加功能。總之,如果在合適的場景使用好Redis,就會像一把利劍。

???????Redis是一個在內存中存儲數據的中間件,用于作為數據庫,用于作為數據緩存,在分布式系統中能夠大展拳腳。?

1.1 速度快

正常情況下,Redis執行命令的速度非常快,為什么速度快呢??

  • Redis的所有數據都是存放在內存中的
  • Redis是用C語言實現的,一般來說,C語言實現的程序距離操作系統更近,執行速度相對會更快。(個人不認為,因為MySQL也是用C語言開發的)
  • Redis使用單線程,預防了多線程可能產生的競爭問題。(Redis在6.0版本中引入了多線程機制,但是主要也是在處理網絡和IO,不涉及到數據命令,即命令的執行仍然采用了單線程模式)
  • Redis的核心功能都是比較簡單的邏輯,核心功能都是比較簡單的操作內存的數據結構
  • 從網絡角度上,Redis使用了IO多路復用的方式(epoll)

多線程并不是在所有情況下都是快的!!!!!

???????多線程提高效率的前提是:CPU密集型的任務,使用多個線程可以充分的利用CPU多核資源,但是Redis的核心任務主要是操作內存的數據結構——不會吃很多CPU

1.2 基于鍵值對的數據結構服務器

???????幾乎所有的編程語言都提供了類似字典的功能,例如C++中的map,Java中的map,Python的dict等,類似于這種組織數據的方式叫做基于鍵值對的方式,與很多的鍵值對數據庫不同的是,Redis中的值不僅可以是字符串,而且還可以是具體的數據結構,這樣不僅能便于在許多應用場景的開發,同時也能提供開發效率。

1.3 豐富的功能

除了5種數據結構,Redis還提供了許多額外的功能:

  • 提供了鍵過期功能,可以用來使用緩存
  • 提供了發布訂閱功能,可以用來實現消息系統
  • 支持Lua腳本功能,可以利用Lua創造出新的Redis命令
  • 提供了簡單的事務功能,能在一定程序上保證事務特性
  • 提供了流水線功能,這樣客戶端能將一批命令一次性傳到Redis,減少了網絡的開銷

1.4 客戶端語言多

???????Redis提供了簡單的TCP通信協議,很多編程語言可以很方便地接入到Redis,并且由于Redis受到了社區和各大公司的廣泛認可,所以支持Redis的客戶端語言也非常多,幾乎涵蓋了主流的編程語言,例如C/C++,Java等。

1.5?持久化

???????通常來說,將數據放在內存中是不安全的,一旦發生斷電或者機器故障,重要的數據可能就會丟失,因此Redis提供了兩種持久化方式:RDB和AOF,即可以使用兩種策略將內存的數據保存到硬盤中,這樣就保證了數據的可持久性。

1.6?主從復制

???????Redis提供了復制功能,實現了多個相同數據的Redis副本,復制功能是分布式Redis的基礎。

1.7?高可用和分布式

???????Redis提供了高可用實現的Redis哨兵,能夠保證Redis節點的故障發現和故障自動轉移,也實現了Redis集群,是真正的分布式實現,提供了高可用,讀寫和容量的擴展性。

二、Redis的使用場景

2.1 Redis可以做什么

緩存

???????緩存機制幾乎在所有大型網站中都有使用,合理地使用緩存不僅可以加速數據的訪問速度,而且能夠有效地降低后端數據源的壓力。Redis提供了鍵值過期時間設置,并且也提供了靈活控制最大內存和內存溢出后的淘汰策略。

session storage?

???????cookie(只是在瀏覽器這邊存儲了一個用戶的身份標識sessionid)=>實現用戶身份信息的保存,需要session配合(session是存放在服務器上的)

如何解決上述問題?

  1. 想辦法讓負載均衡器把同一個用戶的請求始終打到同一臺機器上(不能輪詢,而是需要通過userid之類的方式來分配機器)
  2. 把會話數據單獨拎出來,放到一組獨立的機器上存儲(Redis)?

數據庫存儲

???????將Redis當做了數據庫,大多數情況下,考慮到數據存儲優先考慮的是“大”,但是仍然有一些場景考慮的是“快”。例如:搜索引擎對性能的要求非常高,其中沒有使用到MySQL這樣的數據庫,把所有需要檢索的數據存放在內存中,使用類似于Redis這樣的內存數據庫來完成的。

消息隊列系統

???????消息隊列系統可以說是一個大型網站的必備基礎組件,因為其具有業務解耦、非實時業務削峰等特性。Redis提供了發布訂閱功能和阻塞隊列的功能,雖然和專業的消息隊列比還不夠足夠強大,但是對于一般的消息隊列功能基本可以滿足。

2.2 Redis不可以做什么

???????站在數據規模的角度看,數據可以分為大規模數據和小規模數據,我們知道Redis的數據是存放在內存中的,雖然現在內存已經足夠便宜了,但是如果數據量非常大,使用Redis來進行存儲的話,基本是一個無底洞,經濟成本相當高。

???????站在數據冷熱的角度,數據分為熱數據和冷數據,熱數據通常是指需要頻繁操作的數據,反之為冷數據。如果將冷數據放在Redis上,基本上是對于內存的一種浪費,但是對于一些熱數據可以放在Redis中加速讀寫,也可以減輕后端存儲的負載,可以說是事半功倍。

三、Redis的安裝(Ubuntu)

???????安裝Redis5 系列,在Linux中進行安裝,Redis官方是不支持Windows版本的,微軟維護了一個Windows版本的Redis分支。

在Ubuntu中的安裝步驟如下:

  1. 先切換到root用戶,su命令切換到root
  2. 使用apt命令來搜索redis相關的軟件包,apt search redis
  3. 使用apt命令安裝redis,apt install redis
  4. 需要手動修改配置文件(redis.conf),將ip進行更改
  5. 重新啟動服務器,service redis-server restart
  6. 使用redis自帶的客戶端來連接服務器,redis-cli
  7. 使用ctrl + d 退出客戶端

什么是配置文件?

???????很多軟件都是有配置文件的,一個大的軟件里面包含了很多的功能,有很多可以定制化的操作,就可以通過配置文件選擇開啟/關閉/設定某些功能~

四、Redis客戶端介紹

Redis是一個客戶端-服務器結構的程序!!!(MySQL也是)

Redis的客戶端也有很多種形態:

  1. 自帶了命令行客戶端:redis-cli
  2. 圖形化界面的客戶端:桌面程序,web程序(像這樣的圖形化程序,依賴windows系統,而未來會有諸多限制,你的windows上的圖形化界面客戶端能不能連上你們的服務器里的redis,是一個未知數)
  3. 基于Redis的api自行開發客戶端:非常類似于mysql的C語言和JDBC

我們在來回顧一下Redis的快:

???????我們談到的redis的快是相對于MySQL這樣的關系型數據庫的,但是如果是直接和內存中的操作變量相比,就沒有優勢了,甚至更慢了!!!

  • 使用hash map是直接操作內存,使用redis是先通過網絡,在操作內存

我們需要對癥下藥(具體問題具體分析):

  • 上述場景中,是否需要使用redis,需要結合實際的需求來確定!!!
  • 引入Redis的缺點:會更慢,但是有了Redis之后,我們可以將其擴展為分布式,也可以將數據單獨存儲,后續服務器重啟,不會影響到數據內容。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/900748.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/900748.shtml
英文地址,請注明出處:http://en.pswp.cn/news/900748.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Redis的used_memory_peak_perc和used_memory_dataset_perc超過90%會怎么樣

當Redis的used_memory_peak_perc(當前內存占歷史峰值的百分比)和used_memory_dataset_perc(數據集內存占比)均超過90%時,可能引發以下問題及風險: 一、used_memory_peak_perc > 90% 的影響 內存交換風險…

嵌入式---灰度傳感器

灰度傳感器概覽 一、定義與核心功能 1. 定義 灰度傳感器是一種基于 光反射原理 的光電傳感器,通過檢測物體表面對入射光(多為紅外光或可見光)的反射強度,將光信號轉換為電信號,從而判斷目標物體的 灰度值&#xff0…

0303hooks-react-仿低代碼平臺項目

文章目錄 1. 副作用2.其他內置hooks2.1 useEffect2.2 useRef2.3useMemo2.4 useCallback 3.自定義hooks4. 第三方hooks5. hooks使用原則6. hooks閉包陷阱7. 總結結語 1. 副作用 當組件渲染完成時,加載一個Ajax網絡請求當某個state更新時,加載一個Ajax網絡…

Zephyr、FreeRTOS、RT-Thread 定時器區別分析

一、核心特性對比 特性ZephyrFreeRTOSRT-Thread定時器類型系統定時器(k_timer)、硬件定時器軟件定時器(基于系統tick)軟件定時器、硬件定時器定時模式單次、周期性單次、自動重載(周期性)單次、周期、自定…

手撕unique_ptr 和 shareed_ptr

文章目錄 unique_ptrshared_ptr unique_ptr template<class T> class Unique_ptr { private:T* ptrNULL; public://1、刪除默認的拷貝構造函數Unique_ptr(Unique_ptr& u) delete;//2、刪除默認的復制構造Unique_ptr& operator(Unique_ptr& u) delete; …

對比 HashMap 和 ConcurrentHashMap 擴容邏輯的差異

HashMap 和 ConcurrentHashMap 在 擴容邏輯 上有明顯的差異&#xff0c;尤其是在并發環境下的處理策略&#xff0c;這是它們核心區別之一。 &#x1f9f1; 一、總體對比表&#xff08;JDK 8 為例&#xff09; 特性HashMapConcurrentHashMap線程安全? 否? 是是否支持并發擴容…

Linux 的準備工作

1.root用戶登錄 首先講一下root賬戶怎么登陸 直接 ssh root 公ip地址就可以了 比如我的是騰訊云的 這個就是公ip 下面所有普通用戶的操作都是在root賬戶下進行的 2.普通用戶創建 創建用戶指令 adduser 用戶名 比如說這個指令 我創建了一個ly_centos的普通用戶 3.普通用…

自動變為 VIP 文章

今天突然發現自己寫的大部分文章都被自動設為了VIP文章。 我這才想起來以前好像填過一個什么表&#xff0c;說要允許CS-DN把自己寫的文章自動設為VIP文章。 我也忘了為啥要允許CSDN動我寫的文章了&#xff0c;把幾乎所有文章都給設為VIP顯然是不合適的&#xff0c;畢竟文章是給…

Vue3+Vite+TypeScript+Element Plus開發-08.登錄設計

系列文檔目錄 Vue3ViteTypeScript安裝 Element Plus安裝與配置 主頁設計與router配置 靜態菜單設計 Pinia引入 Header響應式菜單縮展 Mockjs引用與Axios封裝 登錄設計 登錄成功跳轉主頁 多用戶動態加載菜單 文章目錄 目錄 系列文檔目錄 文章目錄 前言 一、登錄mo…

全新二手羅德SMCV100B信號發生器SMBV100A

全新二手羅德SMCV100B信號發生器SMBV100A SMCV100B信號發生器SMBV100A主要特點 適用于廣播電視、導航、蜂窩和無線應用的多標準平臺 全軟件選件定義的矢量信號發生器&#xff0c;具備 5″ 觸摸屏 全新的射頻信號生成概念&#xff0c;頻率范圍介于 4 kHz 至 7.125 GHz 輸出功率…

spring mvc @ResponseBody 注解轉換為 JSON 的原理與實現詳解

ResponseBody 注解轉換為 JSON 的原理與實現詳解 1. 核心作用 ResponseBody 是 Spring MVC 的一個注解&#xff0c;用于將方法返回的對象直接序列化為 HTTP 響應體&#xff08;如 JSON 或 XML&#xff09;&#xff0c;而不是通過視圖解析器渲染為視圖&#xff08;如 HTML&…

OpenCV——圖像融合

OpenCV——圖像融合 一、引言1.1 圖像融合分類 二、C代碼實現三、效果展示3.1 標準球3.2 鋁制底座 一、引言 在許多計算機視覺應用中(例如機器人運動和醫學成像)&#xff0c;需要將來自多幅圖像的相關信息集成到一幅圖像中。這種圖像融合將提供更高的可靠性、準確性和數據質量…

機器學習之PCA主成分分析詳解

文章目錄 引言一、PCA的概念二、PCA的基本數學原理2.1 內積與投影2.2 基2.3 基變換2.4 關鍵問題及優化目標2.5 方差2.6 協方差2.7 協方差矩陣2.8 協方差矩陣對角化 三、PCA執行步驟總結四、PCA參數解釋五、代碼實現六、PCA的優缺點七、總結 引言 在機器學習領域&#xff0c;我…

springboot自動配置原理例子講解

Spring Boot 的自動配置是其核心特性之一&#xff0c;它幫助開發者**"開箱即用"**地使用各種第三方庫或 Spring 組件&#xff0c;而無需手動配置 Bean。這一切的背后&#xff0c;都依賴于 Spring Boot 的自動配置機制。 我們分兩部分來說&#xff1a; Spring Boot 自…

一款基于 .NET 8 + Vue 開源的、企業級中后臺權限管理系統

前言 今天大姚給大家分享一款基于 .NET 8 Vue 開源、前后端分離的企業級中后臺權限管理系統&#xff0c;助力快速完成常規業務需求開發&#xff1a;ApeVolo.Admin。 項目介紹 ApeVolo.Admin 一款基于.NET 8、SqlSugar、Vue、Elment UI、RBAC、前后端分離、開源&#xff08;…

vue3騰訊云直播 前端推流

1、在index.html文件中引入&#xff08;在body體中&#xff09; <script src"https://video.sdk.qcloudecdn.com/web/TXLivePusher-2.1.1.min.js" charset"utf-8"></script> 2、vue文件中&#xff0c;添加video推流&#xff08;我用的推流地…

藍疊模擬器過檢測全攻略

BlueStacks藍疊MagiskLsposed安裝和過應用檢測教程 藍疊MagiskLsposed安裝和過應用檢測教程 引言 藍疊模擬器憑借其出色的性能和兼容性&#xff0c;在電腦上運行安卓應用和游戲方面備受青睞。然而&#xff0c;眾多應用和游戲為確保公平性與安全性&#xff0c;加入了模擬器檢測…

Flutter Invalid constant value.

0x00 問題 參數傳入變量&#xff0c;報錯&#xff01; 代碼 const Padding(padding: EdgeInsets.all(20),child: GradientProgressIndicator(value: _progress), ),_progress 參數報錯&#xff1a;Invalid constant value. 0x01 原因 這種情況&#xff0c;多發生于&#xff…

搜廣推校招面經七十一

滴滴算法工程師面經 一、矩陣分解的原理與優化意義 矩陣分解在推薦系統中是一個非常核心的方法&#xff0c;尤其是在 協同過濾(Collaborative Filtering) 中。我們可以通過用戶對物品的評分行為來推測用戶的喜好&#xff0c;從而推薦他們可能喜歡的內容。 1.1. 直觀理解&…

實習技能記錄【2】-----LVGL[基本概念]

LVGL主要概念 1. Screen (屏幕): 概念: 屏幕是 LVGL 應用程序中的頂層容器。它是用戶界面的根對象&#xff0c;所有的可見 UI 元素最終都會添加到某個屏幕上&#xff08;通常是活動屏幕&#xff09;。 功能: 作為其他 UI 元素的父對象。 可以擁有自己的背景顏色、背景圖片等樣…