# Redis_API
https://redis.io/clients#java
# Jedis
https://github.com/redis/jedis
特点
线程不安全的
同一个客户端多线程方式访问redis,只创建了一个Jedis对象,如果一个线程开启了事务,那么另外一个线程的操作请求也会被阻塞
**解决方案:**Jedis连接池
使用
- 导入依赖
异常
redis.clients.jedis.exceptions.JedisConnectionException: Failed to create socket.
- redis配置中bind可能设置的127.0.0.1,也就是只能本地访问,将bind设置修改成0.0.0.0
- 防火墙
redis.clients.jedis.exceptions.JedisDataException: DENIED Redis is running in protected mode because protected mode is enabled, no bind address was specified, no authentication password is requested to clients.
原因是
- bind配置被去掉了,没有配置
解决方案(以下任一方法都可)
命令关闭保护模式
config set protected-mode no
config rewrite //让配置永久生效
修改配置文件关闭保护模式
protected-mode no
启动参数关闭保护模式
--protected-mode no
配置一个bind地址或者设置一个授权密码
# lettuce
特点
Synchronous API
Asynchronous API
Reactive API
# Redisson
# SpringData
RedisTemplate
使用RedisTemplate执行set之后,直连redis通过**keys ***查看数据会发现key前面有一些特殊字符
原因是RedisTemplate默认使用JdkSerializationRedisSerializer作为序列化工具,按照某个规则在key前面加了什么字符但是通过redisTemplate取值时会得到预期的值,是对key做了相同的处理,如果要改变这种状况需要手动修改序列化方式
@Autowired(required = false) public void setRedisTemplate(RedisTemplate redisTemplate) { RedisSerializer stringSerializer = new StringRedisSerializer(); redisTemplate.setKeySerializer(stringSerializer); redisTemplate.setValueSerializer(stringSerializer); redisTemplate.setHashKeySerializer(stringSerializer); redisTemplate.setHashValueSerializer(stringSerializer); this.redisTemplate = redisTemplate; }
1
2
3
4
5
6
7
8
9StringRedisTemplate
问题管理
**
org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to 192.168.137.101:6379**
连接超时,偶尔能成功
解决方案:spring.redis.timeout 不要设置为0
如果是一直连接不上需要考虑是不是保护模式的问题或者防火墙