springboot集成redis(用jedis连接池)

集成

pom.xml中添加(默认是用lettuce,想用jedis需要排除掉lettuce):

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-redis</artifactId>
	<exclusions>
		<exclusion>
			<groupId>io.lettuce</groupId>
			<artifactId>lettuce-core</artifactId>
		</exclusion>
	</exclusions>
</dependency>
<dependency>
	<groupId>redis.clients</groupId>
	<artifactId>jedis</artifactId>
</dependency>

application.properties中添加:

spring.redis.database=0
spring.redis.host=47.104.176.200
spring.redis.port=6379
spring.redis.password=1234
#很多人这里都写0
spring.redis.timeout=3000

# 连接池最大连接数(使用负值表示没有限制)
spring.redis.jedis.pool.max-active=50
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.jedis.pool.max-wait=-1
# 连接池中的最大空闲连接
spring.redis.jedis.pool.max-idle=50
# 连接池中的最小空闲连接
spring.redis.jedis.pool.min-idle=5

**为什么不是spring.redis.pool.max-active **
因为新版本的RedisProperties类把Pool放到Redis中了。
有2个可选的连接池,redislettuce,如果用lettuce,那么写为spring.redis.lettuce.pool.max-active

使用RedisTemplate会乱码,因为redis存取的时候会用byte的形式。
解决方法:用StringRedisTemplate,它默认使用utf-8编码。

LoginController代码:

@RestController
@RequestMapping("")
public class LoginController {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    @RequestMapping("/login")
    public String login(HttpServletRequest request){
        System.out.println(stringRedisTemplate);
        ValueOperations valueOperations = stringRedisTemplate.opsForValue();

        valueOperations.set("shanghai","shanghai"); // 新增
        valueOperations.set("hebei","shijiazhuang2"); // 存在的话就是修改
        stringRedisTemplate.delete("one"); // del
        return "fail";
    }
}

debug模式启动,浏览器输入: http://localhost:8080/login

spring.redis.timeout=0是什么意思

首先 spring.redis.timeout 是设置连接超时时间的,单位是毫秒。
例如 10 表示10ms。
那么0表示0毫秒就超时么?
当然不是,0表示不设置超时时间,使用的默认值2000ms。

代码见:

redis.clients.jedis.Connection 类的 connectionTimeout:
private int connectionTimeout = Protocol.DEFAULT_TIMEOUT;

Protocol类的 DEFAULT_TIMEOUT:
public static final int DEFAULT_TIMEOUT = 2000;

如果timeout=0 ,不设置setTimeout,所以直接是默认值。

spring.redis.expire=10是什么意思

这个和timeout一样吗?单位是什么?
不一样,expire设置的过期时间。 单位是??

其他

报错:Could not get a resource from the pool

毫无疑问,链接不上。
看下是host或者密码哪个不对。
有一点需要注意下,yml中的value不能有@等特殊字符,如果有,两端加上单引号可以解决问题。

spring-data-redis官网文档(很不错):
https://docs.spring.io/spring-data/redis/docs/current/reference/html/#redis:requirements

其他redis工具类的引入

<dependency>
	<groupId>com.iqarr.redis</groupId>
	<artifactId>zy-redis-utils</artifactId>
	<version>0.0.2</version>
</dependency>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值