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

 

 

你可能感兴趣的:(问题整理,redis)