新聞中心
Redis是一種開源的內(nèi)存數(shù)據(jù)庫,廣泛應用于各種場景,它能夠?qū)崿F(xiàn)快速的讀寫幾乎所有數(shù)據(jù)類型,如字符串、列表、哈希、集合等。但是,有時你會在把數(shù)據(jù)存到Redis時出現(xiàn)亂碼的現(xiàn)象,那么亂碼是怎么一回事,又有什么辦法可以解決這個問題呢?接下來就來深入探究一下。

創(chuàng)新互聯(lián)是網(wǎng)站建設技術(shù)企業(yè),為成都企業(yè)提供專業(yè)的成都網(wǎng)站建設、成都網(wǎng)站設計,網(wǎng)站設計,網(wǎng)站制作,網(wǎng)站改版等技術(shù)服務。擁有十多年豐富建站經(jīng)驗和眾多成功案例,為您定制適合企業(yè)的網(wǎng)站。十多年品質(zhì),值得信賴!
亂碼出現(xiàn)的原因大體可以分為兩類:第一,編碼不一致;第二,存儲格式不一致。
關于編碼不一致,這是由于Redis內(nèi)部使用utf-8編碼進行存儲,而在客戶端和服務器之間數(shù)據(jù)傳輸時,采用的編碼格式可能不一致;例如,我們在java中采用ISO-8859-1編碼進行數(shù)據(jù)傳輸,因此服務器端的程序收到的亂碼就會出現(xiàn)。同理,其他數(shù)據(jù)傳輸編碼不匹配也可能出現(xiàn)亂碼。
關于存儲格式不一致,一般是指存儲數(shù)據(jù)的格式不統(tǒng)一。例如,某個字符串是采用utf-8格式存儲的,而另一個字符串是utf-16格式存儲的,在Redis中放在一張表中時,由于格式不一致,就會出現(xiàn)亂碼。
那么,如何解決Redis現(xiàn)象出現(xiàn)亂碼問題呢?
在傳輸數(shù)據(jù)前,一定要先查看客戶端程序和服務器端程序采用的編碼是否一致,如果不一致,則要及時將客戶端程序和服務端程序的編碼統(tǒng)一起來;例如,java中有一個String類型的 API 叫對 getBytes(”utf-8”),可以用于指定進行轉(zhuǎn)碼。
如果存儲的格式不一樣,可以在存入Redis之前,將其轉(zhuǎn)成特定的格式。通常來說,特征格式一般設為utf-8,這樣就可以避免數(shù)據(jù)出現(xiàn)亂碼現(xiàn)象了:
import java.nio.charset.Charset;
//獲取某字符串的utf-8字節(jié)數(shù)組
String str = "test";
byte[] b = str.getBytes(Charset.forName("utf-8"));
//存儲字節(jié)數(shù)組到Redis
//Java Redis客戶端的API可以使用set(byte[] key, byte[] value)
jedis.set(b,b);
在把數(shù)據(jù)存到Redis時,如果出現(xiàn)亂碼問題,可以考慮以上兩種情況。一方面,在傳輸數(shù)據(jù)時要確??蛻舳撕头掌鞫说臄?shù)據(jù)編碼是一致的;另一方面,在存儲數(shù)據(jù)前,將數(shù)據(jù)格式轉(zhuǎn)換為utils-8格式,這樣就可以有效地避免數(shù)據(jù)出現(xiàn)亂碼。
香港服務器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務提供商,擁有超過10年的服務器租用、服務器托管、云服務器、虛擬主機、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗。專業(yè)提供云主機、虛擬主機、域名注冊、VPS主機、云服務器、香港云服務器、免備案服務器等。
網(wǎng)頁題目:深入探究數(shù)據(jù)存到Redis出現(xiàn)的亂碼問題(數(shù)據(jù)存到redis亂碼)
新聞來源:http://www.5511xx.com/article/cojsgdo.html


咨詢
建站咨詢
