springboot集成redis
- lettcus与jedis的区别:
jedis链接Redis服务器是直连模式,当多线程模式下使用jedis会存在线程安全问题,解决方案可以通过配置连接池使每个链接专用,这样整体性能就大受影响。
lettcus基于Netty框架与Redis服务器连接,底层设计中蚕蛹StatusFulRedisConnection。StatusFulRedisConnection自身是线程安全的,可以保障并发访问安全问题,所以一个链接可以被多线程复用。当然Lettcus也支持多连接实例一起工作。
备注:
Spring Boot Data(数据) Redis 中提供了RedisTemplate和StringRedisTemplate,其中
StringRedisTemplate是RedisTemplate的子类,两个方法基本一致,不同之处主要体现在操作的数据类
型不同,RedisTemplate中的两个泛型都是Object,意味着存储的key和value都可以是一个对象,而
StringRedisTemplate的两个泛型都是String,意味着StringRedisTemplate的key和value都只能是
字符串。
注意: 使用RedisTemplate默认是将对象序列化到Redis中,所以放入的对象必须实现对象序列化接口
- 集成lettcus
引入jar包:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
资源文件配置:
spring:
redis:
host: localhost
port: 6379
password: 123456
client-type: jedis
测试类:
@SpringBootTest(classes = App.class)
public class RedisTest {
@Test
public void SetTest(@Autowired RedisTemplate redisTemplate){
ValueOperations value = redisTemplate.opsForValue();
value.set("springBoot","RedisOnSpringBoot123");
}
@Test
public void GetTest(@Autowired RedisTemplate redisTemplate){
ValueOperations value = redisTemplate.opsForValue();
Object o = value.get("springBoot");
System.out.println(o);
}
}
- 集成jedis
引入jar包:
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
资源文件配置:
spring:
redis:
host: localhost
port: 6379
password: 123456
client-type: jedis
测试类:
@SpringBootTest(classes = App.class)
public class RedisTest {
@Test
public void SetTest(@Autowired RedisTemplate redisTemplate){
ValueOperations value = redisTemplate.opsForValue();
value.set("springBoot","RedisOnSpringBoot123");
}
@Test
public void GetTest(@Autowired RedisTemplate redisTemplate){
ValueOperations value = redisTemplate.opsForValue();
Object o = value.get("springBoot");
System.out.println(o);
}
}
- Redis实现分布式Session管理
memcache和redis实现session共享的区别
memcache
memcache和tomcat的兼容性不是很好
memcache是基于与tomcat做的全局session管理,不需要对部署在tomcat上的应用做相应的处理
redis是基于应用做的session管理
引入依赖:
<!--springboot-redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--spring-data-redis session管理-->
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
资源文件配置:
server:
port: 8989
servlet:
context-path: /dev
spring:
redis:
host: localhost
port: 6379
password: 123456
database: 0
配置类:
@Configuration
@EnableRedisHttpSession
public class RedisSessionManager {
}
测试类
@Controller
@RequestMapping("/hello")
public class TestController {
@RequestMapping("/abc")
public void test(HttpServletRequest request, HttpServletResponse response) throws IOException {
List<String> list = (List<String>) request.getSession().getAttribute("list");
if (list == null) {
list = new ArrayList<>();
}
list.add("abc");
request.getSession().setAttribute("list", list);
response.getWriter().println("size:"+list.size());
response.getWriter().println("sessionId:"+request.getSession().getId());
}
}
测试url:
http://localhost:8989/dev/hello/abc
测试结果: