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为是否产生异常。