❶ Redis的主要功能
緩存:這應該是 Redis 最主要的功能了,也是大型網站必備機制,合理地使用緩存不僅可以加 快數據的訪問速度,而且能夠有效地降低後端數據源的壓力。
共享Session:對於一些依賴 session 功能的服務來說,如果需要從單機變成集群的話,可以選擇 redis 來統一管理 session。消息隊列系統:消息隊列系統可以說是一個大型網站的必備基礎組件,因為其具有業務 解耦、非實時業務削峰等特性。Redis提供了發布訂閱功能和阻塞隊列的功 能,雖然和專業的消息隊列比還不夠足夠強大,但是對於一般的消息隊列功能基本可以滿足。比如在分布式爬蟲系統中,使用 redis 來統一管理 url隊列。
分布式鎖:在分布式服務中。可以利用Redis的setnx功能來編寫分布式的鎖,雖然這個可能不是太常用。 當然還有諸如排行榜、點贊功能都可以使用 Redis 來實現,但是 Redis 也不是什麼都可以做,比如數據量特別大時,不適合 Redis,我們知道 Redis 是基於內存的,雖然內存很便宜,但是如果你每天的數據量特別大,比如幾億條的用戶行為日誌數據,用 Redis 來存儲的話,成本相當的高。
❷ redis 一個資料庫能存多少數據
redis一個實例能存一個key或是value大小最大是512M。操作方法如下:
1、首先要安裝redis,開啟版redis的服務。
❸ 大量數據能緩存到redis裡面嗎
不適合引子:
在大數據時代,總希望存在一個Key-value存儲機制,像一樣在內存中處理大量(千萬數量級)的key-value對,以便提高數據查找、修改速度。
所以,我們會想到,Memcached和Redis這兩個NoSQL資料庫(嚴格來講二者都不可以算作資料庫)。
1、Memcached是一個cache機制,當內存不足時會採用LRU機制,替換出陳舊數據,因此他不能保證我們的數據像在HashMap中一樣不丟失,且沒有數據持久化機制;
2、Redis克服了這一缺點,採取磁碟存儲機制實現數據持久化。但是,當數據量達到1千萬左右時,由於內存中不能存儲如此大量數目的數據,頻繁同磁碟進行數據交換,導致數據查詢、存儲性能的急劇下降,將導致服務不可用。
結論:當前還沒有好的產品可以實現key-value保證數據完整性,千萬級條數量級的,高效存儲和查詢支持產品。
附錄一:如下是轉自其它網友的測試數據:
附錄二:memcached 和redis的比較,和各自用途
附錄一:
從圖中可以猜測到還會有Redis 2.2.1 的測試,相同的測試環境,1K的數據量,使用ServiceStack.Redis客戶端進行如下測試:
1) Set操作
2) Get操作
3) Del操作
每一套測試分別使用三個配置進行測試:
1) 綠色線條的是開啟Dump方式的持久化,5分鍾持久化一次
2) 藍色線條是開啟AOF方式的持久化,每秒寫入磁碟一次
3) 紅色線條是關閉任何的持久化方式
對於每一個配置都使用相同的其他配置:
1) 開啟VM 最大內存10GB(128位元組一
❹ Redis 大數據內存優化 (RoaringBitmap)
最近碰到手機設備匹配的業務, 用戶在我司後台可以上傳人群包, 裡面存放的是設備的MD5標識符; 一個人群包大概有千萬級的MD5數據, 與廣告請求所攜帶設備標識進行匹配.
嘗試插入1kw條數據, key為設備MD5值, value為1, 此時Redis中存在1kw條key-value鍵值對.
通過 info 指令查看內存佔用:
8bit = 1b = 0.001kb
bitmap即點陣圖, 就是通過最小的單位bit來進行0或者1的設置,表示某個元素對應的值或者狀態。
一個bit的值,或者是0,或者是1;也就是說一個bit能存儲的最多信息是2。
場景: 有用戶id分別為1, 2, 3, 4, 5, 6, 7, 8的用戶, 其中用戶2, 5在今日登錄, 統計今
日登錄用戶
採用點陣圖存儲: 用戶id為偏移量, 可以看做是在點陣圖中的索引, value為true
通過 bitcount 獲取登錄用戶數為2:
測試offset從1-1kw連續整數時候的內存佔用:
可以發現內存佔用僅為 1.19MB, 1個億的數據也才12MB, 極大的減少了內存;
由於我們的業務沒有如此完美的情況出現, 採用設備MD5的hash做Offset, 不會出現連續正整數的情況;
各常用Hash函數性能對比: https://byvoid.com/zhs/blog/string-hash-compare/
所以我們接下來測試1kw條MD5數據的點陣圖內存佔用:
查看Redis內存佔用:
問題: 為什麼同樣1kw的bitmap, MD5數據的Hash佔用會比 測試一 的多200倍?
將32位無符號整數按照高16位分桶,即最多可能有216=65536個桶,稱為container。存儲數據時,按照數據的高16位找到container(找不到就會新建一個),再將低16位放入container中。也就是說,一個RBM就是很多container的集合。
圖中示出了三個container:
1kw條MD5數據的插入: