當前位置:首頁 » 數據倉庫 » redis資料庫大小
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

redis資料庫大小

發布時間: 2022-08-20 00:04:48

㈠ 三分鍾讀懂redis資料庫

redis是一個key-value存儲系統。和Memcached類似,它支持存儲的value類型相對更多,包括string(字元串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。這些數據類型都支持push/pop、add/remove及取交集並集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支持各種不同方式的排序。與memcached一樣,為了保證效率,數據都是緩存在內存中。區別的是redis會周期性的把更新的數據寫入磁碟或者把修改操作寫入追加的記錄文件,並且在此基礎上實現了master-slave(主從)同步。

1. 使用Redis有哪些好處?

(1) 速度快,因為數據存在內存中,類似於HashMap,HashMap的優勢就是查找和操作的時間復雜度都是O(1)

(2) 支持豐富數據類型,支持string,list,set,sorted set,hash

(3) 支持事務,操作都是原子性,所謂的原子性就是對數據的更改要麼全部執行,要麼全部不執行

(4) 豐富的特性:可用於緩存,消息,按key設置過期時間,過期後將會自動刪除

2. redis相比memcached有哪些優勢?

(1) memcached所有的值均是簡單的字元串,redis作為其替代者,支持更為豐富的數據類型

(2) redis的速度比memcached快很多

(3) redis可以持久化其數據

3. redis常見性能問題和解決方案:

(1) Master最好不要做任何持久化工作,如RDB內存快照和AOF日誌文件

(2) 如果數據比較重要,某個Slave開啟AOF備份數據,策略設置為每秒同步一次

(3) 為了主從復制的速度和連接的穩定性,Master和Slave最好在同一個區域網內

(4) 盡量避免在壓力很大的主庫上增加從庫

(5) 主從復制不要用圖狀結構,用單向鏈表結構更為穩定,即:Master <- Slave1 <- Slave2 <- Slave3...

這樣的結構方便解決單點故障問題,實現Slave對Master的替換。如果Master掛了,可以立刻啟用Slave1做Master,其他不變。

4. Mysql里有2000w數據,redis中只存20w的數據,如何保證redis中的數據都是熱點數據

相關知識:redis 內存數據集大小上升到一定大小的時候,就會施行數據淘汰策略。redis 提供 6種數據淘汰策略:

voltile-lru:從已設置過期時間的數據集(server.db[i].expires)中挑選最近最少使用的數據淘汰

volatile-ttl:從已設置過期時間的數據集(server.db[i].expires)中挑選將要過期的數據淘汰

volatile-random:從已設置過期時間的數據集(server.db[i].expires)中任意選擇數據淘汰

allkeys-lru:從數據集(server.db[i].dict)中挑選最近最少使用的數據淘汰

allkeys-random:從數據集(server.db[i].dict)中任意選擇數據淘汰

no-enviction(驅逐):禁止驅逐數據

相關推薦:《Python視頻教程》

5. Memcache與Redis的區別都有哪些?

1)、存儲方式

Memecache把數據全部存在內存之中,斷電後會掛掉,數據不能超過內存大小。

Redis有部份存在硬碟上,這樣能保證數據的持久性。

2)、數據支持類型

Memcache對數據類型支持相對簡單。

Redis有復雜的數據類型。

3),value大小

redis最大可以達到1GB,而memcache只有1MB

6. Redis 常見的性能問題都有哪些?如何解決?

1).Master寫內存快照,save命令調度rdbSave函數,會阻塞主線程的工作,當快照比較大時對性能影響是非常大的,會間斷性暫停服務,所以Master最好不要寫內存快照。

2).Master AOF持久化,如果不重寫AOF文件,這個持久化方式對性能的影響是最小的,但是AOF文件會不斷增大,AOF文件過大會影響Master重啟的恢復速度。Master最好不要做任何持久化工作,包括內存快照和AOF日誌文件,特別是不要啟用內存快照做持久化,如果數據比較關鍵,某個Slave開啟AOF備份數據,策略為每秒同步一次。

3).Master調用BGREWRITEAOF重寫AOF文件,AOF在重寫的時候會佔大量的CPU和內存資源,導致服務load過高,出現短暫服務暫停現象。

4). Redis主從復制的性能問題,為了主從復制的速度和連接的穩定性,Slave和Master最好在同一個區域網內

7. redis 最適合的場景

Redis最適合所有數據in-momory的場景,雖然Redis也提供持久化功能,但實際更多的是一個disk-backed的功能,跟傳統意義上的持久化有比較大的差別,那麼可能大家就會有疑問,似乎Redis更像一個加強版的Memcached,那麼何時使用Memcached,何時使用Redis呢?

如果簡單地比較Redis與Memcached的區別,大多數都會得到以下觀點:

1.Redis不僅僅支持簡單的k/v類型的數據,同時還提供list,set,zset,hash等數據結構的存儲。

2.Redis支持數據的備份,即master-slave模式的數據備份。

3.Redis支持數據的持久化,可以將內存中的數據保持在磁碟中,重啟的時候可以再次載入進行使用。

(1)會話緩存(Session Cache)

最常用的一種使用Redis的情景是會話緩存(session cache)。用Redis緩存會話比其他存儲(如Memcached)的優勢在於:Redis提供持久化。當維護一個不是嚴格要求一致性的緩存時,如果用戶的購物車信息全部丟失,大部分人都會不高興的,現在,他們還會這樣嗎?

幸運的是,隨著 Redis 這些年的改進,很容易找到怎麼恰當的使用Redis來緩存會話的文檔。甚至廣為人知的商業平台Magento也提供Redis的插件。

(2)全頁緩存(FPC)

除基本的會話token之外,Redis還提供很簡便的FPC平台。回到一致性問題,即使重啟了Redis實例,因為有磁碟的持久化,用戶也不會看到頁面載入速度的下降,這是一個極大改進,類似PHP本地FPC。

再次以Magento為例,Magento提供一個插件來使用Redis作為全頁緩存後端。

此外,對WordPress的用戶來說,Pantheon有一個非常好的插件 wp-redis,這個插件能幫助你以最快速度載入你曾瀏覽過的頁面。

(3)隊列

Reids在內存存儲引擎領域的一大優點是提供 list 和 set 操作,這使得Redis能作為一個很好的消息隊列平台來使用。Redis作為隊列使用的操作,就類似於本地程序語言(如Python)對 list 的 push/pop 操作。

如果你快速的在Google中搜索「Redis queues」,你馬上就能找到大量的開源項目,這些項目的目的就是利用Redis創建非常好的後端工具,以滿足各種隊列需求。例如,Celery有一個後台就是使用Redis作為broker,你可以從這里去查看。

(4)排行榜/計數器

Redis在內存中對數字進行遞增或遞減的操作實現的非常好。集合(Set)和有序集合(Sorted Set)也使得我們在執行這些操作的時候變的非常簡單,Redis只是正好提供了這兩種數據結構。所以,我們要從排序集合中獲取到排名最靠前的10個用戶–我們稱之為「user_scores」,我們只需要像下面一樣執行即可:

當然,這是假定你是根據你用戶的分數做遞增的排序。如果你想返回用戶及用戶的分數,你需要這樣執行:

ZRANGE user_scores 0 10 WITHSCORES

Agora Games就是一個很好的例子,用Ruby實現的,它的排行榜就是使用Redis來存儲數據的,你可以在這里看到。

(5)發布/訂閱

最後(但肯定不是最不重要的)是Redis的發布/訂閱功能。發布/訂閱的使用場景確實非常多。我已看見人們在社交網路連接中使用,還可作為基於發布/訂閱的腳本觸發器,甚至用Redis的發布/訂閱功能來建立聊天系統!(不,這是真的,你可以去核實)。

㈡ java怎樣配置redis佔用多大內存

Redis的配置
daemonize 如果需要在後台運行,把該項改為yes
pidfile 配置多個pid的地址,默認在/var/run/redis.pid
bind 綁定ip,設置後只接受自該ip的請求
port 監聽埠,默認為6379
timeout 設置客戶端連接時的超時時間,單位為秒
loglevel 分為4級,debug、verbose、notice、warning
logfile 配置log文件地址
databases 設置資料庫的個數,默認使用的資料庫為0
save 設置redis進行資料庫鏡像的頻率,保存快照的頻率,第一個*表示多長時間, 第三個*表示執行多少次寫操作。在一定時間內執行一定數量的寫操作時,自動保存快照。可設置多個條件。
rdbcompression 在進行鏡像備份時,是否進行壓縮
Dbfilename 鏡像備份文件的文件名
Dir 資料庫鏡像備份的文件放置路徑
Slaveof 設置資料庫為其他資料庫的從資料庫
Masterauth 主資料庫連接需要的密碼驗證
Requirepass 設置登錄時需要使用的密碼
Maxclients 限制同時連接的客戶數量
Maxmemory 設置redis能夠使用的最大內存
Appendonly 開啟append only模式
appendfsync 設置對appendonly.aof文件同步的頻率
vm-enabled 是否虛擬內存的支持
vm-swap-file 設置虛擬內存的交換文件路徑
vm-max-memory 設置redis使用的最大物理內存大小
vm-page-size 設置虛擬內存的頁大小
vm-pages 設置交換文件的總page數量
vm-max-threads 設置VMIO同時使用的線程數量
glueoutputbuf 把小的輸出緩存存放在一起
hash-max-zipmap-entries 設置hash的臨界值
activerehashing 重新has

㈢ redis資料庫 需要多大內存

在主庫宕機的時候,我們最常見的容災策略為「切主」。
具體為從該集群剩餘從庫中選出一個從庫並將其升級為主庫,該從庫升級為主庫後再將剩餘從庫掛載至其下成為其從庫,最終恢復整個主從集群結構。

㈣ redis支持哪些數據類型

redis提供五種數據類型:string,hash,list,set及zset(sorted set)。
redis是一個key-value存儲系統。和Memcached類似,它支持存儲的value類型相對更多,包括string(字元串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。這些數據類型都支持push/pop、add/remove及取交集並集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支持各種不同方式的排序。與memcached一樣,為了保證效率,數據都是緩存在內存中。區別的是redis會周期性的把更新的數據寫入磁碟或者把修改操作寫入追加的記錄文件,並且在此基礎上實現了master-slave(主從)同步。
Redis 是一個高性能的key-value資料庫。 redis的出現,很大程度補償了memcached這類key/value存儲的不足,在部 分場合可以對關系資料庫起到很好的補充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客戶端,使用很方便。
Redis支持主從同步。數據可以從主伺服器向任意數量的從伺服器上同步,從伺服器可以是關聯其他從伺服器的主伺服器。這使得Redis可執行單層樹復制。存檔可以有意無意的對數據進行寫操作。由於完全實現了發布/訂閱機制,使得從資料庫在任何地方同步樹時,可訂閱一個頻道並接收主伺服器完整的消息發布記錄。同步對讀取操作的可擴展性和數據冗餘很有幫助。

㈤ 雲資料庫 redis 版需要多大的

1.
redis
是一個高性能的key-value資料庫。
2.
redis的出現,很大程度補償了memcached這類keyvalue存儲的不足,在部
分場合可以對關系資料庫起到很好的補充作用。
3.
它提供了Python,Ruby,Erlang,PHP客戶端,使用很方便。問題是這個項目還很新,可能還不足夠穩定,而且沒有在實際的一些大型系統應用的實例。
4.
此外,缺乏mc中批量get也是比較大的問題,始終批量獲取跟多次獲取的網路開銷是不一樣的。

㈥ 如何統計Redis中各種數據的大小

如果
mysql
資料庫比較大的話,我們很容易就能查出是哪些表佔用的空間;不過如果
redis
內存比較大的話,我們就不太容易查出是哪些(種)鍵佔用的空間了。
有一些工具能夠提供必要的幫助,比如
redis-rdb-tools
可以直接分析
rdb
文件來生成報告,可惜它不能百分百實現我的需求,而我也不想在它的基礎上二次開發。實際上開發一個專用工具非常簡單,利用scan和debug等命令,沒多少行代碼就能實現:
?php
$patterns
=
array(
'foo:.+',
'bar:.+',
'.+',
);
$redis
=
new
redis();
$redis-
setoption(redis::opt_scan,
redis::scan_retry);
$result
=
array_fill_keys($patterns,
0);
while
($keys
=
$redis->scan($it,
$match
=
'*',
$count
=
1000))
{
foreach
($keys
as
$key)
{
foreach
($patterns
as
$pattern)
{
if
(preg_match("/^{$pattern}$/",
$key))
{
if
($v
=
$redis->debug($key))
{
$result[$pattern]
+=
$v['serializedlength'];
}
break;
}
}
}
}
var_mp($result);
?>
當然,前提是你需要提前總結出可能的鍵模式,簡單但不嚴謹的方法是monitor:
shell>
/path/to/redis-cli
monitor
|
awk
-f
'"'
'$2
~
"add|set|store|push"
{print
$4}'
此外,需要注意的是:因為
debug
返回的
serializedlength
是序列化後的長度,所以最終計算的值小於實際內存佔用,但考慮到相對大小依然是有參考意義的。

㈦ Redis支持幾種數據類型

Redis支持五種數據類型:string(字元串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

意思是 redis 的 string 可以包含任何數據。比如jpg圖片或者序列化的對象,string 類型的值最大能存儲 512MB。


Redis hash是一個 string 類型的 field 和 value 的映射表,hash 特別適合用於存儲對象。

Redis list是簡單的字元串列表,按照插入順序排序。可以添加一個元素到列表的頭部(左邊)或者尾部(右邊)。

Redis的Set是string類型的無序集合,集合是通過哈希表實現的,所以添加,刪除,查找的復雜度都是O(1)。

Redis zset 和 set 一樣也是string類型元素的集合,且不允許重復的成員,不同的是每個元素都會關聯一個double類型的分數。redis正是通過分數來為集合中的成員進行從小到大的排序。

㈧ redis多個資料庫 內存怎麼分配的

1、redis 中的每一個資料庫,都由一個 redisDb 的結構存儲。其中,redisDb.id 存儲著 redis 資料庫以整數表示的號碼。redisDb.dict 存儲著該庫所有的鍵值對數據。redisDb.expires 保存著每一個鍵的過期時間。

2、當redis 伺服器初始化時,會預先分配 16 個資料庫(該數量可以通過配置文件配置),所有資料庫保存到結構 redisServer 的一個成員 redisServer.db 數組中。當我們選擇資料庫 select number 時,程序直接通過 redisServer.db[number] 來切換資料庫。有時候當程序需要知道自己是在哪個資料庫時,直接讀取 redisDb.id 即可。

3、既然我們知道一個資料庫的所有鍵值都存儲在redisDb.dict中,那麼我們要知道如果找到key的位置,就有必要了解一下dict 的結構了:

typedef struct dict {

// 特定於類型的處理函數
dictType *type;

// 類型處理函數的私有數據
void *privdata;

// 哈希表(2個)
dictht ht[2];

// 記錄 rehash 進度的標志,值為-1 表示 rehash 未進行
int rehashidx;

// 當前正在運作的安全迭代器數量
int iterators;
} dict;
由上述的結構可以看出,redis 的字典使用哈希表作為其底層實現。dict 類型使用的兩個指向哈希表的指針,其中 0 號哈希表(ht[0])主要用於存儲資料庫的所有鍵值,而1號哈希表主要用於程序對 0 號哈希表進行 rehash 時使用,rehash 一般是在添加新值時會觸發,這里不做過多的贅述。所以redis 中查找一個key,其實就是對進行該dict 結構中的 ht[0] 進行查找操作。

4、既然是哈希,那麼我們知道就會有哈希碰撞,那麼當多個鍵哈希之後為同一個值怎麼辦呢?redis採取鏈表的方式來存儲多個哈希碰撞的鍵。也就是說,當根據key的哈希值找到該列表後,如果列表的長度大於1,那麼我們需要遍歷該鏈表來找到我們所查找的key。當然,一般情況下鏈表長度都為是1,所以時間復雜度可看作o(1)。

二、當redis 拿到一個key 時,如果找到該key的位置。

了解了上述知識之後,我們就可以來分析redis如果在內存找到一個key了。

1、當拿到一個key後, redis 先判斷當前庫的0號哈希表是否為空,即:if (dict->ht[0].size == 0)。如果為true直接返回NULL。

2、判斷該0號哈希表是否需要rehash,因為如果在進行rehash,那麼兩個表中者有可能存儲該key。如果正在進行rehash,將調用一次_dictRehashStep方法,_dictRehashStep 用於對資料庫字典、以及哈希鍵的字典進行被動 rehash,這里不作贅述。

3、計算哈希表,根據當前字典與key進行哈希值的計算。

4、根據哈希值與當前字典計算哈希表的索引值。

5、根據索引值在哈希表中取出鏈表,遍歷該鏈表找到key的位置。一般情況,該鏈表長度為1。

6、當 ht[0] 查找完了之後,再進行了次rehash判斷,如果未在rehashing,則直接結束,否則對ht[1]重復345步驟。

到此我們就找到了key在內存中的位置了。