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爲是否產生異常。