摘要:是完全開源免費的,用語言編寫的,遵守協(xié)議。是一個高性能的分布式內(nèi)存數(shù)據(jù)庫,基于內(nèi)存運行并支持持久化的數(shù)據(jù)庫,是當(dāng)前最熱門的數(shù)據(jù)庫之一也被人們稱為數(shù)據(jù)結(jié)構(gòu)服務(wù)器。當(dāng),且兩者的值相差較大時,表示存在內(nèi)部或者外部的內(nèi)存碎片。
博文參考
http://blog.sina.com.cn/s/blog_a1e9c7910102vl64.html http://blog.csdn.net/freebird_lb/article/details/7733970 http://www.cnblogs.com/stephen-liu74/category/354125.html http://blog.csdn.net/lifetragedy/article/details/50628820redis概述
redis
全稱:REmote DIctionary Server(遠程字典服務(wù)器)。是完全開源免費的,用C語言編寫的, 遵守BCD協(xié)議。是一個高性能的(key/value)分布式內(nèi)存數(shù)據(jù)庫,基于內(nèi)存運行并支持持久化的NoSQL數(shù)據(jù)庫,是當(dāng)前最熱門的NoSql數(shù)據(jù)庫之一,也被人們稱為數(shù)據(jù)結(jié)構(gòu)服務(wù)器。
Redis 與其他 key - value 緩存產(chǎn)品有以下三個特點
1)Redis支持?jǐn)?shù)據(jù)的持久化,可以將內(nèi)存中的數(shù)據(jù)保持在磁盤中,重啟的時候可以再次加載進行使用 2)Redis不僅僅支持簡單的key-value類型的數(shù)據(jù),同時還提供list,set,zset,hash等數(shù)據(jù)結(jié)構(gòu)的存儲 3)Redis支持?jǐn)?shù)據(jù)的備份,即master-slave模式的數(shù)據(jù)備份
下載
Http://redis.io/
Http://www.redis.cn/
相比memcached,Rdeis有以下優(yōu)點:
1. redis原生支持的數(shù)據(jù)類型更多。 2. redis具有持久化機制,可以定期將內(nèi)存中的數(shù)據(jù)持久化到硬盤上。 3. redis支持master-slave模式的數(shù)據(jù)備份。 4. 性能。Redis作者的說法是平均到單個核上的性能,在單條數(shù)據(jù)不大的情況下Redis更好。 為什么這么說呢,理由就是Redis是單線程運行的。因為是單線程運行,所以和Memcached的多線程相比,整體性能肯定會偏低。因為是單線程運行,所以IO是串行化的,網(wǎng)絡(luò)IO和內(nèi)存IO,因此當(dāng)單條數(shù)據(jù)太大時,由于需要等待一個命令的所有IO完成才能進行后續(xù)的命令,所以性能會受影響。conf配置文件
#### GENERAL #### daemonize yes #以守護進程的方式運行 pidfile “/var/run/redis/redis.pid” #pidfile port 6379 #port tcp-backlog 511 #tcp的backlog隊列長度,backlog的長度是未建立的tcp連接和已經(jīng)建立的tcp連接之和,等待進程從隊列中調(diào)用建立的連接。 bind 192.168.1.30 10.0.0.1 #監(jiān)聽的地址,可以指定多個,0.0.0.0代表本機所有所有地址。 timeout 5000 #客戶端連接的超時時間,單位是毫秒。 loglevel notice #日志的記錄等級。 logfile “/var/log/redis/redis.log” #日志的存放位置。 databases 16 #redis所啟動的數(shù)據(jù)庫(名稱空間)數(shù)量,可以在cli中通過select #來切換。 ## SNAPSHOTTING ## save 900 1 #RDB方式的持久化策略,也就是說RDB方式下,數(shù)據(jù)被定期存儲到磁盤的策略。 save 300 10 #此處三個save依次表示,在900秒內(nèi),如果1個key發(fā)生改變就寫一次磁盤; save 60 10000 #在300秒內(nèi),如果10個key發(fā)生改變就寫一次磁盤;在60秒內(nèi)如果10000個key發(fā)生改變就寫一次磁盤。 stop-writes-on-bgsave-error yes #在bgsave時,發(fā)生寫入操作時會報告錯誤么,即在bgsave時不允許寫入數(shù)據(jù)。 rdbcompression yes #rdb文件可以被壓縮。 rdbchecksum yes #rdb文件開啟校驗。 dbfilename “dump.rdb” #db的名稱為 dump.rdb dir “/redis/data1” #RDB的數(shù)據(jù)目錄,在指定非默認目錄時,需要修改目錄的屬主屬組為你當(dāng)前redis進程的屬主屬組,一般為redis。 # APPEND ONLY MODE # appendonly yes #開啟AOF持久化方式。 appendfilename “appendonly.aof” #AOF文件名。 appendfsync everysec #AOF的持久化策略,有三個值,always表示只要發(fā)生數(shù)據(jù)操作就執(zhí)行保存或者重寫AOF;everysec表示一秒一次;no表示關(guān)閉; no-appendfsync-on-rewrite yes #在重寫時將當(dāng)前AOF的日志存儲在內(nèi)存中,防止AOF附加操作與重寫產(chǎn)生數(shù)據(jù)寫入堵塞問題,提高了性能卻增加了數(shù)據(jù)的風(fēng)險性。 auto-aof-rewrite-percentage 100 #每當(dāng)AOF日志是上次重寫的一倍時就自動觸發(fā)重寫操作。 auto-aof-rewrite-min-size 64mb #自動觸發(fā)重寫的最低AOF日志大小為64MB,為了防止在AOF數(shù)據(jù)量較小的情況話頻繁發(fā)生重寫操作。 aof-load-truncated yes #當(dāng)redis發(fā)生奔潰,通過AOF恢復(fù)時,不執(zhí)行最后最后那條因為中斷而發(fā)生問題的語句。 #### LIMITS #### maxclients 10000 #限制最大的并發(fā)用戶連接數(shù)為10000條。 # maxmemory主從復(fù)制原理與架構(gòu)實現(xiàn)#限制最大的內(nèi)存使用量。 ### SECURITY ### requirepass #設(shè)定認證的密碼,如果設(shè)定了,在遠程cli登錄,主從配置和sentinel時都需要指定對應(yīng)參數(shù)為此passwd。
只需在從節(jié)點的配置文件中修改以下配置即可: ### REPLICATION ### slaveof 192.168.1.29 6379 #主節(jié)點地址,redis的高可用方案 – sentinel。 #masterauth #如果設(shè)置了訪問認證就需要設(shè)定此項。 slave-server-stale-data yes #當(dāng)slave與master連接斷開或者slave正處于同步狀態(tài)時,如果slave收到請求允許響應(yīng),no表示返回錯誤。 slave-read-only yes #slave節(jié)點是否為只讀。 slave-priority 100 #設(shè)定此節(jié)點的優(yōu)先級,是否優(yōu)先被同步。
只需在sentinel節(jié)點的配置文件中修改以下配置即可: vim /etc/redis-sentinel.conf port 26379 #sentinel announce-ip 1.2.3.4 #默認監(jiān)聽在0.0.0.0 所以此處可以注釋。 dir “/tmp” sentinel monitor mymaster 192.168.1.29 6379 1 #sentinel moitorRedis服務(wù)器的信息<法定人數(shù)quorum> #設(shè)定master節(jié)點的*名稱*和位置,法定人數(shù)表示多少臺sentinel節(jié)點認同才可以上線。 sentinel down-after-milliseconds mymaster 5000 #如果聯(lián)系不到節(jié)點5000毫秒,我們就認為此節(jié)點下線。 sentinel failover-timeout mymaster 60000 #設(shè)定轉(zhuǎn)移主節(jié)點的目標(biāo)節(jié)點的超時時長。 sentinel auth-pass #如果redis節(jié)點啟用了auth,此處也要設(shè)置password。 一些關(guān)于sentinel的命令: sentinel master #查看此復(fù)制集群的主節(jié)點信息。 sentinel slaves #查看此復(fù)制集群的從節(jié)點信息。 sentinel failover #切換指定的節(jié)點為節(jié)點為主節(jié)點。
redis_version : 2.8.19 # Redis服務(wù)器版本 redis_git_sha1:00000000 #Git SHA1 redis_git_dirty: 0 #Git dirty flag os: Linux 3.2.0-23-generic x86_64 #Redis服務(wù)器的宿主操作系統(tǒng) arch_bits: 64 #服務(wù)器系統(tǒng)架構(gòu)(32位或64位) multiplexing_api: epoll #Redis使用的事件處理機制 gcc_version:4.6.3 #編譯Redis時所使用的GCC版本 process_id:7573 #Redis服務(wù)的進程PID run_id:f1c233c4194cba88616c5bfff2d97fc3074865c1 #Redis服務(wù)器的隨機標(biāo)識符(用于Sentinel和集群) tcp_port:6379 #Redis服務(wù)監(jiān)聽的TCP端口 uptime_in_seconds:7976 #自Redis服務(wù)器啟動以來,經(jīng)過的秒數(shù) uptime_in_days:0 #自Redis服務(wù)器啟動以來,經(jīng)過的天數(shù). 這里還不到1天,故顯示為0 hz:10 # Redis調(diào)用內(nèi)部函數(shù)來執(zhí)行許多后臺任務(wù)的頻率為每秒10次 lru_clock:1133773 #以分鐘為單位進行自增的時鐘,用于LRU管理 config_file:/data/redis_6379/redis.conf #redis.conf配置文件所在路徑Clients記錄客戶信息
connected_clients:2 #已連接客戶端的數(shù)量(不包括通過從服務(wù)器連接的客戶端) client_longest_output_list:0 #當(dāng)前的客戶端連接中,最長的輸出列表 client_biggest_input_buf:0 #當(dāng)前連接的客戶端中,最大的輸入緩存 blocked_clients:0 #正在等待阻塞命令(BLOP、BRPOP、BRPOPLPUSH)的客戶端的數(shù)量Memory記錄服務(wù)器內(nèi)存信息
used_memory:894216 #Redis分配器分配給Redis的內(nèi)存。例如,當(dāng)Redis增加了存儲數(shù)據(jù)時,需要的內(nèi)存直接從分配器分配給它的內(nèi)存里面取就可以了,也就是直接從used_memory取。而Redis分配器分配給Redis的內(nèi)存,是從操作系統(tǒng)分配給Redis的內(nèi)存里面取的(單位是字節(jié)) used_memory_human:873.26K #以人類可讀格式顯示Redis消耗的內(nèi)存 used_memory_rss:2691072 #操作系統(tǒng)分配給Redis的內(nèi)存。也就是Redis占用的內(nèi)存大小。這個值和top指令輸出的RES列結(jié)果是一樣的。RES列結(jié)果就表示Redis進程真正使用的物理內(nèi)存(單位是字節(jié)) used_memory_peak:914160 #Redis的內(nèi)存消耗峰值(單位是字節(jié)) used_memory_peak_human:892.73K #以人類可讀的格式返回Redis的內(nèi)存消耗峰值 used_memory_lua:35840 #Lua引擎所使用的內(nèi)存大?。▎挝皇亲止?jié)) mem_fragmentation_ratio:3.01 # used_memory_rss和used_memory之間的比率 mem_allocator:jemalloc-3.6.0 #在編譯時指定的,Redis所使用的內(nèi)存分配器??梢允莑ibc、jemalloc或者tcmalloc
小知識
理想情況下,used_memory_rss的值應(yīng)該只比used_memory稍微高一點。 當(dāng)rss >used,且兩者的值相差較大時,表示存在(內(nèi)部或者外部的)內(nèi)存碎片。內(nèi)存碎片的比率可以通過mem_fragmentation_ratio的值看出; 當(dāng)used>rss時,表示Redis的部分內(nèi)存被操作系統(tǒng)換出到交換空間,在這種情況下,操作可能會產(chǎn)生明顯的延遲。Persistence記錄RDB持久化和AOF持久化信息
loading:0 #一個標(biāo)志值,記錄了服務(wù)器是否正在載入持久化文件 rdb_changes_since_last_save:0 #距離最后一次成功創(chuàng)建持久化文件之后,改變了多少個鍵值 rdb_bgsave_in_progress:0 #一個標(biāo)志值,記錄服務(wù)器是否正在創(chuàng)建RDB文件 rdb_last_save_time:1427189587 #最近一次成功創(chuàng)建RDB文件的UNIX時間戳 rdb_last_bgsave_status:ok #一個標(biāo)志值,記錄了最后一次創(chuàng)建RDB文件的結(jié)果是成功還是失敗 rdb_last_bgsave_time_sec:0 #記錄最后一次創(chuàng)建RDB文件耗費的秒數(shù) rdb_current_bgsave_time_sec:-1 #如果服務(wù)器正在創(chuàng)建RDB文件,那么這個值記錄的就是當(dāng)前的創(chuàng)建RDB操作已經(jīng)耗費了多長時間(單位為秒) aof_enabled:0 #一個標(biāo)志值,記錄了AOF是否處于打開狀態(tài) aof_rewrite_in_progress:0 #一個標(biāo)志值,記錄了服務(wù)器是否正在創(chuàng)建AOF文件 aof_rewrite_scheduled:0 #一個標(biāo)志值,記錄了RDB文件創(chuàng)建完之后,是否需要執(zhí)行預(yù)約的AOF重寫操作 aof_last_rewrite_time_sec:-1 #記錄了最后一次AOF重寫操作的耗時 aof_current_rewrite_time_sec:-1 #如果服務(wù)器正在進行AOF重寫操作,那么這個值記錄的就是當(dāng)前重寫操作已經(jīng)耗費的時間(單位是秒) aof_last_bgrewrite_status:ok #一個標(biāo)志值,記錄了最后一次重寫AOF文件的結(jié)果是成功還是失敗
開啟AOF持久化功能
在Persistence部分還會加上以下域: aof_current_size:14301 #AOF文件目前的大小 aof_base_size:14301 #服務(wù)器啟動時或者最近一次執(zhí)行AOF重寫之后,AOF文件的大小 aof_pending_rewrite:0 #一個標(biāo)志值,記錄了是否有AOF重寫操作在等待RDB文件創(chuàng)建完之后執(zhí)行 aof_buffer_length:0 # AOF緩沖區(qū)的大小 aof_rewrite_buffer_length:0 #AOF重寫緩沖區(qū)的大小 aof_pending_bio_fsync:0 #在后臺I/0隊列里面,等待執(zhí)行的fsync數(shù)量 aof_delayed_fsync:0 #被延遲執(zhí)行的fsync數(shù)量Stats記錄統(tǒng)計信息
total_connections_received:8 #服務(wù)器已經(jīng)接受的連接請求數(shù)量 total_commands_processed:10673 #服務(wù)器已經(jīng)執(zhí)行的命令數(shù)量 instantaneous_ops_per_sec:0 #服務(wù)器每秒中執(zhí)行的命令數(shù)量 rejected_connections:0 #因為最大客戶端數(shù)量限制而被拒絕的連接請求數(shù)量 expired_keys:0 #因為過期而被自動刪除的數(shù)據(jù)庫鍵數(shù)量 evicted_keys:0 #因為最大內(nèi)存容量限制而被驅(qū)逐(evict)的鍵數(shù)量 keyspace_hits:1 #查找數(shù)據(jù)庫鍵成功的次數(shù) keyspace_misses:0 #查找數(shù)據(jù)庫鍵失敗的次數(shù) pubsub_channels:0 #目前被訂閱的頻道數(shù)量 pubsub_patterns:0 #目前被訂閱的模式數(shù)量 latest_fork_usec:159 #最近一次fork()操作耗費的時間(毫秒)Replication記錄主從復(fù)制的信息
role:master #在主從復(fù)制中,充當(dāng)?shù)慕巧H绻麤]有主從復(fù)制,單點的,它充當(dāng)?shù)慕巧彩莔aster connected_slaves:1 #有一個slave連接上來 slave0:ip=14.17.119.220,port=6379,state=online,offset=718446,lag=0 #slave的IP、端口、狀態(tài)等
如果當(dāng)前服務(wù)器是從服務(wù)器的話,那么這個部分還會加上以下域:
master_host :主服務(wù)器的IP地址
master_port:主服務(wù)器監(jiān)聽的端口號
master_link_status:復(fù)制連接當(dāng)前的狀態(tài),up表示連接正常,down表示連接斷開
master_last_io_seconds_ago:距離最近一次與主服務(wù)器進行通信已經(jīng)過去了多少秒
master_sync_in_progress:一個標(biāo)志值,記錄了主服務(wù)器是否正在與這個從服務(wù)器進行同步
如果同步操作正在進行,那么這個部分還會加上以下域:
master_sync_left_bytes:距離同步完成還缺多少字節(jié)的數(shù)據(jù)
master_sync_last_io_seconds_ago: 距離最近一次與主服務(wù)器進行通信已經(jīng)過去了多少秒
如果主從服務(wù)器之間的連接處于斷線狀態(tài),那么這個部分還會加上以下域:
master_link_down_since_seconds: 主從服務(wù)器連接斷開了多少秒
cpu部分記錄了CPU的計算量統(tǒng)計信息,它包含以下域:
used_cpu_sys:75.46 #Redis服務(wù)器耗費的系統(tǒng)CPU used_cpu_user:90.12 #Redis服務(wù)器耗費的用戶CPU used_cpu_sys_children:0.00 #Redis后臺進程耗費的系統(tǒng)CPU used_cpu_user_children:0.00 #Redis后臺進程耗費的用戶CPU Keyspace部分記錄了數(shù)據(jù)庫相關(guān)的統(tǒng)計信息,如數(shù)據(jù)庫的鍵數(shù)量、數(shù)據(jù)庫已經(jīng)被刪除的過期鍵數(shù)量。對于每個數(shù)據(jù)庫,這個部分會添加一行以下格式的信息: db0:keys=25,expires=0,avg_ttl=0 #0號數(shù)據(jù)庫有25個鍵、已經(jīng)被刪除的過期鍵數(shù)量為0個
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/40571.html
摘要:是什么基于內(nèi)存有客戶端和服務(wù)器端非關(guān)系型數(shù)據(jù)庫應(yīng)用場景是什么緩存隊列數(shù)據(jù)持久存儲如何安裝如何啟動如何關(guān)閉客戶端如何啟動下載解壓編譯安裝服務(wù)啟動注意這種方式啟動使用的是默認配置通過啟動參數(shù)告訴使用指定配置文件使用下面命令啟動服務(wù)關(guān) redis 是什么? 基于內(nèi)存 有客戶端和服務(wù)器端 NoSQL非關(guān)系型數(shù)據(jù)庫 redis 應(yīng)用場景是什么? 緩存 隊列 數(shù)據(jù)持久存儲 redis 如何...
閱讀 3223·2023-04-25 18:43
閱讀 904·2021-11-24 09:39
閱讀 1371·2021-10-14 09:43
閱讀 3905·2021-09-22 15:58
閱讀 1931·2019-08-29 17:18
閱讀 426·2019-08-29 14:14
閱讀 3087·2019-08-29 13:01
閱讀 1627·2019-08-29 12:33