❶ windows 怎樣關閉redis
安裝redis之後
在命令行窗口中輸入 redis-server redis.windows.conf 啟動redis
關閉命令行窗口就是關閉 redis。
---
redis作為windows服務啟動方式
redis-server --service-install redis.windows.conf
啟動服務:redis-server --service-start
停止服務:redis-server --service-stop
❷ redis怎麼會崩潰
由於redis存儲在內存中且提供一般編程語言常用的數據結構存儲類型,所以經常被用於做伺服器崩潰宕機的數據恢復處理。
伺服器可以在某些指定過程中將需要保存的數據以json對象等方式存儲到redis中,也就是我們常說的快照,當伺服器運行時讀取redis來判斷是否有待需要恢復數據繼續處理的業務。
當一次業務處理結束後再刪除redis的數據即可。
redis提供兩種將內存數據導出到硬碟實現數據備份的方法:
RDB方式(默認)
RDB方式的持久化是通過快照(snapshotting)完成的,當符合一定條件時Redis會自動將內存中的所有數據進行快照並存儲在硬碟上。進行快照的條件可以由用戶在配置文件中自定義,由兩個參數構成:時間和改動的鍵的個數。當在指定的時間內被更改的鍵的個數大於指定的數值時就會進行快照。RDB是redis默認採用的持久化方式,在配置文件中已經預置了3個條件:
save 900 1 # 900秒內有至少1個鍵被更改則進行快照
save 300 10 # 300秒內有至少10個鍵被更改則進行快照
save 60 10000 # 60秒內有至少10000個鍵被更改則進行快照
可以存在多個條件,條件之間是「或」的關系,只要滿足其中一個條件,就會進行快照。 如果想要禁用自動快照,只需要將所有的save參數刪除即可。
Redis默認會將快照文件存儲在當前目錄(可CONFIG GET dir來查看)的mp.rdb文件中,可以通過配置dir和dbfilename兩個參數分別指定快照文件的存儲路徑和文件名。
Redis實現快照的過程
Redis使用fork函數復制一份當前進程(父進程)的副本(子進程);
父進程繼續接收並處理客戶端發來的命令,而子進程開始將內存中的數據寫入硬碟中的臨時文件;
當子進程寫入完所有數據後會用該臨時文件替換舊的RDB文件,至此一次快照操作完成。
在執行fork的時候操作系統(類Unix操作系統)會使用寫時復制(-on-write)策略,即fork函數發生的一刻父子進程共享同一內存數據,當父進程要更改其中某片數據時(如執行一個寫命令 ),操作系統會將該片數據復制一份以保證子進程的數據不受影響,所以新的RDB文件存儲的是執行fork一刻的內存數據。
Redis在進行快照的過程中不會修改RDB文件,只有快照結束後才會將舊的文件替換成新的,也就是說任何時候RDB文件都是完整的。這使得我們可以通過定時備份RDB文件來實 現Redis資料庫備份。RDB文件是經過壓縮(可以配置rdbcompression參數以禁用壓縮節省CPU佔用)的二進制格式,所以佔用的空間會小於內存中的數據大小,更加利於傳輸。
除了自動快照,還可以手動發送SAVE或BGSAVE命令讓Redis執行快照,兩個命令的區別在於,前者是由主進程進行快照操作,會阻塞住其他請求,後者會通過fork子進程進行快照操作。 Redis啟動後會讀取RDB快照文件,將數據從硬碟載入到內存。根據數據量大小與結構和伺服器性能不同,這個時間也不同。通常將一個記錄一千萬個字元串類型鍵、大小為1GB的快照文件載入到內 存中需要花費20~30秒鍾。 通過RDB方式實現持久化,一旦Redis異常退出,就會丟失最後一次快照以後更改的所有數據。這就需要開發者根據具體的應用場合,通過組合設置自動快照條件的方式來將可能發生的數據損失控制在能夠接受的范圍。如果數據很重要以至於無法承受任何損失,則可以考慮使用AOF方式進行持久化。
AOF方式
默認情況下Redis沒有開啟AOF(append only file)方式的持久化,可以在redis.conf中通過appendonly參數開啟:
appendonly yes
在啟動時Redis會逐個執行AOF文件中的命令來將硬碟中的數據載入到內存中,載入的速度相較RDB會慢一些
開啟AOF持久化後每執行一條會更改Redis中的數據的命令,Redis就會將該命令寫入硬碟中的AOF文件。AOF文件的保存位置和RDB文件的位置相同,都是通過dir參數設置的,默認的文件名是appendonly.aof,可以通過appendfilename參數修改:
appendfilename appendonly.aof
配置redis自動重寫AOF文件的條件
auto-aof-rewrite-percentage 100 # 當目前的AOF文件大小超過上一次重寫時的AOF文件大小的百分之多少時會再次進行重寫,如果之前沒有重寫過,則以啟動時的AOF文件大小為依據
auto-aof-rewrite-min-size 64mb # 允許重寫的最小AOF文件大小
配置寫入AOF文件後,要求系統刷新硬碟緩存的機制
# appendfsync always # 每次執行寫入都會執行同步,最安全也最慢
appendfsync everysec # 每秒執行一次同步操作
# appendfsync no # 不主動進行同步操作,而是完全交由操作系統來做(即每30秒一次),最快也最不安全
Redis允許同時開啟AOF和RDB,既保證了數據安全又使得進行備份等操作十分容易。此時重新啟動Redis後Redis會使用AOF文件來恢復數據,因為AOF方式的持久化可能丟失的數據更少
我們簡單做一個定時計數器的小程序
[javascript]view plain
redis=require('redis'),//導入js模塊
RDS_PORT=1379,//埠號
RDS_HOST='47.93.112.119',//伺服器IP
RDS_OPTS={},//設置項
redisdb=redis.createClient(RDS_PORT,RDS_HOST,RDS_OPTS);//創建連接
redisdb.select(20);//指定分區庫
redisdb.on('ready',function(res){
console.log('ready');
});
redisdb.on('connect',function(){
console.log('connect');
});
exports.redisdb=redisdb;
functionredis_opt(opt,key,value,callback){
if(opt=='get'){
redisdb.get(key,function(err,data){
if(err==null){
callback(data);
}
else{
callback(err);
}
});
}
elseif(opt=='set')
{
redisdb.set(key,value,function(err,result){
if(err==null){
callback(result);
}
else{
callback(err);
}
});
}
elseif(opt=='del')
{
redisdb.del(key,function(err,result){
if(err==null){
callback(result);
}
else{
callback(err);
}
});
}
else
{
callback("erroropt!");
}
}
functionupdate(key)
{
redis_opt("get",key,null,function(data){
console.log("theredisdatais"+data);
if(data){
count=parseInt(data);
redis_opt("set",key,++count,function(data){
console.log("set"+count+""+data);
});
}
else{
redis_opt("set",key,10000,function(data){
console.log("set"+10000+""+data);
});
}
});
}
functionclear(key)
{
redis_opt("del",key,null,function(ret){
console.log("del"+key+""+ret);
});
}
functionmain()
{
varkey="count_test";
setInterval(function(){clear(key)},5000);
setInterval(function(){update(key)},1000);
}
//testmain();
main();
以上代碼為簡單的計時器函數,即伺服器啟動後定時讀取redis的數據,如果存在則累加修改,不存在則初始化,同時為了方便說明,又設置了一個定時刪除數據的定時器。
❸ redis漏洞怎麼預防
1.在信任的內網運行,盡量避免有公網訪問,redis自身只有一個密碼控制訪問,不能設置用戶許可權和IP限制。理論把redis運行在一個信任的網路環境中。
2.綁定Redis監聽的網路介面
如果伺服器有多個IP,可限定redis server監聽的IP; 通過redis配置項bind,可同時綁定多個IP.
3.禁止root用戶啟動redis,使用普通用戶啟動,安全性往往高很多; 業務程序永久別用root用戶運行。
4.限制redis文件目錄訪問許可權
設置redis的主目錄許可權為700;如果redis配置文件獨立於redis主目錄,許可權修改為600,因為Redis密碼明文存儲在配置文件中。
$chmod700 /var/lib/redis#假設這是你redis目錄
$chmod600 /etc/redis/redis.conf#假設這是你redis配置文件
5.避免使用熟知埠
程序運行盡量避免使用熟知埠或默認埠,降低被初級掃描的風險。
6.開啟Redis密碼認證,並設置高復雜度密碼
redis在redis.conf配置文件中,設置配置項requirepass, 開戶密碼認證。
$vim/etc/redis/redis.conf
requirepass
redis因查詢效率高,auth這種命令每秒能處理10w次以上,簡單的redis的密碼極容易為攻擊者暴破。
requirepass至少長度20位以上,為方便可使用一個特殊串sha256sum命令生成64位的無特殊字元串。
7.禁用或重命名危險命令
這個漏洞就利用config/save兩個命令完成攻擊 。 因redis無用戶許可權限制,建議危險的命令,使用rename配置項進行禁用或重命名,這樣外部不了解重命名規則,攻擊者就不能執行這類命令。
以下示例:redis.config文件禁用FLUSHDB、FLUSHALL兩個命令;重命名CONFIG、SHUTDOWN命令,
添加一個特殊的後綴。 這樣redis啟動後,只能運行CONFIG_b9fc8327c4dee7命令,不能執行CONFIG命令。
rename-command CONFIG CONFIG_b9fc8327c4dee7
rename-command SHUTDOWN SHUTDOWN_b9fc8327c4dee7
rename-command FLUSHDB ""
rename-command FLUSHALL ""
8.禁止Redis中存儲敏感的明文數據
Redis設計旨在提供高性能的KV服務,至少目前在許可權訪問控制和數據持久化方面比較弱化。所以禁止在Redis中存儲或緩存,敏感的明文數據。
9.安全監控,建立 蜜罐網路 ,有攻擊嘗試時,可及時發現。
監控redis安全狀態,cmdstat_auth cmdstat_flushdb/flushall監控報警。
歡迎關注公眾號:cxyluna ,互聯網IT技術分享。
❹ windows redis 命令行怎麼啟動服務
停止服務命令: net stop 服務名稱
啟動服務命令: net start 服務名稱
禁用服務命令: sc config 服務名稱 start= disabled
支持服務名稱: sc config 服務名稱 start= auto
❺ 啟動redis-server之後怎麼停止
安裝redis之後 在命令行窗口中輸入 redis-server redis.windows.conf 啟動redis 關閉命令行窗口就是關閉redis。
Redis(Remote Dictionary Server ),即遠程字典服務,是一個開源的使用ANSIC語言編寫、支持網路、可基於內存亦可持久化的日誌型、Key-Value資料庫,並提供多種語言的API。
從2010年3月15日起,Redis的開發工作由VMware主持。從2013年5月開始,Redis的開發由Pivotal贊助。
定義:
redis是一個key-value存儲系統。和Memcached類似,它支持存儲的value類型相對更多,包括string(字元串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。這些數據類型都支持push/pop、add/remove及取交集並集和差集及更豐富的操作,而且這些操作都是原子性的。
在此基礎上,redis支持各種不同方式的排序。與memcached一樣,為了保證效率,數據都是緩存在內存中。區別的是redis會周期性的把更新的數據寫入磁碟或者把修改操作寫入追加的記錄文件,並且在此基礎上實現了master-slave(主從)同步。
❻ redis服務啟動會每5分鍾連接一次客戶端,怎麼取消這個命令
Redis 命令用於在 redis 服務上執行操作。所以我們必須要啟動Redis服務程序,也就是redis安裝目錄下的redis-server.exe,你可以雙擊執行,也可以打開cmd窗口,將路徑定位到Redis安裝目錄下,通過redis-server命令執行。
要在 redis 服務上執行命令需要一個 redis 客戶端。Redis 客戶端在我們之前下載的的 redis 的安裝包中,也就是redis-cli.exe,同理,可以雙擊執行也可以通過命令執行。
❼ redis lua 可以自定義方法嗎
漏洞修復加固措施
(一)網路加固
綁定127.0.0.1,redis默認是監聽的127.0.0.1上,如果僅僅是本地通信,請確保監聽在本地。這種方式緩解了redis的風險。在redis.conf中配置如下:
bind 127.0.0.1
(二)設置防火牆
如果需要其他機器訪問,或者設置了slave模式,需添加相應的防火牆設置。命令如下:
`iptables -A INPUT -s x.x.x.x -p tcp --dport 6379 -j ACCEPT`
(三)添加認證
redis默認沒有開啟密碼認證,打開/etc/redis/redis.conf配置文件, (requirepass 密碼)可設置認證密碼,保存redis.conf,重啟redis(/etc/init.d/redis-server restart)之後,需要執行(auth 密碼)。示例如下:
`root@kali:~# redis-cli -h 192.168.10.212
redis 192.168.10.212:6379> keys *
(error) ERR operation not permitted
redis 192.168.10.212:6379> auth @nsF0cus!@#
OK`
(四)設置單獨賬戶
設置一個單獨的redis賬戶:創建一個redis賬戶,通過該賬戶啟動。示例如下:
`setsidsudo -u redis /usr/bin/redis-server /etc/redis/redis.conf'`
(五)重命名重要命令
由於redis沒有做基本的許可權分離,無管理賬號和普通賬號之分,導致攻擊者登錄後可執行任意操作,因此需要隱藏重要命令,例如:FLUSHDB, FLUSHALL, KEYS, PEXPIRE, DEL, CONFIG, SHUTDOWN, BGREWRITEAOF, BGSAVE, SAVE, SPOP, SREM, RENAME, DEBUG, EVAL`。
其中在redis2.8.1和RedisRedis3.x (< 3.0.2)存在有eval沙箱逃逸漏洞,攻擊者利用漏洞可執行任意lua代碼。設置方法如下,還編輯redis.conf文件:
`rename-command CONFIG ""
rename-command flushall ""
rename-command flushdb ""
rename-command shutdown shutdown_dvwa`
上述配置將config,flushdb,flushall設置為了空,即禁用該命令,我們也可以命名為一些攻擊者難以猜測,我們自己卻容易記住的的名字。保存之後,執行/etc/init.d/redis-server restart 重啟生效。
❽ redis-server運行後,控制台不能繼續輸入命令了嗎
清空資料庫:打開redis-client.exe,輸入命令flushdb
redis自帶持久化,因此是不會因為掉電而丟失所有內容的。默認情況下,redis每隔一定時間間隔會對資料庫做一次內存快照,記錄資料庫此刻的內容;啟動伺服器時會自動載入內存快照。
你可以打開edis文件夾里.rdb文件看看。
❾ redis 如何重啟
1、如果是用apt-get或者yum install安裝的redis,可以直接通過下面的命令停止/啟動/重啟redis:/etc/init.d/redis-server stop/etc/init.d/redis-server start/etc/init.d/redis-server restart
2、如果是通過源碼安裝的redis,則可以通過redis的客戶端程序redis-cli的shutdown命令來重啟redis。