Redis 源碼安裝和入門介紹

Linux下的redis源碼安裝

redis介紹

Redis 是一個開源(BSD許可)的,內存中的數據結構存儲系統,它可以用作數據庫、緩存和消息中間件。它支持多種類型的數據結構,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets),帶有范圍查詢的 有序集合(sorted sets) , bitmaps, hyperloglogs 和 地理空間(geospatial) 索引。 Redis 內置了 復制(replication), LUA腳本(Lua scripting), LRU驅動事件(LRU eviction), 事務(transactions) 和不同級別的 磁盤持久化(persistence), 并通過 Redis哨兵(Sentinel) 和自動 分區(Cluster)提供高可用性(high availability)
摘自:https://redis.com.cn/

下載源碼

redis github: https://github.com/redis/redis
redis源碼包:http://download.redis.io/releases/

注1:推薦從redis源碼包下載,本篇以redis-7.2.4版本安裝為例
注2:為保護redis配置文件不能被用戶隨便修改,同時避免創建太多用戶,選中在root用戶下安裝

在這里插入圖片描述

安裝說明

# 下載軟件包,解壓并移動目標位置
[root@Ali ~]# wget http://download.redis.io/releases/redis-7.2.4.tar.gz
[root@Ali ~]# mv redis-7.2.4  /usr/local/redis# 安裝依賴
[root@QingYun redis]# sudo yum install build-essential
[root@QingYun redis]# sudo yum install gcc-c++
[root@QingYun redis]# sudo yum install tcl# 編譯安裝redis
[root@Ali ~]# cd /usr/local/redis/
[root@Ali redis]# make
[root@Ali redis]# make install# 查看redis版本
[root@Ali redis]# redis-server --version
Redis server v=7.2.4 sha=00000000:0 malloc=jemalloc-5.3.0 bits=64 build=610222ebf82018c4# 檢查安裝正確性(注:可選操作,耗時比較久,生產環境下建議還是要執行的)
[root@Ali redis]# make test

注: 不建議使用‘PREFIX參數指定執行文件的安裝位置
原因:假設 使用PREFIX=/usr/local/redis,則編譯生產的redis-serverredis-client 等文件會生成到/usr/local/redis/bin/目錄下。 但/usr/local/redis/bin/并不在系統默認$PATH環境變量中,這就導致無法執行運行redis的命令,還需要把該路徑加到環境變量,反而更麻煩并且也不簡潔。

入門介紹

目錄結構

/usr/local/redis/目錄下的包含了redis的全部源碼,以下為目錄結構的簡單說明

目錄/文件說明
depsHiredis 模塊(輕量級訪問redis的客戶端),linenoise模塊(命令行編輯輔助,能實現自動補全) ,字典的定義實現,sds的定義實現,redis封裝的malloc,Lua等
src核心源碼,大多功能都在這塊實現,其中Redis自行實現了網絡框架在這個目錄中(ae_開頭的文件),Redis并未使用libevent作為網絡模塊
tests測試模塊,用來測試Redis的代碼,大多測試用例和腳本都在這里面
utilsRedis的工具實現
redis.confRedis官方源碼默認提供的配置文件
MakefileRedis C語言編譯使用的Makefile,當然你也可以使用Cmake進行管理,當然Cmake支持的不是很好

配置文件

在目錄/usr/local/redis下有一個redis.conf的配置文件。這里列舉下比較重要的配置項

配置項名稱配置項值范圍說明
daemonizeyes、noyes表示啟用守護進程,默認是no即不以守護進程方式運行。其中Windows系統下不支持啟用守護進程方式運行
port指定 Redis 監聽端口,默認端口為 6379
bind綁定的主機地址,如果需要設置遠程訪問則直接將這個屬性備注下或者改為bind * 即可,這個屬性和下面的protected-mode控制了是否可以遠程訪問 。
protected-modeyes 、no保護模式,該模式控制外部網是否可以連接redis服務,默認是yes,所以默認我們外網是無法訪問的,如需外網連接rendis服務則需要將此屬性改為no。
timeout300當客戶端閑置多長時間后關閉連接,如果指定為 0,表示關閉該功能
logleveldebug、verbose、notice、warning日志級別,默認為 notice
databases16設置數據庫的數量,默認的數據庫是0。整個通過客戶端工具可以看得到
rdbcompressionyes、no指定存儲至本地數據庫時是否壓縮數據,默認為 yes,Redis 采用 LZF 壓縮,如果為了節省 CPU 時間,可以關閉該選項,但會導致數據庫文件變的巨大。
dbfilenamedump.rdb指定本地數據庫文件名,默認值為 dump.rdb
dir指定本地數據庫存放目錄
requirepass設置 Redis 連接密碼,如果配置了連接密碼,客戶端在連接 Redis 時需要通過 AUTH 命令提供密碼,默認關閉
maxclients0設置同一時間最大客戶端連接數,默認無限制,Redis 可以同時打開的客戶端連接數為 Redis 進程可以打開的最大文件描述符數,如果設置 maxclients 0,表示不作限制。當客戶端連接數到達限制時,Redis 會關閉新的連接并向客戶端返回 max number of clients reached 錯誤信息。
maxmemoryXXX 指定 Redis 最大內存限制,Redis 在啟動時會把數據加載到內存中,達到最大內存后,Redis 會先嘗試清除已到期或即將到期的 Key,當此方法處理 后,仍然到達最大內存設置,將無法再進行寫入操作,但仍然可以進行讀取操作。Redis 新的 vm 機制,會把 Key 存放內存,Value 會存放在 swap 區。配置項值范圍列里XXX為數值。

通常情況下我們都需要把redis當成服務在后臺運行,因此這里通常需要改動幾個配置項:

  • daemonize設置為yesredis默認在控制臺上運行,一旦中斷redis-server命令(Ctrl + C)或者退出控制臺redis服務會自動關閉。建議改成 yes 啟用守護運行方式。
  • protected-mode設置為no,同時也將bind注釋:關閉保護模式和允許所有客戶端鏈接,這樣redis才能對外提供服務。
  • logfile設置為 log/redis_run.log:使用守護方式運行后,redis默認不會記錄日志,建議配置開啟日志
  • logfile設置為 log/redis_run.log:使用守護方式運行后,redis默認不會記錄日志,建議配置開啟日志

啟動服務

# 查看redis使用說明
[root@Ali redis]# redis-server --help# 啟動redis服務(必須在root用戶下)
[root@Ali redis]# redis-server redis.conf 
[root@Ali redis]# cat log/redis_run.log 
25171:C 11 May 2024 00:12:02.692 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
25172:C 11 May 2024 00:12:02.693 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
25172:C 11 May 2024 00:12:02.693 * Redis version=7.2.4, bits=64, commit=00000000, modified=0, pid=25172, just started
25172:C 11 May 2024 00:12:02.693 * Configuration loaded
25172:M 11 May 2024 00:12:02.694 * monotonic clock: POSIX clock_gettime
25172:M 11 May 2024 00:12:02.694 * Running mode=standalone, port=6379.
25172:M 11 May 2024 00:12:02.694 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
25172:M 11 May 2024 00:12:02.695 * Server initialized
25172:M 11 May 2024 00:12:02.695 * Loading RDB produced by version 7.2.4
25172:M 11 May 2024 00:12:02.695 * RDB age 17 seconds
25172:M 11 May 2024 00:12:02.695 * RDB memory usage when created 0.87 Mb
25172:M 11 May 2024 00:12:02.695 * Done loading RDB, keys loaded: 1, keys expired: 0.
25172:M 11 May 2024 00:12:02.695 * DB loaded from disk: 0.000 seconds
25172:M 11 May 2024 00:12:02.695 * Ready to accept connections tcp# 查看redis服務(方式1)
[root@Ali redis]# ps -aux | grep redis
root     25172  0.0  0.1 239328  3420 ?        Ssl  00:12   0:00 redis-server 127.0.0.1:6379
root     25183  0.0  0.0 112816   984 pts/2    S+   00:12   0:00 grep --color=auto redis
# 查看redis服務(方式2) 
[root@Ali redis]# netstat -tunple | grep 6379
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      0          12747989   25172/redis-server  
tcp6       0      0 ::1:6379                :::*                    LISTEN      0          12747990   25172/redis-server  
[root@Ali redis]# # 使用redis服務(可以在非root用戶下使用)
[wengjh@Ali redis]$ redis-cli 
127.0.0.1:6379> get hostname
(nil)
127.0.0.1:6379> set hostname "aliyun"
OK
127.0.0.1:6379> get hostname
"aliyun"# 插入redis 配置
[wengjianhong@Ali redis]$ redis-cli 
127.0.0.1:6379> CONFIG GET daemonize
1) "daemonize"
2) "yes"
127.0.0.1:6379> CONFIG GET logfile
1) "logfile"
2) "log/redis_run.log"
127.0.0.1:6379> CONFIG GET *# 關閉redis服務
127.0.0.1:6379> SHUTDOWN
not connected> 

其他命令

Redis的命令有很多,網上也有很多好的教程,這里沒有打算也沒有必要一一介紹。以下是幾個比較好用的網站

Redis教程:

  • https://redis.io/docs/latest/
  • https://redis.com.cn/tutorial.html

Redis命令參考:

  • http://doc.redisfans.com/
  • https://redis.io/docs/latest/commands/
  • https://redis.com.cn/commands.html

在這里插入圖片描述

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

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

相關文章

智能商品計劃系統:引領未來零售業的革新之路

隨著科技的飛速發展,人工智能(AI)和大數據技術已成為推動各行業革新的關鍵動力。在零售行業中,智能商品計劃系統的出現,正逐步改變著傳統的商品規劃與管理方式,為品牌注入新的活力與競爭力。本文將對智能商…

Java入門基礎學習筆記14——數據類型轉換

類型轉換: 1、存在某種類型的變量賦值給另一種類型的變量; 2、存在不同類型的數據一起運算。 自動類型轉換: 類型范圍小的變量,可以直接賦值給類型范圍大的變量。 byte類型賦值給int類型,就是自動類型轉換。 pack…

基于大數據的醫療信息化系統

基于大數據的醫療信息化系統是一個復雜且不斷發展的領域,它結合了現代信息技術和醫療專業知識,以提高醫療服務的效率、質量和可及性。以下是一個關于基于大數據的醫療信息化系統的概述 一、引言 隨著信息技術的快速發展和醫療改革的深入推進,醫療信息化已成為醫療領域的重…

Android 屏幕適配全攻略(中)-從九宮格到矢量圖,揭秘Android多屏幕適配的正確打開方式

在移動互聯網時代,無論是小小的手機屏幕,還是大大的平板顯示器,Android 應用都必須做到完美適配,給用戶以極佳的體驗。本文將剖析 Android 多屏幕適配背后的種種技術細節,為您揭開最佳實踐的正確打開方式,讓…

速賣通ip地址會相互影響嗎?如何防止賬號關聯?

在跨境電商行業,大部分平臺都是不允許一個賣家操作多個店鋪的,如果被平臺檢測出賬戶關聯,可能會被封店。在速賣通平臺,會通過IP地址來判斷是否經營多個賬號嗎?IP地址會使店鋪相互影響嗎? 一、速賣通IP地址會關聯嗎? 首先各位賣…

解決mybatis的配置文件沒代碼提示的問題

1.將org.apache.ibatis.builder.xml包里的兩個dtd文件復制出來,jar包里復制 2.復制dtd的url地址: http://mybatis.org/dtd/mybatis-3-mapper.dtd 一樣的做法! 3.關閉兩個配置文件,重新打開,就可以有代碼提示了&…

【智能優化算法】白鯊智能優化算法(White Shark Optimizer,WSO)

白鯊智能優化算法(White Shark Optimizer,WSO)是期刊“KNOWLEDGE-BASED SYSTEMS”(中科院一區期刊 IF8.6)的2022年智能優化算法 01.引言 白鯊智能優化算法(White Shark Optimizer,WSO)的核心理念和基礎靈感來自大白鯊的行為,包括它們在導航和…

從項目開始學習Vue——02(若依框架)

往期: 從項目開始學習Vue——01 目錄標題 一、基礎插件(一)路由Vue Router(二)導航守衛(路由攔截器)二、Vuex(一)什么是VuexVuex的部分介紹內容: &#xff08…

QQ超大文件共享(別用,傳進去后,壓縮都顯示不出來,LJ qq!)(共享文件)

文章目錄 需要共享雙方同時在線開啟方法第一次會提示設置默認共享目錄&#xff0c;默認是E:\QQFileShare\<qq號>\&#xff1a;然后新建共享會在其后創建共享目錄&#xff0c;共享目錄中只能共享文件。需要點擊添加文件&#xff0c;直接把文件拷貝到目錄里好像還不行&…

C語言/數據結構——(相交鏈表)

一.前言 今天在力扣上刷到了一道題&#xff0c;想著和大家一起分享一下這道題——相交鏈表https://leetcode.cn/problems/intersection-of-two-linked-lists廢話不多說&#xff0c;讓我們開始今天的分享吧。 二.正文 1.1題目描述 是不是感覺好長&#xff0c;我也這么覺得。哈…

網絡編程套接字和傳輸層tcp,udp協議

認識端口號 我們知道在網絡數據傳輸的時候&#xff0c;在IP數據包頭部有兩個IP地址&#xff0c;分別叫做源IP地址和目的IP地址。IP地址是幫助我們在網絡中確定最終發送的主機&#xff0c;但是實際上數據應該發送到主機上指定的進程上的&#xff0c;所以我們不僅要確定主機&…

OAuth 2.0 和 OAuth 2.1

OAuth 2.0 和 OAuth 2.1比較&#xff1a; OAuth 2.0 和 OAuth 2.1 是授權框架的不同版本&#xff0c;它們用于允許應用程序安全地訪問用戶在另一個服務上的數據。以下是它們之間的一些主要區別&#xff1a; 安全性增強&#xff1a;OAuth 2.1 旨在提高安全性&#xff0c;它整合…

什么是云原生架構,我們該如何做好云原生安全,引領云計算時代的應用程序革新

隨著云計算技術的飛速發展&#xff0c;企業面臨著前所未有的機遇和挑戰。在這個高度競爭的市場中&#xff0c;傳統的應用程序架構因其僵化、不易擴展和維護的特點&#xff0c;已難以滿足當今企業對靈活性、可伸縮性和高效性的追求。在這樣的背景下&#xff0c;云原生架構應運而…

git rebase 合并當前分支的多個commit記錄

git rebase 合并當前分支的多個commit記錄 git rebase 相關的選項和用法step1&#xff1a;找到想要合并的 commitstep2. 使用 rebase -istep3. 編輯提交歷史&#xff1a;step4.編輯合并后的提交信息step5.完成 rebase 過程&#xff1a;step6.**推送更新&#xff1a;**step6.**再…

使用ollama離線部署小模型

在有網的機器下載ollama和模型 啟動服務 docker run --rm -it -v ./ollama:/root/.ollama -p 8000:11434 --name ollama ollama/ollama下載模型 docker exec -it ollama ollama pull qwen:0.5b將鏡像和ollama目錄復制到離線的機器中 docker啟動ollama服務 驗證 curl ht…

FFmpeg常用API與示例(三)—— 音視頻解碼與編碼

編解碼層 1.解碼 (1) 注冊所有容器格式和 CODEC:av_register_all() (2) 打開文件:av_open_input_file() (3) 從文件中提取流信息:av_find_stream_info() (4) 窮舉所有的流&#xff0c;查找其中種類為 CODEC_TYPE_VIDEO (5) 查找對應的解碼器:avcodec_find_decoder() (6) …

C++ 實現以xml的格式寫入文件

C XML類 該類主要將xml中的標簽分為兩類&#xff0c;無內容標簽統一稱為父標簽&#xff0c;有內容的就以鍵值對的方式直接輸出。 后面可能會優化通過函數參數的方式管控層級關系&#xff0c;現在是通過類里自動記錄層級深度來表示的。 #include <fstream> #include <…

【QT教程】QT6硬件圖形界面編程 QT硬件編程

QT6硬件圖形界面編程 使用AI技術輔助生成 QT界面美化視頻課程 QT性能優化視頻課程 QT原理與源碼分析視頻課程 QT QML C擴展開發視頻課程 免費QT視頻課程 您可以看免費1000個QT技術視頻 免費QT視頻課程 QT統計圖和QT數據可視化視頻免費看 免費QT視頻課程 QT性能優化視頻免費看…

數據結構-二叉樹結尾+排序

一、二叉樹結尾 1、如何判斷一棵樹是完全二叉樹。 我們可以使用層序遍歷的思路&#xff0c;利用一個隊列&#xff0c;去完成層序遍歷&#xff0c;但是這里會有些許的不同&#xff0c;我們需要讓空也進隊列。如果隊列里到最后只剩下空那么這棵樹就是完全二叉樹。具體的實現如下…

js 數據格式轉換,對象轉數組,數組轉對象

1.對象轉數組 // 對象obj轉換成數組格式 let obj { orgCode:分局編碼, alertId:告警ID, name:告警名稱 } let arr [] for(let key in obj) { console.log(11,key,obj[key]); // 定義一個對象&#xff0c;賦值 let o { id: key, // key是obj對象的鍵值 label: obj[key] …