Redis 安裝與使用

来源:https://www.cnblogs.com/Yee-Q/archive/2022/08/07/16559735.html
-Advertisement-
Play Games

NoSQL 1. 定義 NoSQL(Not Only SQL)即不僅僅是 SQL,泛指非關係型的資料庫 2. 為什麼使用 NoSQL? 傳統關係資料庫在應付動態網站、特別是超大規模和高併發的純動態網站已經顯得力不從心了,如商品網站中對商品數據的頻繁查詢、熱搜商品的排行統計、訂單超時問題。雖然能實現功 ...



NoSQL

1. 定義

NoSQL(Not Only SQL)即不僅僅是 SQL,泛指非關係型的資料庫

2. 為什麼使用 NoSQL?

傳統關係資料庫在應付動態網站、特別是超大規模和高併發的純動態網站已經顯得力不從心了,如商品網站中對商品數據的頻繁查詢、熱搜商品的排行統計、訂單超時問題。雖然能實現功能,但性能不樂觀,而且實現異常複雜,nosql 的出現更好地解決了這些問題

3. 分類

鍵值存儲資料庫:

  • 說明:主要使用哈希表,這個表有一個特定的鍵和一個指針指向特定的數據
  • 特點:簡單易部署,海量數據下對其中部分值進行查詢或更新時,效率低下
  • 相關產品:Redis、SSDB

列存儲資料庫:

  • 說明:通常用來應付分散式存儲的海量數據
  • 特點:鍵依然存在,但一個鍵指向多個列,由路由鍵決定實際指向哪一個列
  • 相關產品:HBase

文檔型資料庫:

  • 說明:同第一種鍵值存儲類似,該類型的數據模型是版本化的文檔,以特定格式存儲,比如 JSON
  • 特點:以文檔形式存儲,允許嵌套鍵值,可以存儲與表現更複雜的數據,查詢效率更高
  • 相關產品:MongoDB

圖形資料庫:

  • 說明:使用靈活的圖形模型,並且能擴展到多個伺服器
  • 特點:可以存儲靈活的數據模型,比如地圖
  • 相關產品:InfoGrid

4. 應用場景

  • 數據模型比較簡單
  • 系統靈活性要求高
  • 對資料庫性能要求較高
  • 不需要高度的數據一致性(Nosql產品對於事務支持不是特別好)

Redis 概述

1. 什麼是 Redis?

Redis 是一個開源的基於記憶體數據存儲結構,通常用於資料庫,緩存和消息中間件

2. 特點

  • 高性能 key-value 記憶體型資料庫
  • 支持豐富的數據類型(String、List、Set、Hash)
  • 支持數據持久化
  • 單進程,單線程,不存在併發問題,線程安全
  • 效率高,自身有優化非同步處理

3. windows 環境安裝

該項目已經多年未更新了,不過作為學習測試還是足夠的,下載 Redis-x64-3.2.100.zip 並解壓,進入解壓目錄

打開 cmd 指令視窗,輸入命令

.\redis-server.exe .\redis.windows-service.conf

即可運行 Redis

4. Linux 環境安裝

以 Ubuntu 18.04.5 為例,安裝方法有三種:

4.1 apt-get 方式安裝

安裝命令

apt-get install -y redis-server

查看 Redis 狀態

service redis-server status

可以看到 Redis 狀態是 active(running),正在運行當中

啟動、停止、重啟命令如下

service redis-server start
service redis-server stop
service redis-server restart

預設配置文件位於 /etc/redis/redis.conf

卸載 Redis 命令如下

apt-get purge --auto-remove redis-server
4.2 源碼方式安裝

下載源碼壓縮包並解壓

wget https://download.redis.io/releases/redis-7.0.4.tar.gz
tar -zxvf redis-7.0.4.tar.gz

由於 Redis 使用 C 語言編寫,所以我們需要先安裝 gcc 依賴才能完成編譯

apt-get update
apt-get install build-essential

進入解壓縮目錄執行命令,開始編譯

make MALLOC=libc

編譯完成後會生成一些可執行文件,執行如下命令進行安裝

# 表示安裝位置在 /usr/redis
make install PREFIX=/usr/redis

進入 /usr/redis/bin 目錄啟動 Redis 服務

./redis-server	# 使用預設配置

進入 /usr/redis/bin 目錄啟動 Redis 客戶端

# raw 參數的作用是顯示中文
./redis-cli -h localhost -p 6379 --raw

預設 redis 伺服器沒有開啟遠程連接,也就是預設拒絕所有遠程客戶端連接,需要修改配置開啟遠程連接

vim redis.conf

# 允許一切客戶端連接
bind 127.0.0.1 修改為 0.0.0.0

預設安裝目錄沒有任何配置文件,如果需要指定配置文件啟動,要在源碼目錄複製 redis.conf 到安裝目錄,再執行命令

./redis-server ../redis.conf

加上 & 可讓 redis 服務後臺啟動

redis-server ./redis.conf &

Redis 操作

1. 庫(database)

存放數據的一個基本單元,一個庫可以存放 key-value 鍵值對,redis 中每個庫都有一個唯一名稱,編號從 0 開始,預設庫的個數為 16 個,預設使用 0 號庫,庫與庫之間彼此隔離

# 切換庫
SELECT 0
# 清除當前庫
FLUSHDB
# 清除全部庫
FLUSHALL

2. 操作 key

-- DEL 指令
	-- 語法:DEL key [key..]
	-- 作用:刪除給定的一個或多個 key。不存在的 key 會被忽略。
	-- 返回值:被刪除 key 的數量
--EXISTS 指令
	-- 語法:EXISTS key
	-- 作用:檢查給定 key 是否存在
	-- 返回值:設置成功返回 1
-- EXPIRE 指令
	-- 語法:EXPIRE key seconds
	-- 作用:為給定 key 設置過期時間,以秒計,超期自動刪除
	-- 返回值:設置成功返回 1
-- KEYS 指令
	-- 語法:KEYS pattern
	-- 作用:查找所有符合給定模式(pattern)的 key
	-- 返回值:符合給定模式的 key 列表
-- MOVE 指令
	-- 語法:MOVE key db
	-- 作用:將當前資料庫的 key 移動到給定的資料庫 db 當中
	-- 返回值:移動成功返回 1,失敗返回 0
-- PEXPIRE 指令
	-- 語法:EXPIRE key milliseconds
	-- 作用:設置 key 的過期時間以毫秒計
	-- 返回值:設置成功返回 1
-- PEXPIREAT 指令
	-- 語法:PEXPIREAT key milliseconds-timestamp
	-- 作用:設置 key 過期時間的時間戳 (unix timestamp) 以毫秒計
	-- 返回值:設置成功返回 1,設置失敗或 key 不存在時返回 0
-- TTL 指令
	-- 語法:TTL key
	-- 作用:以秒為單位,返回給定 key 的剩餘生存時間(TTL, time to live)
	-- 返回值
		-- 當 key 不存在時返回 -2
		-- 當 key 存在但沒有設置剩餘生存時間時返回 -1
		-- 否則以秒為單位返回 key 的剩餘時間
-- PTTL 指令
	-- 語法:PTTL key
	-- 作用:以毫秒為單位返回 key 的剩餘的過期時間
	-- 返回值
		-- 當 key 不存在時返回 -2
		-- 當 key 存在但沒有設置剩餘生存時間時返回 -1
		-- 否則以秒為單位返回 key 的剩餘時間
-- RANDOMKEY 指令
	-- 語法:RANDOMKEY
	-- 作用:從當前資料庫中隨機返回一個 key
	-- 返回值:當資料庫不為空時返回一個 key,否則返回 nil
-- RENAME 指令
	-- 語法:RENAME key newkey
	-- 作用:修改 key 的名稱為 newkey。當 key 和 newkey 相同或者 key 不存在時,返回一個錯誤。
				當 newkey 存在時,RENAME 命令將覆蓋舊值
	-- 返回值:改名成功提示 OK,失敗返回一個錯誤
-- TYPE 指令
	-- 語法:TYPE key
	-- 作用:返回 key 所存儲值得類型
	-- 返回值:
		-- none(key 不存在)
		-- string(字元串)
		-- list(列表)
		-- set(集合)
		-- zset(有序集合)
		-- hash(哈希表)

3. 操作 String

-- SET key value
	-- 設置指定 key 的值
-- GET key
	-- 獲取指定 key 的值
-- MSET key value [key value ...]
	-- 同時設置一個或多個 key-value 對
-- MGET key1 [key2..]
	-- 獲取所有(一個或多個)給定 key 的值
-- GETSET key value
	-- 將給定 key 的值設為 value ,並返回 key 的舊值
-- STRLEN key
	-- 返回 key 所儲存的字元串值的長度
-- APPEND key value
	-- 如果 key 已經存在並且是一個字元串, APPEND 命令將指定的 value 追加到該 key 原來值(value)的末尾
-- GETRANGE key start end
	-- 返回 key 中字元串值的子字元
-- SETEX key seconds value
	-- 將值 value 關聯到 key ,並將 key 的過期時間設為 seconds (以秒為單位)
-- PSETEX key milliseconds value
	-- 這個命令和 SETEX 命令相似,但它以毫秒為單位設置 key 的生存時間,而不是像 SETEX 命令那樣,以秒為單位
-- SETNX key value
	-- 只有在 key 不存在時設置 key 的值
-- MSETNX key value [key value ...]
	-- 同時設置一個或多個 key-value 對,當且僅當所有給定 key 都不存在
-- DECR key
	-- 將 key 中儲存的數字值減一
-- DECRBY key decrement
	-- key 所儲存的值減去給定的減量值
-- INCR key
	-- 將 key 中儲存的數字值增一
-- INCRBY key increment
	-- 將 key 所儲存的值加上給定的增量值
-- INCRBYFLOAT key increment
	-- 將 key 所儲存的值加上給定的浮點增量值
-- GETBIT key offset
	-- 對 key 所儲存的字元串值,獲取指定偏移量上的位
-- SETBIT key offset value
	-- 對 key 所儲存的字元串值,設置或清除指定偏移量上的位(bit)
-- SETRANGE key offset value
	-- 用 value 參數覆寫給定 key 所儲存的字元串值,從偏移量 offset 開始

4. 操作 List

-- LPUSH key value1 [value2]
	-- 將一個或多個值插入到列表頭部
-- LPUSHX key value
	-- 將一個值插入到已存在的列表頭部
-- RPUSH key value1 [value2]
	-- 在列表中添加一個或多個值
-- RPUSHX key value
	-- 為已存在的列表添加值
-- LPOP key
	-- 移出並獲取列表的第一個元素
-- RPOP key
	-- 移除列表的最後一個元素,返回值為移除的元素
-- LRANGE key start stop
	-- 獲取列表指定範圍內的元素
-- LLEN key
	-- 獲取列表長度
-- LSET key index value
	-- 通過索引設置列表元素的值
-- LINDEX key index
	-- 通過索引獲取列表中的元素
-- LREM key count value
	-- 移除列表元素
-- LTRIM
	-- 保留列表特定區間內的元素
-- LINSERT key BEFORE|AFTER pivot value
	-- 在列表的元素前或者後插入元素
-- BLPOP key1 [key2 ] timeout
	-- 移出並獲取列表的第一個元素, 如果列表沒有元素會阻塞列表直到等待超時或發現可彈出元素為止
-- BRPOP key1 [key2 ] timeout
	-- 移出並獲取列表的最後一個元素, 如果列表沒有元素會阻塞列表直到等待超時或發現可彈出元素為止
-- BRPOPLPUSH source destination timeout
	-- 從列表中彈出一個值,將彈出的元素插入到另外一個列表中並返回它。如果列表沒有元素會阻塞列表直到等待超時或發現可彈出元素為止
-- LTRIM key start stop
	-- 對一個列表進行修剪(trim),就是說,讓列表只保留指定區間內的元素,不在指定區間之內的元素都將被刪除
-- RPOPLPUSH source destination
	-- 移除列表的最後一個元素,並將該元素添加到另一個列表並返回

5. 操作 Set

1   SADD key member1 [member2]
向集合添加一個或多個成員
2	SCARD key
獲取集合的成員數
3	SDIFF key1 [key2]
返回給定所有集合的差集
4	SDIFFSTORE destination key1 [key2]
返回給定所有集合的差集並存儲在 destination 中
5	SINTER key1 [key2]
返回給定所有集合的交集
6	SINTERSTORE destination key1 [key2]
返回給定所有集合的交集並存儲在 destination 中
7	SISMEMBER key member
判斷 member 元素是否是集合 key 的成員
8	SMEMBERS key
返回集合中的所有成員
9	SMOVE source destination member
將 member 元素從 source 集合移動到 destination 集合
10	SPOP key
移除並返回集合中的一個隨機元素
11	SRANDMEMBER key [count]
返回集合中一個或多個隨機數
12	SREM key member1 [member2]
移除集合中一個或多個成員
13	SUNION key1 [key2]
返回所有給定集合的並集
14	SUNIONSTORE destination key1 [key2]
所有給定集合的並集存儲在 destination 集合中
15	SSCAN key cursor [MATCH pattern] [COUNT count]
迭代集合中的元素

6. 操作 ZSet

元素可排序,不可以重覆

1	ZADD key score1 member1 [score2 member2]
向有序集合添加一個或多個成員,或者更新已存在成員的分數
2	ZCARD key
獲取有序集合的成員數
3	ZCOUNT key min max
計算在有序集合中指定區間分數的成員數
4	ZINCRBY key increment member
有序集合中對指定成員的分數加上增量 increment
5	ZINTERSTORE destination numkeys key [key ...]
計算給定的一個或多個有序集的交集並將結果集存儲在新的有序集合 key 中
6	ZLEXCOUNT key min max
在有序集合中計算指定字典區間內成員數量
7	ZRANGE key start stop [WITHSCORES]
通過索引區間返回有序集合指定區間內的成員
8	ZRANGEBYLEX key min max [LIMIT offset count]
通過字典區間返回有序集合的成員
9	ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT]
通過分數返回有序集合指定區間內的成員
10	ZRANK key member
返回有序集合中指定成員的索引
11	ZREM key member [member ...]
移除有序集合中的一個或多個成員
12	ZREMRANGEBYLEX key min max
移除有序集合中給定的字典區間的所有成員
13	ZREMRANGEBYRANK key start stop
移除有序集合中給定的排名區間的所有成員
14	ZREMRANGEBYSCORE key min max
移除有序集合中給定的分數區間的所有成員
15	ZREVRANGE key start stop [WITHSCORES]
返回有序集中指定區間內的成員,通過索引,分數從高到低
16	ZREVRANGEBYSCORE key max min [WITHSCORES]
返回有序集中指定分數區間內的成員,分數從高到低排序
17	ZREVRANK key member
返回有序集合中指定成員的排名,有序集成員按分數值遞減(從大到小)排序
18	ZSCORE key member
返回有序集中,成員的分數值
19	ZUNIONSTORE destination numkeys key [key ...]
計算給定的一個或多個有序集的並集,並存儲在新的 key 中
20	ZSCAN key cursor [MATCH pattern] [COUNT count]
迭代有序集合中的元素(包括元素成員和元素分值

7. 操作 Hash

value 是一個 map 結構,無序

1	HDEL key field1 [field2]
刪除一個或多個哈希表欄位
2	HEXISTS key field
查看哈希表 key 中,指定的欄位是否存在。
3	HGET key field
獲取存儲在哈希表中指定欄位的值。
4	HGETALL key
獲取在哈希表中指定 key 的所有欄位和值
5	HINCRBY key field increment
為哈希表 key 中的指定欄位的整數值加上增量 increment 。
6	HINCRBYFLOAT key field increment
為哈希表 key 中的指定欄位的浮點數值加上增量 increment 。
7	HKEYS key
獲取所有哈希表中的欄位
8	HLEN key
獲取哈希表中欄位的數量
9	HMGET key field1 [field2]
獲取所有給定欄位的值
10	HMSET key field1 value1 [field2 value2 ]
同時將多個 field-value (域-值)對設置到哈希表 key 中。
11	HSET key field value
將哈希表 key 中的欄位 field 的值設為 value 。
12	HSETNX key field value
只有在欄位 field 不存在時,設置哈希表欄位的值。
13	HVALS key
獲取哈希表中所有值。
14	HSCAN key cursor [MATCH pattern] [COUNT count]
迭代哈希表中的鍵值對。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • “索引什麼時候失效?” 面試過程中,突如其來的一個問題,是不是有點懵? 沒關係,關註我,面試不迷路。 我是Mic,一個工作了14年的Java程式員。 索引失效涉及到的知識點非常多,所以我把這個問題的回答整理到了一個20W字的面試文檔裡面,大家可以領取。 下麵看看高手的回答 高手: InnoDB引擎里 ...
  • django中資源文件夾的引入 1.靜態資源文件夾的引入 settings.py的配置如下所示: # django預設配置 STATIC_URL='static/' # django會去應用裡面的static文件夾找靜態資源,僅當DEBUG為True時 # BASE_DIR是項目的絕對地址 STAT ...
  • 它是基於Django的,幫助我們快速開發符合RESTful規範的介面框架。 一 路由 可以通過路由as_view()傳參 根據請求方式的不同執行對應不同的方法 在routers模塊下 封裝了很多關於路由的方法 , 最基礎的BaseRouter類,給我提供自定製的介面。 下麵這個方法給我們提供了自動生 ...
  • 配置文件設置 set number (設置行號) set nocompatible (設置不相容vi模式,不設置會導致許多vim特性被禁用) set clipboard=unnamed (設置普通的複製粘貼的內容和vim複製的內容相互使用) 打開、編輯,查找文件 vim + 任意文件名,如vim f ...
  • “Linux,全稱GNU/Linux,是一種免費使用和自由傳播的類UNIX操作系統,其內核由林納斯·本納第克特·托瓦茲於1991年10月5日首次發佈,它主要受到Minix和Unix思想的啟發,是一個基於POSIX的多用戶、多任務、支持多線程和多CPU的操作系統。 ...
  • 想要將圖片中的文字提取出來嗎?小編今天為大家分享一款線上文字識別轉換工具—"Text Scanner"。Text Scanner for Mac是一款非常不錯的線上文字識別轉換工具,辨識速度快,操作流程也簡單直接,且會自動判斷各國語言,非常簡單! Text Scanner mac版基於AI領先的深度 ...
  • linux安裝光碟中的相關文件: [root@Centos8 cdrom]# ls BaseOS EFI images isolinux LICENSE media.repo Minimal TRANS.TBL #isolinux:存放和安裝相關的文件 [root@Centos8 isolinux] ...
  • Past for iChat 是一個Mac小應用程式,用於在macOS Big Sur、Monterey 及更高版本上打開和查看由 Apple 的 iChat 應用程式(.ichat 和 .chat 文件)創建的舊聊天日誌文件,iChat是新的和改進的消息應用程式的前身,使用非常方便。 詳情:Pas ...
一周排行
    -Advertisement-
    Play Games
  • Dapr Outbox 是1.12中的功能。 本文只介紹Dapr Outbox 執行流程,Dapr Outbox基本用法請閱讀官方文檔 。本文中appID=order-processor,topic=orders 本文前提知識:熟悉Dapr狀態管理、Dapr發佈訂閱和Outbox 模式。 Outbo ...
  • 引言 在前幾章我們深度講解了單元測試和集成測試的基礎知識,這一章我們來講解一下代碼覆蓋率,代碼覆蓋率是單元測試運行的度量值,覆蓋率通常以百分比表示,用於衡量代碼被測試覆蓋的程度,幫助開發人員評估測試用例的質量和代碼的健壯性。常見的覆蓋率包括語句覆蓋率(Line Coverage)、分支覆蓋率(Bra ...
  • 前言 本文介紹瞭如何使用S7.NET庫實現對西門子PLC DB塊數據的讀寫,記錄了使用電腦模擬,模擬PLC,自至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1.Windows環境下鏈路層網路訪問的行業標準工具(WinPcap_4_1_3.exe)下載鏈接:http ...
  • 從依賴倒置原則(Dependency Inversion Principle, DIP)到控制反轉(Inversion of Control, IoC)再到依賴註入(Dependency Injection, DI)的演進過程,我們可以理解為一種逐步抽象和解耦的設計思想。這種思想在C#等面向對象的編 ...
  • 關於Python中的私有屬性和私有方法 Python對於類的成員沒有嚴格的訪問控制限制,這與其他面相對對象語言有區別。關於私有屬性和私有方法,有如下要點: 1、通常我們約定,兩個下劃線開頭的屬性是私有的(private)。其他為公共的(public); 2、類內部可以訪問私有屬性(方法); 3、類外 ...
  • C++ 訪問說明符 訪問說明符是 C++ 中控制類成員(屬性和方法)可訪問性的關鍵字。它們用於封裝類數據並保護其免受意外修改或濫用。 三種訪問說明符: public:允許從類外部的任何地方訪問成員。 private:僅允許在類內部訪問成員。 protected:允許在類內部及其派生類中訪問成員。 示 ...
  • 寫這個隨筆說一下C++的static_cast和dynamic_cast用在子類與父類的指針轉換時的一些事宜。首先,【static_cast,dynamic_cast】【父類指針,子類指針】,兩兩一組,共有4種組合:用 static_cast 父類轉子類、用 static_cast 子類轉父類、使用 ...
  • /******************************************************************************************************** * * * 設計雙向鏈表的介面 * * * * Copyright (c) 2023-2 ...
  • 相信接觸過spring做開發的小伙伴們一定使用過@ComponentScan註解 @ComponentScan("com.wangm.lifecycle") public class AppConfig { } @ComponentScan指定basePackage,將包下的類按照一定規則註冊成Be ...
  • 操作系統 :CentOS 7.6_x64 opensips版本: 2.4.9 python版本:2.7.5 python作為腳本語言,使用起來很方便,查了下opensips的文檔,支持使用python腳本寫邏輯代碼。今天整理下CentOS7環境下opensips2.4.9的python模塊筆記及使用 ...