Redis初入門

Nosql:Not-Only SQL(泛指非關系型數據庫),作為關系型數據庫的補充

作用:應對基于海量用戶和海量數據前提下的數據處理問題

redis:C語言開發的一個開源的高性能鍵值對數據庫

特征:

1、數據之間沒有必然的關聯關系

2、內部采用單線程機制工作

3、高性能

4、多數據類型支持(string、list、hash、set、sorted_set)

5、支持持久化(可以進行數據災難恢復)

redis應用:

1、為熱點數據加速查詢(熱點商品、熱點新聞等)

2、任務隊列(秒殺、搶購、購票排隊等)

3、即時信息查詢(各類排行榜、網站訪問統計等)

4、時效性信息控制(驗證碼控制)

5、分布式數據共享(分布式集群架構中的session共享)

6、消息隊列

7、分布式鎖

數據類型相關命令:

string:字符串

命令說明
set [key] [value]添加、修改數據
get [key]獲取數據
del [key]刪除數據
mset [key1] [value1] [key2] [value2] ...添加、修改多個數據
mget [key1] [key2] ...獲取多個數據
strlen [key]獲取數據字符個數(字符串長度)
append [key] [value]追加信息到原信息尾部(如果原來信息存在就追加,否則新建)
incr [key]數據自增1
incrby [key] [increment]數據增加指定整數范圍
incrbyfloat [key] [increment]數據增加指定小數范圍
decr [key]數據自減1
decrby [key] [increment]數據減去自定范圍整數
setex [key] [seconds] [value]設置數據具有制定的生命周期(秒)
psetex [key] [milliseconds] [value]設置數據具有制定的生命周期(毫秒)

hash:哈希表結構

命令說明
hset [key] [field] [vaule]添加、修改數據
hget [key] [field]獲取數據
hgetall [key]獲取全部數據
hdel [key] [field1] [field2] ...刪除數據
hlen [key]獲取哈希表中字段的數量
hexists [key] [field]哈希表中是否存在該字段(返回存在的個數)
hkeys [key]獲取哈希表中所有字段名
hvals [key]獲取哈希表中所有字段值
hincrby [key] [field] [increment]設置指定字段的數值數據增加指定范圍的值(整數)
hincrbyfloat [key] [field] [increment]設置指定字段的數值數據增加指定范圍的值(小數)
hsetnx [key] [field] [value]存在字段不更新,不存在新增

list:有序的雙向鏈表

命令說明
lpush [key] [value1] [value2] ...添加、修改數據(左)
rpush [key] [value1] [value2] ...添加、修改數據(右)
lrange [key] [start] [stop]從左邊獲取數據,start(從0)開始,stop(-1代表倒1位置)結束
lindex [key] [index]從左邊讀取index位置的數據,index從0開始
llen [key]獲取數據個數
lpop [key]從左邊獲取一個數據并移除
rpop [key]從右邊獲取一個數據并移除
blpop [key1] [key2] ... [timeout]規定時間內從左邊獲取并移除數據,timeout秒級
brpop [key1] [key2] ... [timeout]規定時間內從右邊獲取并移除數據,timeout秒級
lrem [key] [count] [value]從左移除指定數據,count移除個數,value移除的數據

set:數據不重復

命令說明
sadd [key] [member1] [member2] ...添加數據
smembers [key]獲取全部數據
srem [key] [member1] [member2] ...刪除數據
scard [key]獲取集合數據總量
sismember [key] [member]判斷集合中是否包含指定數據,返回個數
srandmember [key] [count]隨機從集合中抽取count個數據,原集合不變
spop [key]隨機獲取集合中的某個數據,并移出集合
sinter [key1] [key2]求兩個集合的交集
sunion [key1] [key2]求兩個集合的并集
sdiff [key1] [key2]求兩個集合的差集,有順序的,key1 - key2的差集
sinterstore [key3] [key1] [key2]求(key1,key2)兩個集合的交集,并存儲到key3中
sunionstore [key3] [key1] [key2]求(key1,key2)兩個集合的并集,并存儲到key3中
sdiffstore [key3] [key1] [key2]求(key1,key2)兩個集合的差集,并存儲到key3中
smove [source] [destination] [member]把數據member從集合source移動到集合destination中

sorted_set:有序的set集合

命令說明
zadd [key] [score1] [member1] [score1] [member1] ...添加(多個)數據,按照score排序
zrange [key] [start] [stop] [withscores]獲取數據(升序),withscores會展示score值,start、stop為索引
zrevrange [key] [start] [stop] [withscores]獲取數據(降序)
zrem [key] [member1] [member2] ...刪除(多個)數據
zrangebyscore [key] [min] [max] [withscores] [limit]按條件升序獲取,min < score值 < max,limit限制條數
zrevrangebyscore [key] [max] [min] [withscores] [limit]按條件降序獲取
zremrangebyrank [key] [start] [stop]根據索引范圍刪除
zremrangebyscore [key] [min] [max]根據score值范圍刪除
zcard [key]獲取集合數據總量
zcount [key] [min] [max]獲取指定的score值范圍中的數據條數
zinterstore [destination] [keynumber] [key1] [key2] ...集合交集,keynumber為要操作的集合個數
zunionstore [destination] [keynumber] [key1] [key2] ...集合并集,keynumber為要操作的集合個數
zrank [key] [member]獲取指定數據的索引(升序)
zrevrank [key] [member]獲取指定數據的索引(降序)
zscore [key] [member]獲取指定數據的score值
zincrby [key] [increment] [member]給指定的member數據的score值增加increment

key通用操作:

命令說明
del [key]刪除指定key
exists [key]獲取key是否存在
type [key]獲取key的類型
expire [key] [second]為指定key設置有效期,秒級
pexpire [key] [milliseconds]為指定key設置有效期,毫秒級
ttl [key]獲取key的有效時間(秒),返回-2說明key不存在,返回-1說明key存在
pttl [key]獲取key的有效時間(毫秒)
persist [key]切換key從時效性轉換為永久性
rename [key] [newkey]為key改名,newkey如果已存在會覆蓋原先的值
renamenx為key改名,newkey如果已存在不會改名
sort排序

key查詢模式規則:

keys pattern

db基本操作:

命令說明
select [index]切換數據庫(0-16)
ping返回pong說明數據庫是連通的
quit退出
move [key] [dbindex]數據移動
dbsize當前庫中key的總量
flushdb清除當前庫的數據
flushall清除所有庫的數據

redis持久化:

1、rdb:以快照的形式記錄數據

save:保存命令

bgsave:后臺保存,會開啟子進程進行數據保存

save?[second] [count]:自動保存,在second(秒)時間內,改變count次

2、aof:記錄歷史命令,后臺會重寫

重寫的作用:

??1)、降低磁盤占用量,提高磁盤利用率

??2)、提高持久化效率,降低持久化寫時間,提高IO性能

??3)、降低數據恢復用時,提高數據恢復效率

重寫規則:

1、已超時的數據不再寫入

2、忽略無效指令,只保留最終數據的寫入命令

3、對同一數據的多條寫命令合并為一條命令(list,set,hash,zset指令一次性最多寫入64個元素)

bgrewriteaof:手動重寫

redis事務:

multi:開啟事務(設定事務的開啟位置,此命令執行后,后續的所有命令均加入到該事務中)

exec:執行事務(設定事務的結束位置,同時執行事務。與multi成對使用)

discard:取消事務(終止當前事務,發生在multi之后)

redis監控鎖:

watch?[key1] [key2]?...?:對key添加監視鎖,在執行exec前如果key發生變化,終止事務執行

unwatch:取消對所有key的監視

redis:分布式鎖(公共鎖):

setnx lock-[key]?value:設置公共鎖

del lock-[key]:釋放鎖

expire lock-[key] [second]:為鎖key添加時間限定,到時不釋放,自動釋放鎖(秒)

pexpire lock-[key] [milliseconds]:為鎖key添加時間限定,到時不釋放,自動釋放鎖(毫秒)

redis刪除策略:

1、定時刪除:用時間換空間

??好:節約內存,無占用

??壞:不分時段占用CPU資源,頻度高

2、惰性刪除:訪問某個key時,判斷該key是否過期,過期則清除

??好:延時執行,CPU利用率高

??壞:內存占用嚴重

3、定期刪除:每隔一定的時間,掃描一定數量的key,并清除其中過期的key。

redis同時使用惰性刪除和定期刪除這兩種過期策略

redis逐出策略:

相關配置

maxmemory:最大可使用內存

maxmemory-samples:每次選取待刪除的數據個數

哨兵模式:

定義:監控主從結構中各個redis服務器工作過程,當master出現故障時,通過投票機制選出新的master,并將所有的slave連接到新的master

工作原理:

1、監控master和各個slave

2、各個哨兵之間互通信息

3、當一個哨兵發現master出現故障,會通知其他哨兵復核,超出一半的哨兵發現master故障,會投票選出一個哨兵進行故障處理,選出一臺slave作為新master,通知其他slave連接到新的master

緩存預熱:系統啟動前,提前將相關的緩存數據直接加載到緩存系統,避免在用戶請求的時候,直接查詢數據庫,再將數據進行緩存的問題。讓用戶直接查詢事先被預熱的緩存數據。

緩存雪崩:一段時間內,大量的緩存數據過期,請求直接訪問數據庫,導致數據庫服務器造成大量壓力。

解決:

1、熱點數據使用永久key

2、為key設置不同的有效期

緩存擊穿:單個key數據過期瞬間,數據訪問量較大,大量對數據庫訪問,導致對數據庫服務器造成壓力。

解決:

1、熱點數據使用永久key

2、為key設置不同的有效期

緩存穿透:大量訪問不存在的數據,對數據庫服務器造成壓力。

解決:

1、返回結果為null也進行緩存,有效時間短

2、采用布隆過濾器

布隆過濾器:二進制數組,key經過多個hash函數得出的值就是數組的索引,索引對應位置的值會設置為1。新的key經過同樣步驟得出索引值,如果對應位置的值不全是1,說明這個key不存在,直接過濾掉。

問題:存在誤判。不同的值hash后可能結果一致,會導致不存在的key判斷為存在。

如何保證redis和數據庫數據一致性
1、先更新數據庫,再刪除redis(下次讀取時重新加載)
2、更新redis,同步更新數據庫(兩步操作在同一個事務中)
3、更新redis,發送消息同步到數據庫(redis掛了,未同步數據容易丟失)
4、更新數據庫,Canal監聽Binglog,通過MQ更新redis
5、延遲雙刪,更新數據庫前后刪除redis(第二次刪除延遲500ms)
6、分布式鎖,加鎖,更新數據庫和刪除緩存,釋放鎖

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

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

相關文章

【原神 × 二叉樹】角色天賦樹、任務分支和圣遺物強化路徑的算法秘密!

【原神 二叉樹】角色天賦樹、任務分支和圣遺物強化路徑的算法秘密! 作者:星之辰 標簽:#原神 #二叉樹 #天賦樹 #任務分支 #圣遺物強化 #算法科普 發布時間:2025年6月 總字數:6000+ 一、引子:提瓦特大陸的“樹型奧秘” 你是否曾留意過《原神》角色面板的天賦樹? 升級技能…

C++信息學競賽中常用函數的一般用法

在C 信息學競賽中&#xff0c;有許多常用函數能大幅提升編程效率。下面為你介紹一些常見函數及其一般用法&#xff1a; 一、比較函數 1、max()//求出a&#xff0c;b的較大值 int a10,b5,c;cmax(a,b);//得出的結果就是c等于10. 2、min()//求出a&#xff0c;b的較小值 int a1…

Linux【3】-----系統框架概述

系統架構 文件系統 linux一定需要掛載操作系統 一切皆文件 三個文件 引導文件 uboot.bin內核鏡像 zImage文件系統鏡像 system.img 設備樹文件&#xff08;屬于內核&#xff09; 應用程序編程 arm中通過軟中斷實現 各程序的構成 文件I/O 5種I/O模型 阻塞非阻塞信號多…

Tensorrt python api 10.11.0筆記

關于Tensorrt的python api文檔閱讀翻譯加總結 文檔源地址 Overview Getting started with TensorRT Installation(安裝) 安裝可參考:官方地址 Samples 關于樣例的內容可參考:樣例地址 Operator Documentation 有關更多信息&#xff08;包括示例&#xff09;&#xff0…

電鍍機的陽極是什么材質?

知識星球&#xff08;星球名&#xff1a;芯片制造與封測技術社區&#xff0c;點擊加入&#xff09;里的學員問&#xff1a;電鍍的陽極有什么講究&#xff1f;什么是可溶性陽極和非可溶性陽極&#xff1f; 什么是可溶性陽極與非可溶性陽極&#xff1f; 可溶性陽極 陽極本身就是…

前段三劍客之JavaScript-02

目錄 簡介 核心 函數 字符串對象 事件 運算符和控制語句 DOM 正則表達式 BOM JSON 簡介 JavaScript由JavaScript語法&#xff0c;DOM和BOM組成 JS中提供了一些輸入輸出語句&#xff1a; alert(); //瀏覽器彈出警示框 console.log(); //控制臺打印 prompt(); //瀏覽器…

Qiskit:量子計算模擬器

參考文獻&#xff1a; IBM Qiskit 官網Qiskit DocumentationQiskit Benchpress packageQiskit Algorithms package量子計算&#xff1a;基本概念常見的幾類矩陣&#xff08;正交矩陣、酉矩陣、正規矩陣等&#xff09;Qiskit 安裝指南-博客園使用Python實現量子電路模擬&#x…

【Elasticsearch】Elasticsearch 核心技術(二):映射

Elasticsearch 核心技術&#xff08;二&#xff09;&#xff1a;映射 1.什么是映射&#xff08;Mapping&#xff09;1.1 元字段&#xff08;Meta-Fields&#xff09;1.2 數據類型 vs 映射類型1.2.1 數據類型1.2.2 映射類型 2.實際運用案例案例 1&#xff1a;電商產品索引映射案…

serv00 ssh登錄保活腳本-郵件通知版

適用于自己有服務器情況&#xff0c;ssh定時登錄到serv00&#xff0c;并在登錄成功后發送郵件通知 msmtp 和 mutt安裝 需要安裝msmtp 和 mutt這兩個郵件客戶端并配置&#xff0c;參考如下文章前幾步是講配置這倆客戶端的&#xff0c;很簡單&#xff0c;不再贅述 用Shell腳本實…

前端 Electron 桌面應用學習筆記

前端 Electron 桌面應用學習筆記 介紹Electron是什么?為什么選擇Electron?創建你的第一個桌面應用程序啟動項目運行結果截圖打開調試面板方法生命周期函數常用配置配置窗口標題配置小圖標隱藏菜單欄關閉調試面板是否可以使用Node.js隱藏 Electron 標題、小圖標和菜單欄獲取窗…

LeetCode - 94. 二叉樹的中序遍歷

題目 94. 二叉樹的中序遍歷 - 力扣&#xff08;LeetCode&#xff09; 什么是中序遍歷 二叉樹的中序遍歷是按照"左-根-右"的順序訪問二叉樹中的所有節點。 具體過程&#xff1a; 先遍歷左子樹&#xff08;遞歸&#xff09;然后訪問根節點最后遍歷右子樹&#xff…

PyTorch——搭建小實戰和Sequential的使用(7)

import torch from torch import nn from torch.nn import Conv2d, MaxPool2d, Flatten, Linearclass TY(nn.Module):def __init__(self):"""初始化TY卷積神經網絡模型模型結構&#xff1a;3層卷積池化&#xff0c;2層全連接設計目標&#xff1a;處理32x32像素的…

C#、VB.net——如何設置窗體應用程序的外邊框不可拉伸

以Visual studio 2015為例&#xff0c;具體操作如下&#xff1a; 1、將窗體的“FormBorderStyle”屬性值修改為“FixedSingle”&#xff1a; 2、點擊“格式”——“鎖定控件”&#xff1a; 這樣生成的程序邊框即可固定住&#xff0c;無法拉伸。

深入了解NIO的優化實現原理

網絡 I/O 模型優化 網絡通信中&#xff0c;最底層的就是內核中的網絡 I/O 模型了。隨著技術的發展&#xff0c;操作系統內核的網絡模型衍生出了五種 I/O 模型&#xff0c;《UNIX 網絡編程》一書將這五種 I/O 模型分為阻塞式 I/O、非阻塞式 I/O、I/O 復用、信號驅動式 I/O 和異步…

【前端】vue3性能優化方案

以下是Vue 3性能優化的系統性方案&#xff0c;結合核心優化策略與實用技巧&#xff0c;覆蓋渲染、響應式、加載、代碼等多個維度&#xff1a; ?? 一、渲染優化 精準控制渲染范圍 v-if vs v-show&#xff1a; v-if&#xff1a;條件為假時銷毀DOM&#xff0c;適合低頻切換場景&…

在MATLAB中使用自定義的ROS2消息

簡明結論&#xff1a; 無論ROS2節點和MATLAB運行在哪&#xff0c;MATLAB本機都必須擁有自定義消息源碼并本地用ros2genmsg生成&#xff0c;才能在Simulink里訂閱這些消息。只要你想讓MATLAB或Simulink能識別自定義消息&#xff0c;必須把消息包源碼(.msg等)拷到本機指定目錄&a…

spring重試機制

數據庫死鎖處理與重試機制實現指南 1. 業務場景 1.1 問題現象 高并發批量數據處理時頻繁出現數據庫死鎖主要發生在"先刪除歷史數據&#xff0c;再重新計算"的業務流程中原有逐條處理方式&#xff1a;list.forEach(item -> { delete(); calculate(); }) 1.2 死…

QEMU源碼全解析 —— 塊設備虛擬化(24)

接前一篇文章:QEMU源碼全解析 —— 塊設備虛擬化(23) 本文內容參考: 《趣談Linux操作系統》 —— 劉超,極客時間 《QEMU/KVM源碼解析與應用》 —— 李強,機械工業出版社 特此致謝! QEMU寫入一個文件的完整過程 前邊用了十來篇文章的篇幅,解析了QEMU啟動過程中的存儲…

java中static學習筆記

較重要知識點 static修飾的變量是共享的在類加載時創建可以不通過實例來訪問靜態方法只能訪問靜態的成員和方法&#xff1b;而非靜態的可以訪問靜態的和非靜態的。靜態方法一般用在通用的方法&#xff0c;這樣方便調用&#xff0c;不然一個通用的方法每一次調用都要創建實例&a…

快刀集(1): 一刀斬斷視頻片頭廣告

一刀流&#xff1a;用一個簡單腳本&#xff0c;秒殺視頻片頭廣告&#xff0c;還你清爽觀影體驗。 1. 引子 作為一個愛生活、愛學習、愛收藏高清資源的老碼農&#xff0c;平時寫代碼之余看看電影、補補片&#xff0c;是再正常不過的事。 電影嘛&#xff0c;要沉浸&#xff0c;…