redis滿了刪除機(jī)制 redis過(guò)期的鍵會(huì)自動(dòng)刪除嗎?
redis過(guò)期的鍵會(huì)自動(dòng)刪除嗎?是的,它將被自動(dòng)刪除。除非它沒(méi)有過(guò)期。但是,由于刪除機(jī)制不同,可能無(wú)法立即刪除。redis沒(méi)有設(shè)置過(guò)期時(shí)間會(huì)過(guò)期嗎?它不會(huì)過(guò)期。但這有點(diǎn)絕對(duì)。一般來(lái)說(shuō),當(dāng)您在配置中啟用
redis過(guò)期的鍵會(huì)自動(dòng)刪除嗎?
是的,它將被自動(dòng)刪除。除非它沒(méi)有過(guò)期。但是,由于刪除機(jī)制不同,可能無(wú)法立即刪除。
redis沒(méi)有設(shè)置過(guò)期時(shí)間會(huì)過(guò)期嗎?
它不會(huì)過(guò)期。但這有點(diǎn)絕對(duì)。一般來(lái)說(shuō),當(dāng)您在配置中啟用超過(guò)最大內(nèi)存限制的磁盤寫(xiě)入時(shí),可能會(huì)將未設(shè)置過(guò)期時(shí)間的密鑰寫(xiě)入磁盤。如果未設(shè)置。Redis將使用LRU機(jī)制刪除內(nèi)存中的舊數(shù)據(jù)并寫(xiě)入新數(shù)據(jù)。您可以使用排序集將要過(guò)期的成員和鍵的信息放入排序集的成員中,并將過(guò)期時(shí)間放入分?jǐn)?shù)中。運(yùn)行任務(wù)并使用zrangebycore遍歷它。使用排序集的優(yōu)點(diǎn)是它只需要遍歷過(guò)期成員,而不需要掃描整個(gè)過(guò)期成員集。
如何自動(dòng)檢測(cè)session過(guò)期?
在我看來(lái),你不能使用session,盡量不要使用session,因?yàn)閟ession有一個(gè)獨(dú)立的問(wèn)題,它不適合集群,而且session回收和清理不是很方便,很容易被攻擊,比如用session記錄驗(yàn)證碼,如果有人CC攻擊驗(yàn)證碼,它會(huì)產(chǎn)生大量的垃圾數(shù)據(jù)。PHP默認(rèn)值是與磁盤文件相對(duì)應(yīng)的會(huì)話。安裝在apt上的Ubuntu/Debian PHP將有一個(gè)定時(shí)任務(wù)/etc/cron.d/php5來(lái)清理會(huì)話文件。也就是說(shuō),redis是用來(lái)存儲(chǔ)PHP會(huì)話的,并且設(shè)置了過(guò)期時(shí)間,只能依靠redis的被動(dòng)過(guò)期機(jī)制定期隨機(jī)檢測(cè)來(lái)清除會(huì)話記錄(有剩余)。
memcached的作者說(shuō)memcached不適合會(huì)話,因?yàn)閙emcached默認(rèn)的LRU清理機(jī)制會(huì)在內(nèi)存不足的時(shí)候清理一些記錄,這可能會(huì)導(dǎo)致用戶無(wú)緣無(wú)故的掉行。redis的默認(rèn)設(shè)置理論上是noevict,會(huì)被刪除。然而,由于redis版本的問(wèn)題或過(guò)期刪除機(jī)制的問(wèn)題,密鑰過(guò)期但未被刪除的可能性非常小。當(dāng)您為一個(gè)鍵設(shè)置了一個(gè)有效時(shí)間,但是您經(jīng)常修改它的值時(shí),就會(huì)發(fā)生這種情況