01-Redis-基礎

1 redis誕生歷程

? ? ? ? redis的作者筆名叫做antirez,2008年的時候他做了一個記錄網站訪問情況的系統,比如每天有多少個用戶,多少個頁面被瀏覽,訪客的IP、操作系統、瀏覽器、使用的搜索關鍵詞等等(跟百度統計、CNZZ功能一樣)。最開始存儲方案用MySQL,但是實在慢的不行,09年的時候antirez就自己寫了一個內存的list,這就是redis。

最開始redis支持List。現在數據類型豐富了、功能也豐富了,在全世界都非常的流行。
redis(REmote DIctionary Service),遠程字典服務。

2 SQL與NOSQL

????????在絕大部分的時候,我們都會先考慮使用關系型數據庫來存儲業務數據,比如MySQL、Oracle等等。
? ? ? ? 關系型數據庫特點:
? ? ? ? 1、它以表格的形式,基于行存儲數據,是一個二維模式
? ? ? ? 2、它存儲的是結構化的數據,數據存儲有固定的模式(schema),數據需要適用表結構
? ? ? ? 3、表與表之間存在關聯(Relationship)
? ? ? ? 4、大部分關系型數據庫都支持SQL(結構化查詢語言)的操作,支持復雜的關聯查詢
? ? ? ? 5、通過支持事務(ACID)來提供嚴格或者實時的數據一致性
????????

? ? ? ? 關系型數據庫也存在一些限制:
? ? ? ? 1、要實現擴容的話,只能向上(垂直)擴展,比如磁盤限制了數據的存儲,就要擴大磁盤容量
? ? ? ? ? ? ?通過堆硬件的方式,不支持動態的擴縮容。水平擴容需要復雜的技術來實現,比如分庫分
?????????????表。
? ? ? ? 2、表結構修改困難,因此存儲的數據格式也受到限制
? ? ? ? 3、關系型數據庫通常會把數據持久化到磁盤,在高并發和高數據量的情況下,基于磁盤的讀
??????????????寫壓力比較大。
????????

? ? ? ? 為了解決關系型數據庫的限制,所以有了非關系型數據庫的存在,我們一般叫做non-relational或者Not Only SQL。NoSQL最開始是不提供SQL(Structured Query Language)的數據庫的意思。
? ? ? ? 非關系型數據庫的特點:
? ? ? ? 1、存儲非結構化的數據,比如文本、圖片、音頻、視頻
? ? ? ? 2、表與表之間沒有關聯,可擴展性強
? ? ? ? 3、保證數據的最終一致性,遵循BASE(堿)理論。Basically Available(基本可用); Soft-state
? ? ? ? ? ? ? ?(軟狀態) Eventually Consistent(最終一致性)
? ? ? ? 4、支持海量數據的存儲和高并發的高效讀寫
? ? ? ? 5、支持分布式,能夠對數據進行分片存儲、擴縮容簡單

對于不同的存儲類型,我們又有各種各樣的非關系型數據庫,比如有幾種常見的類型:
? ? ? ? 1、KV存儲:redis和Memcached
? ? ? ? 2、文檔存儲: MongoDB
? ? ? ? 3、列存儲:HBase
? ? ? ? 4、圖存儲:Neo4j
? ? ? ? 5、對象存儲
? ? ? ? 6、XML存儲等等

SQL與NoSQL的特性合在一起NewSQL數據庫,NewSQL結合了SQL與NoSQL的特性,例如TiDB、VoltDB、ScaleDB

特性SQLNoSQLNewSQL
關系模型沒有
SQL語法沒有
ACID沒有
水平擴展沒有
海量數據沒有
無結構化沒有沒有

?3 redis 特性

????????對于redis,我們大部分的時候認識一個緩存的組件,當然從它的發展歷史我們也可以看到,它最開始并不是作為緩存使用的,只是在很多的互聯網應用里面,它作為緩存發揮了最大的作用1、把數據放到內存中:一是內存的速度更快,10W QPS; 二是減少計算的時間,減輕數據庫壓力。

2、如果用內存的數據結構作為緩存,為什么不用HashMap或者Memcached;
? ? ? ? 1)、更豐富的數據類型?
?????????2)、支持多種編程語言?
????????3)、功能豐富:持久化機制、內存淘汰策略、事務、發布訂閱、pipeline、lua
????????4)、支持集群、分布式

4 基本數據類型

4.1 String字符串

? ? ? ?最基本也是最常用的數據類型就是String,set和get命令就是String的操作命令,redis的字符串被叫做二進制安全的字符串。

#獲取指定范圍的字符
getrange bonnie 0 1
# 獲取值長度
strlen bonnie
#字符串追加內容
append bonnie good
# 設置多個值(批量操作,原子性)
mset bonnie 2673 huihui 666
#獲取多個值
mget bonnie huihui
# 設置值,如果 key 存在,則不成功
setnx bonnie pyy
# 基于此可實現分布式鎖。用 del key 釋放鎖。
#但如果釋放鎖的操作失敗了,導致其他節點永遠獲取不到鎖,怎么辦?
# 加過期時間。單獨用 expire 加過期,也失敗了,無法保證原子性,怎么辦?多參數set key value [expiration EX seconds|PX millisecondsl[NX|XX]
#使用參數的方式
set k1 v1 EX 10 NX
#整數值遞增(值不存在會得到1)
incr bonnie
incrby bonnie 100
#整數值遞減
decr bonnie
decrby bonnie 100
# 浮點數增量
set mf 2.6
incrbyfloat mf 7.3

4.2 Hash

Hash用來存儲多個無序鍵值對,最大存儲數量2的32次方-1(40億左右)

# key: h1  field: f  value: 6
hset hl f 6
# key: h1  field: e  value: 5
hset hl e 5
# 批量設置多個field
hmset hl a l b 2 c3 d 4
hget hl a
hmget hl a b c d
hkeys hl
hvals hl
hgetall hl
hdel h1 a
hlen h1

? ? 4.3 List列表

? ? ? ? 存儲有序的字符串(從左到右),元素可以重復,最大的存儲數量2的32次方-1(40億左右)

lpush queue a
lpush queue b c
rpush queue d e
lpop queue
rpop queue
lindex queue 0
lrange queue 0 -1

4.4? set集合

? ? ? ? set存儲String類型的無序集合,最大存儲數量2的32次方-1(40億左右)

// 添加一個或者多個元素
sadd myset a b c d e f g
// 獲取所有元素
smembers myset
// 統計元素個數
scard myset
// 隨機獲取一個元素
srandmember myset
// 隨機彈出一個元素
/spop myset/
/移除一個或者多個元素
srem myset d e f
// 查看元素是否存在
sismember myset a

? 4.5 Zset有序集合??

sorted set存儲有序的元素,每個元素有score,按照score從小到大排名,score相同時,按照key的ASCLL碼排序

// 添加元素
zadd myzset 10 java 20 php 30 ruby 40 cpp 50 python
// 獲取全部元素
zrange myzset 0 -l withscoreszrevrange myzset 0 -l withscores
// 根據分值區間獲取元素
zrangebyscore myzset 20 30
//移除元素 也可以根據 score rank 刪除
zrem myzset php cpp
//統計元素個數
zcard myzset
//分值遞增
zincrby myzset 5 python
//根據分值統計個數
zcount myzset 20 60
// 獲取元素 rank
zrank myzset python
// 獲取元素 score
zscore myzset python
//也有倒序的 rev操作(reverse)

本章節簡單講了下redis的五種基本數據類型,下章節講解底層數據結構,以及實現

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

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

相關文章

在 Ubuntu 上離線安裝 Prometheus 和 Grafana

在 Ubuntu 上離線安裝 Prometheus 和 Grafana 的步驟如下: 一.安裝驗證 二.安裝步驟 1.準備離線安裝包 在一臺可以訪問互聯網的機器上下載 Prometheus 和 Grafana 的二進制文件。 Prometheus 下載地址:Prometheus 官方下載頁面Grafana 下載地址:Grafana 官方下載頁面下載所…

mapbox基礎,加載ESRI OpenStreetMap開放街景標準風格矢量圖

????? 主頁: gis分享者 ????? 感謝各位大佬 點贊?? 收藏? 留言?? 加關注?! ????? 收錄于專欄:mapbox 從入門到精通 文章目錄 一、??前言1.1 ??mapboxgl.Map 地圖對象1.1 ??mapboxgl.Map style屬性二、??加載ESRI OpenStreetMap開放街景標準風…

Java 集合有序性與重復性總結及記憶技巧

Java 集合有序性與重復性總結及記憶技巧 一、集合分類速查表 集合類型是否有序是否允許重復記憶口訣ArrayList? 有序(插入順序)? 可重復"數組列表,順序記牢"LinkedList? 有序(插入順序)? 可重復"…

記錄學習的第二十三天

老樣子,每日一題開胃。 我一開始還想著暴力解一下試試呢,結果不太行😂 接著兩道動態規劃。 這道題我本來是想用最長遞增子序列來做的,不過實在是太麻煩了,實在做不下去了。 然后看了題解,發現可以倒著數。 …

MTK-Android12-13 屏幕永不休眠功能實現

MTK-Android12-13 屏幕永不休眠功能實現 文章目錄 需求場景參考資料修改文件簡要分析實現方案默認休眠時間設置 def_screen_off_timeout息屏時間添加永不休眠 screen_timeout_entries更新休眠時間 updateUserActivitySummaryLocked 總結 需求 屏幕永不休眠功能 備注&#xff…

Lua 中,`math.random` 的詳細用法

在 Lua 中&#xff0c;math.random 是用于生成偽隨機數的核心函數。以下是其詳細用法、注意事項及常見問題的解決方案&#xff1a; Lua 中&#xff0c;math.random 的詳細用法—目錄 一、基礎用法1. 生成隨機浮點數&#xff08;0 ≤ x < 1&#xff09;2. 生成指定范圍的隨機…

HOW - React Error Catch 機制

目錄 1. 錯誤邊界&#xff08;Error Boundaries&#xff09;使用場景寫法&#xff08;類組件方式&#xff09;&#xff1a;componentDidCatch 2. 事件處理器中的錯誤3. 異步函數中的錯誤&#xff08;如 fetch、Promise&#xff09;4. 全局未捕獲錯誤&#xff08;適用于整個 Rea…

1.ElasticSearch-入門基礎操作

一、介紹 The Elastic Stack 包含ElasticSearch、Kibana、Beats、LogStash 這就是所說的ELK 能夠安全可靠地獲取任何來源、任何格式的數據&#xff0c;然后實時地對數據進行搜索、分析和可視化。Elaticsearch,簡稱為ES&#xff0c;ES是一個開源的高擴展的分布式全文搜索引擎,是…

通過扣子平臺將數據寫入飛書多維表格

目錄 1.1 創建飛書開放平臺應用 1.2 創建飛書多維表格 1.3 創建扣子平臺插件 1.1 創建飛書開放平臺應用 1.1.1 打開地址&#xff1a;飛書開放平臺&#xff0c;點擊創建應用 注&#xff1a;商店應用需要申請ISV資質&#xff0c;填寫企業主體信息&#xff0c;個人的話&#x…

MYSQL數據庫語法補充

一&#xff0c;DQL基礎查詢 DQL&#xff08;Data Query Language&#xff09;數據查詢語言&#xff0c;可以單表查詢&#xff0c;也可以多表查詢 語法&#xff1a; select 查詢結果 from 表名 where 條件&#xff1b; 特點&#xff1a; 查詢結果可以是&#xff1a;表中的字段…

Redis到底能不能做主數據庫?

張三拍案而起&#xff1a;“Redis 是緩存數據庫&#xff0c;怎么能當主數據庫用&#xff1f;簡直是天方夜譚&#xff01;” 李四冷笑回應&#xff1a;“你沒用過&#xff0c;憑什么說不行&#xff1f;我已經用 Redis 做主數據庫好幾年了&#xff0c;系統穩定得像鐵板一塊&…

flutter 項目結構目錄以及pubspec.ymal等文件描述

在Flutter項目中&#xff0c;目錄結構和pubspec.yaml文件是非常重要的組成部分&#xff0c;它們定義了項目的結構、依賴管理以及如何構建和運行項目。下面我將詳細解釋這些關鍵元素&#xff1a; 1. Flutter項目目錄結構 Flutter項目的標準目錄結構通常如下所示&#xff1a; …

CentOS 環境下 MySQL 數據庫全部備份的操作指南

最近阿里云個人服務到期&#xff0c;因為是很久之前買的測試機器&#xff0c;配置較低&#xff0c;上面運行的有技術博客 和以往的測試項目&#xff0c;所以準備放棄掉。 需要備份下上面的表結構和數據、以及代碼倉庫。 下面是一個完整的 CentOS 環境下 MySQL 數據庫全部備份…

ecplise 工具 沒有Java EE Tools 選項

Java EE Tools 是將項目轉換為web項目的重要的快捷鍵&#xff0c;如果進行web開發 那是不可或缺的 該工具是一個插件&#xff0c;可以作為插件安裝到ecplise上 安裝步驟如下&#xff1a; 找到help-->install new software 在彈出的頁面中 work with中輸入&#xff1a;Jun…

544 eff.c 1761 優化設計文檔

1:性能分析 1.1性能對比 oneapi 與hygonGcc性能對比發現&#xff0c;544課題中的eff.c 1761循環處&#xff0c;oneapi 進行了循環向量化, gcc使用標量&#xff0c;循環源碼前加 #pragma clang loop vectorize(disable) 找出oneapi在該循環處關閉和開啟loop vect 的性能差距&a…

LeetCode.3396.使數組元素互不相同所需的最少操作次數

3396. 使數組元素互不相同所需的最少操作次數 給你一個整數數組 nums&#xff0c;你需要確保數組中的元素 互不相同 。為此&#xff0c;你可以執行以下操作任意次&#xff1a; 從數組的開頭移除 3 個元素。如果數組中元素少于 3 個&#xff0c;則移除所有剩余元素。 注意&…

【已完結STM32】--自學江協科技筆記匯總

以下學習筆記代碼均來自b站江協科技視頻 筆記匯總完結 文章筆記對應江科大視頻新建工程【2-2】新建工程江科大STM32-GPIO輸出 點亮LED&#xff0c;LED閃爍&#xff0c;LED流水燈&#xff0c;蜂鳴器&#xff08;學習筆記&#xff09;_unit32-t rcc-apb2periph-CSDN博客 【3-1】…

QML Loader:加載組件與狀態監控

目錄 引言相關閱讀工程結構示例一&#xff1a;從文件加載組件 (LoaderFile.qml)代碼實現被加載的組件&#xff1a;MyComponent.qml代碼解析運行效果 示例二&#xff1a;直接加載Component對象 (LoaderComponent.qml)代碼實現代碼解析運行效果 示例三&#xff1a;監控加載狀態 (…

K8S核心技術點

Pod&#xff0c;Service和Deployment的關系 Pod&#xff1a;Kubernetes 中最小的部署單元&#xff0c;用于運行容器化應用。 Service&#xff1a;提供服務發現和負載均衡&#xff0c;為 Pod 提供穩定的網絡端點&#xff0c;ClusterIP&#xff0c;NodePort&#xff0c;LoadBala…

Spring 核心注解深度解析:@Autowired、@Repository 與它們的協作關系

引言 在 Spring 框架中&#xff0c;?依賴注入&#xff08;DI&#xff09;?? 是實現松耦合架構的核心機制。Autowired 和 Repository 作為兩個高頻使用的注解&#xff0c;分別承擔著 ?依賴裝配? 和 ?數據訪問層標識? 的關鍵職責。本文將深入探討它們的功能特性、協作模式…