Redis 起步
Rdis和JQuery一樣是純粹為應用而產生的,這裡記錄的是在CentOS 5.7上學習入門文章:
1.Redis簡介Redis是一個key-value儲存系統。和Memcached類似,但是解決了斷電後資料完全丟失的情況,而且她支援更多無化的value型別,除了和string外,還支援lists(連結串列)、sets(集合)和zsets(有序集合)幾種資料型別。這些資料型別都支援push/pop、add/remove及取交集並集和差集及更豐富的操作,而且這些操作都是原子性的。
2.Redis的效能下面是官方的bench-mark資料:
- The test was done with 50 simultaneous clients performing 100000 requests.
- The value SET and GET is a 256 bytes string.
- The Linux box is running Linux 2.6, it’s Xeon X3320 2.5Ghz.
- Text executed using the loopback interface (127.0.0.1).
Results: about 110000 SETs per second, about 81000 GETs per second.
更多詳細資料請見官方bench-mark page()
3.安裝RedisRedis的程式碼遵循ANSI-C編寫,可以在所有POSIX系統(如Linux, *BSD, Mac OS X, Solaris等)上安裝執行。而且Redis並不依賴任何非標準庫,也沒有編譯引數必需新增。redis的安裝出奇的簡單,這可能也是他風靡的一個原因,讓人很容易上手,不像某些東西,編譯階段就能讓人完全絕望。
先去官網下載原始碼:
wget
解壓:
tar –zxvf redis-2.4.6.tar.gz
編譯
需要說明的事,redis的安裝非常簡單,已經有現成的Makefile檔案,直接執行make命令即可。
make
make install
Redis 由四個可執行檔案:redis-benchmark、redis-cli、redis-server、redis-stat 這四個檔案,加上一個redis.conf就構成了整個redis的最終可用包。它們的作用如下:
- redis-server:Redis伺服器的daemon啟動程式
- redis-cli:Redis命令列操作工具。當然,你也可以用telnet根據其純文字協議來操作
- redis-benchmark:Redis效能測試工具,測試Redis在你的系統及你的配置下的讀寫效能
- redis-stat:Redis狀態檢測工具,可以檢測Redis當前狀態引數及延遲狀況
現在就可以啟動redis了,redis只有一個啟動引數,就是他的配置檔案路徑。
redis-server /etc/redis.conf
注意,預設複製過去的redis.conf檔案的daemonize引數為no,所以redis不會在後臺執行,這時要測試,我們需要重新開一個終端。修改為yes則為後臺執行redis。另外配置檔案中規定了pid檔案,log檔案和資料檔案的地址,如果有需要先修改,預設log資訊定向到stdout.
下面是redis.conf的主要配置引數的意義:
-
redis.conf配置選項如下
daemonize 是否以後臺程式執行,預設為no
pidfile 如以後臺程式執行,則需指定一個pid,預設為/var/run/redis.pid
bind 繫結主機IP,預設值為127.0.0.1(註釋)
port 監聽埠,預設為6379
timeout 超時時間,預設為300(秒)
loglevel 日誌記錄等級,有4個可選值,debug,verbose(預設值),notice,warning
logfile 日誌記錄方式,預設值為stdout
databases 可用資料庫數,預設值為16,預設資料庫為0
save
save 900 1 900秒(15分鐘)內至少有1個key被改變save 300 10 300秒(5分鐘)內至少有300個key被改變
save 60 10000 60秒內至少有10000個key被改變
rdbcompression 儲存至本地資料庫時是否壓縮資料,預設為yes
dbfilename 本地資料庫檔名,預設值為dump.rdb
dir 本地資料庫存放路徑,預設值為 ./
slaveof
masterauth當本機為從服務時,設定主服務的連線密碼(註釋)
requirepass 連線密碼(註釋)
maxclients 最大客戶端連線數,預設不限制(註釋)
maxmemory設定最大記憶體,達到最大記憶體設定後,Redis會先嚐試清除已到期或即將到期的Key,當此方法處理後,任到達最大記憶體設定,將無法再進行寫入操作。(註釋)
appendonly 是否在每次更新操作後進行日誌記錄,如果不開啟,可能會在斷電時導致一段時間內的資料丟失。因為redis本身同步資料檔案是按上面save條件來同步的,所以有的資料會在一段時間內只存在於記憶體中。預設值為no
appendfilename 更新日誌檔名,預設值為appendonly.aof(註釋)
appendfsync 更新日誌條件,共有3個可選值。no表示等作業系統進行資料快取同步到磁碟,always表示每次更新操作後手動呼叫fsync()將資料寫到磁碟,everysec表示每秒同步一次(預設值)。
vm-enabled 是否使用虛擬記憶體,預設值為no
vm-swap-file 虛擬記憶體檔案路徑,預設值為/tmp/redis.swap,不可多個Redis例項共享
vm-max-memory 將所有大於vm-max-memory的資料存入虛擬記憶體,無論vm-max-memory設定多小,所有索引資料都是記憶體儲存的(Redis的索引資料 就是keys),也就是說,當vm-max-memory設定為0的時候,其實是所有value都存在於磁碟。預設值為0。
#當dump .rdb資料庫的時候是否壓縮資料物件
rdbcompression yes
#dump資料庫的資料儲存的檔名
dbfilename dump.rdb
#Redis的工作目錄
dir /var/lib/redis/
########### Replication #####################
#Redis的複製配置
# slaveof
# masterauth
############## SECURITY ###########
# requirepass foobared
############### LIMITS ##############
#最大客戶端連線數
# maxclients 128
#最大記憶體使用率
# maxmemory
########## APPEND ONLY FILE MODE #########
#是否開啟日誌功能
appendonly no
# 重新整理日誌到disk的規則
# appendfsync always
appendfsync everysec
# appendfsync no
################ VIRTUAL MEMORY ###########
#是否開啟VM功能
vm-enabled no
# vm-enabled yes
vm-swap-file logs/redis.swap
vm-max-memory 0
vm-page-size 32
vm-pages 134217728
vm-max-threads 4
############# ADVANCED CONFIG ###############
glueoutputbuf yes
hash-max-zipmap-entries 64
hash-max-zipmap-value 512
#是否重置Hash表
activerehashing yes
Redis官方文件對VM的使用提出了一些建議: 當你的key很小而value很大時,使用VM的效果會比較好.因為這樣節約的記憶體比較大. 當你的key不小時,可以考慮使用一些非常方法將很大的key變成很大的value,比如你可以考慮將key,value組合成一個新的value. 最好使用linux ext3 等對稀疏檔案支援比較好的檔案系統儲存你的swap檔案. vm-max-threads這個引數,可以設定訪問swap檔案的執行緒數,設定最好不要超過機器的核數.如果設定為0,那麼所有對swap檔案的操作都是序列的.可能會造成比較長時間的延遲,但是對資料完整性有很好的保證.
這時你可以開啟一個終端進行測試了,配置檔案中預設的監聽埠是6379
我們可以開啟一個Redis客戶端進行測試
[root@SNDA-192-168-1-114 ~]# redis-cli -p 6379
Could not connect to Redis at 127.0.0.1:6379: Connection refused
not connected> exit
[root@SNDA-192-168-1-114 ~]# redis-server /etc/redis.conf
[root@SNDA-192-168-1-114 ~]# redis-cli
redis 127.0.0.1:6379> quit
redis 的作者antirez曾稱其為一個資料結構伺服器(data structures server),這是一個非常準確的表述,redis的所有功能就是將資料以其固有的幾種結構儲存,並提供給使用者操作這幾種結構的介面。我們可以想象我們在各種語言中的那些固有資料型別及其操作。
redis目前提供四種資料型別:string,list,set及zset(sorted set)和Hash。
- string是最簡單的型別,你可以理解成與Memcached一模一個的型別,一個key對應一個value,其上支援的操作與Memcached的操作類似。但它的功能更豐富。
- list是一個連結串列結構,主要功能是push、pop、獲取一個範圍的所有值等等。操作中key理解為連結串列的名字。
- set是集合,和我們數學中的集合概念相似,對集合的操作有新增刪除元素,有對多個集合求交併差等操作。操作中key理解為集合的名字。
- zset是set的一個升級版本,他在set的基礎上增加了一個順序屬性,這一屬性在新增修改元素的時候可以指定,每次指定後,zset會自動重新按新的值調整順序。可以理解了有兩列的mysql表,一列存value,一列存順序。操作中key理解為zset的名字。
- Hash資料型別允許使用者用Redis儲存物件型別,Hash資料型別的一個重要優點是,當你儲存的資料物件只有很少幾個key值時,資料儲存的記憶體消耗會很小.更多關於Hash資料型別的說明請見:
在官網上給出了所有支援的介面列表,並副副附有詳細的介紹,地址:
另外,作者還提供了一個非常貼心的web命令列模擬頁面,供初學者試用redis,地址:
5.redis資料儲存
redis的儲存分為記憶體儲存、磁碟儲存和log檔案三部分,配置檔案中有三個引數對其進行配置。
save seconds updates,save配置,指出在多長時間內,有多少次更新操作,就將資料同步到資料檔案。這個可以多個條件配合,比如預設配置檔案中的設定,就設定了三個條件。
appendonly yes/no ,appendonly配置,指出是否在每次更新操作後進行日誌記錄,如果不開啟,可能會在斷電時導致一段時間內的資料丟失。因為redis本身同步資料檔案是按上面的save條件來同步的,所以有的資料會在一段時間內只存在於記憶體中。
appendfsync no/always/everysec ,appendfsync配置,no表示等作業系統進行資料快取同步到磁碟,always表示每次更新操作後手動呼叫fsync()將資料寫到磁碟,everysec表示每秒同步一次。
6.redis主從配置redis支援master-slave的主從配置,配置方法是在從機的配置檔案中指定slaveof引數為主機的ip和port即可
7.redis起步(連結整理)專案首頁,下方是各種語言支援列表:
作者在wiki中給出了一個非常好的例子,以使我們可以快速上手,地址:
同時作者推薦的另一個教程,地址:
一個redis愛好者建立的相關問題討論網站:
為什麼使用 Redis及其產品定位
Redis記憶體使用最佳化與儲存
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29096438/viewspace-1792060/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- webpack 起步Web
- thinkphp起步PHP
- Appfuse:起步APP
- Vue起步(無cli)Vue
- laravel和thinkphp起步LaravelPHP
- Ansible 起步指南
- Augularjs-起步JS
- Flutter起步之安裝Flutter
- go學習之路 --- 起步Go
- cmake使用教程(一)-起步
- vue.js的起步Vue.js
- Activity的起步流程分析
- 第1章 jQuery 起步jQuery
- 第1章jQuery起步jQuery
- Spring Boot 起步依賴Spring Boot
- vue.js起步式(二)Vue.js
- ModelMaker 新手起步(一) (轉)
- React學習筆記1—起步React筆記
- 寫給自己看的Typescript起步TypeScript
- (三)Java工程化–Git起步JavaGit
- Node + Express 後臺開發 —— 起步Express
- 1.資料庫起步--------Mysql資料庫MySql
- Laravel 文件閱讀:Eloquent 起步(下篇)Laravel
- Git詳解之一:Git起步Git
- 1-Linux起步彙總貼Linux
- 新手起步創業的兩種模式創業模式
- 七天接手react專案-起步React
- go專案起步-環境問題Go
- 微服務:spring-cloud-archaius 起步微服務SpringCloudAI
- Laravel 文件閱讀:資料庫起步Laravel資料庫
- 中國ERP從智慧化起步(轉)
- 想學軟體設計如何起步
- J2EE程式設計起步程式設計
- 模仿天貓實戰【SSM版】——專案起步SSM
- 如何從零起步學習AIAI
- 譯見 | 掌舵 Kubernetes(一):如何起步?
- SOA治理最佳策略:小幅起步循序漸進
- 架構師之路,從「儲存選型」起步架構