Redis使用時的一些注意事項

1、hscan(byte[] key, byte[] cursor, ScanParams params)

在使用hscan(byte[] key, byte[] cursor, ScanParams params)時,如果params使用的是:long型的變量+*,要注意,此long型變量要避過正則表達式中特殊字符對應的ASCII值,否則會在正則表達式中將此long型變量作爲特殊字符處理。

正則表達式中的特殊字符和其對應的ASCII值如下:

?:63, *:42, +:43, $:36, n:110, .:46, [:91, ]:93, \:92

要注意:long值是八個字節,所以在避過這些數字時要用變量num%256,得到的餘數不能包含以上的值。

2、出現異常:JedisConnectionException Unexpected end of stream

此問題的解決方案參考下列文檔:

https://blog.csdn.net/aubdiy/article/details/53511410

 

3、在多線程場景下使用redis時,可能會出現各種類型轉換異常:如:[B cannot be cast to java.util.List

此問題出現的原因是:

在多線程場景下,如果使用jedis連接池獲取連接,在各個地方調用,且使用完之後沒有釋放,則可能在某次使用的時候,拿到的是其他線程的連接,則會出現類型轉換異常。

解決方案:

在每次使用完連接後,將其返回連接池。具體操作如下:

/**
 * return resource to pool
 */
public void returnResource(Jedis shardedJedis, boolean broken) {
	if (broken) {
		jedisPool.returnBrokenResource(shardedJedis);
	} else {
		jedisPool.returnResource(shardedJedis);
	}

}

注:broken爲是否產生異常。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章