1. redis比mysql讀寫快多少倍
MySQL的query cache也是在內存上的,所以讀操作肯定也很快。
而Redis/Memcached則無論讀寫,都在內存中進行,用作資料庫緩存還是不錯的,可以減輕MySQL負擔。
2. redis讀寫瓶頸
從你這個描述來看,寫性能確實不太正常。
我有一種方法可以用來看一下你這50000條數據是不是超過了默認的maxmemory值:
統計一下10000條數據大約占的內存值,估計5W條記錄的大約內存值,然後再看一下你的VM是否開啟。這樣做是因為超過了指定的內存同時沒開啟vm時,有可能會導致進程掛掉。
你既然使用了默認配置,你還可以看一下日誌里是不是會有崩潰記錄。也可以根據記錄找一下其他的原因。
你用的是hash結構的話,可以調整一下hash-zipmap-max-entries這個參數。一般這個參數在1000的時候性能是比較高的。超過1000以後CPU就上來了。默認是512.
3. redis一條數據最大戰用多少空間
你好,很高興為你解答
REDIS
abbr.
Redistricting System 重劃學區系統
希望我的回答對你有幫助,滿意請採納。
4. 如何高效地向Redis寫入大量的數據
具體實現步驟如下:
1. 新建一個文本文件,包含redis命令
SET Key0 Value0
SET Key1 Value1
...
SET KeyN ValueN
如果有了原始數據,其實構造這個文件並不難,譬如shell,python都可以
2. 將這些命令轉化成Redis Protocol。
因為Redis管道功能支持的是Redis Protocol,而不是直接的Redis命令。
如何轉化,可參考後面的腳本。
3. 利用管道插入
cat data.txt | redis-cli --pipe
Shell VS Redis pipe
下面通過測試來具體看看Shell批量導入和Redis pipe之間的效率。
測試思路:分別通過shell腳本和Redis pipe向資料庫中插入10萬相同數據,查看各自所花費的時間。
Shell
腳本如下:
#!/bin/bash
for ((i=0;i<100000;i++))
do
echo -en "helloworld" | redis-cli -x set name$i >>redis.log
done
每次插入的值都是helloworld,但鍵不同,name0,name1...name99999。
Redis pipe
Redis pipe會稍微麻煩一點
1> 首先構造redis命令的文本文件
在這里,我選用了python
#!/usr/bin/python
for i in range(100000):
print 'set name'+str(i),'helloworld'
# python 1.py > redis_commands.txt
# head -2 redis_commands.txt
set name0 helloworld
set name1 helloworld
2> 將這些命令轉化成Redis Protocol
在這里,我利用了github上一個shell腳本,
#!/bin/bash
while read CMD; do
# each command begins with *{number arguments in command}\r\n
XS=($CMD); printf "*${#XS[@]}\r\n"
# for each argument, we append ${length}\r\n{argument}\r\n
for X in $CMD; do printf "\$${#X}\r\n$X\r\n"; done
done < redis_commands.txt
# sh 20.sh > redis_data.txt
# head -7 redis_data.txt
*3
$3
set
$5
name0
$10
helloworld
至此,數據構造完畢。
測試結果
5. redis jredis千萬數據導入到redis需要多久
需要看你用什麼樣的方式導入,需要看你導入的數據是什麼數據,每次的數據量大不大,需要看你跟redis之前是不是在區域網,需要看你是不是使用redis集群,千萬級別其實並不算大,因為redis並不需要操作資料庫,我很好奇你導入千萬數據就不怕機器當機嗎?
最多不超過一個小時。
6. redis 一次請求耗時多少 mysql
1,redis是一種內存性的數據存儲服務,所以它的速度要比mysql快。 2,redis只支持String,hashmap,set,sortedset等基本數據類型,但是不支持聯合查詢,所以它適合做緩存。 3,有時候緩存的數據量非常大,如果這個時候服務宕機了
7. 使用python同步mysql到redis由於數據較多,一條一條讀出來寫到redis太慢,有沒有可以批量操作的。
MYSQL快速同步數據到Redis
舉例場景:存儲游戲玩家的任務數據,游戲伺服器啟動時將mysql中玩家的數據同步到redis中。
從MySQL中將數據導入到Redis的Hash結構中。當然,最直接的做法就是遍歷MySQL數據,一條一條寫入到Redis中。這樣沒什麼錯,但是速度會非常慢。如果能夠想法使得MySQL的查詢輸出數據直接能夠與Redis命令行的輸入數據協議相吻合,可以節省很多消耗和縮短時間。
Mysql資料庫名稱為:GAME_DB, 表結構舉例:
CREATE TABLE TABLE_MISSION (
playerId int(11) unsigned NOT NULL,
missionList varchar(255) NOT NULL,
PRIMARY KEY (playerId)
);
Redis中的數據結構使用哈希表:
鍵KEY為mission, 哈希域為mysql中對應的playerId, 哈希值為mysql中對應的missionList。 數據如下:
[root@iZ23zcsdouzZ ~]# redis-cli
127.0.0.1:6379> hget missions 36598
"{\"10001\":{\"status\":1,\"progress\":0},\"10002\":{\"status\":1,\"progress\":0},\"10003\":{\"status\":1,\"progress\":0},\"10004\":{\"status\":1,\"progress\":0}}"
快速同步方法:
新建一個後綴.sql文件:mysql2redis_mission.sql
內容如下:
SELECT CONCAT(
"*4\r\n",
'$', LENGTH(redis_cmd), '\r\n',
redis_cmd, '\r\n',
'$', LENGTH(redis_key), '\r\n',
redis_key, '\r\n',
'$', LENGTH(hkey), '\r\n',
hkey, '\r\n',
'$', LENGTH(hval), '\r\n',
hval, '\r'
)
FROM (
SELECT
'HSET' as redis_cmd,
'missions' AS redis_key,
playerId AS hkey,
missionList AS hval
FROM TABLE_MISSION
) AS t
創建shell腳本mysql2redis_mission.sh
內容:
mysql GAME_DB --skip-column-names --raw < mission.sql | redis-cli --pipe
Linux系統終端執行該shell腳本或者直接運行該系統命令,即可將mysql資料庫GAME_DB的表TABLE_MISSION數據同步到redis中鍵missions中去。mysql2redis_mission.sql文件就是將mysql數據的輸出數據格式和redis的輸入數據格式協議相匹配,從而大大縮短了同步時間。
經過測試,同樣一份數據通過單條取出修改數據格式同步寫入到redis消耗的時間為5min, 使用上面的sql文件和shell命令,同步完數據僅耗時3s左右。
8. 為什麼從redis中取數據比較慢
redis並不會因為key的增加而導致寫入明顯變慢,肯定是其他因素。
如果redis開啟了持久化,在進行持久化時,性能必然下降,可以使用config命令查看持久化設置了沒有。另外考慮是否是內存不足,一般redis最多隻應該佔用60%的物理內存,如果超過了在rdb進行持久化時可能會內存不足。可以監視內存和cpu使用情況進行分析。
9. redis集群重啟載入1t數據需要多長時間
選擇開始菜單中→程序→【Management SQL Server 2008】→【SQL Server Management Studio】命令,打開【SQL Server Management Studio】窗口,並使用Windows或 SQL Server身份驗證建立連接。
在【對象資源管理器】窗口中展開伺服器,然後選擇【資料庫】節點
右鍵單擊【資料庫】節點,從彈出來的快捷菜單中選擇【新建資料庫】命令。
10. 求助各位,關於redis耗時比較嚴重的問題
(1)redis部署的機器性能,IO.CPU,帶寬等等都是沒有問題的
(2)我們訪問redis的伺服器的IO,CPU,負載也是沒問題的
(3)訪問redis使用的是mget操作,一次最多獲取50個key,查看redis的慢操作日誌,由於mget導致的查詢慢操作情況很少
(4)是否是由於訪問redis的服務訪問其他數據資源耗時嚴重的問題,因為服務還訪問了其他的redis資源,其他redis的耗時還算比較正常,因此可以排除這個問題