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