当前位置:   article > 正文

Redis的SessionCallback接口

sessioncallback
  1. /**
  2. * Created on 2019/3/31.
  3. * Title: Simple
  4. * Description:配置類
  5. * Copyright: Copyright(c) 2019
  6. * Company:
  7. *
  8. * @author wy
  9. */
  10. @Configuration
  11. @Slf4j
  12. public class RedisConfig {
  13. @Value("${redis.host}")
  14. private String host;
  15. @Value("${redis.port}")
  16. private Integer port;
  17. @Value("${redis.password}")
  18. private String password;
  19. @Value("${redis.timeout}")
  20. private int timeout;
  21. @Value("${redis.pool.max-total}")
  22. private int maxTotal;
  23. @PostConstruct
  24. public void init()
  25. {
  26. log.info("ids redis host {}, port {}", this.host, this.port);
  27. }
  28. @Primary
  29. @Bean(name="redisConnectionFactory")
  30. public JedisConnectionFactory idsRedisConnectionFactory() {
  31. if (StringUtil.isBlank(this.host)) {
  32. log.info("No need to initialize ids redis.");
  33. return null;
  34. }
  35. JedisConnectionFactory factory = new JedisConnectionFactory();
  36. factory.setHostName(this.host);
  37. factory.setPort(this.port);
  38. //factory.setDatabase(this.index);
  39. factory.setTimeout(this.timeout);
  40. factory.setUsePool(true);
  41. if (StringUtil.isNotBlank(this.password)) {
  42. factory.setPassword(this.password);
  43. log.info("idsRedisConnectionFactory setPassword {}", this.password);
  44. }
  45. JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
  46. jedisPoolConfig.setMaxTotal(this.maxTotal);
  47. factory.setPoolConfig(jedisPoolConfig);
  48. return factory;
  49. }
  50. @Primary
  51. @Bean(name="idsRedisTemplate")
  52. public RedisTemplate<String, String> idsRedisTemplate(@Qualifier("redisConnectionFactory")
  53. RedisConnectionFactory cacheRedisConnectionFactory) {
  54. if (null == cacheRedisConnectionFactory) {
  55. return null;
  56. }
  57. StringRedisTemplate template = new StringRedisTemplate(cacheRedisConnectionFactory);
  58. template.setKeySerializer(new StringRedisSerializer());
  59. template.setHashKeySerializer(new StringRedisSerializer());
  60. template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
  61. template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
  62. template.afterPropertiesSet();
  63. log.warn("set ids redis {}:{}", this.host, this.port);
  64. return template;
  65. }
  66. }

set和get方法看起来很简单,它可能就来自于同一个Redis连接池的不同的redis的连接。为了使得所有的操作都来自于同一个连接,这样就可以保证很多命令,一个一个去执行,redis性能是很好的,但是存在网络延时的问题,会浪费掉很多的时间,所以批处理很快的可以执行快速的读写,执行此操作,有两个接口,还有一个RedisSessionCallback接口,但是这个接口并不有好,比较底层的封装,所以现在都在实现sessioncallback接口,通过这个接口就可以把多个命令放入到同一个Redis连接中去执行,可以使用同一个连接进行批量执行 

  1. /**
  2. * Created on 2019/3/31.
  3. * Title: Simple
  4. * Description:測試類
  5. * Copyright: Copyright(c) 2018
  6. * Company:
  7. *
  8. * @author wy
  9. */
  10. @Service
  11. public class TestRedis {
  12. @Autowired
  13. private RedisTemplate redisTemplate;
  14. public void redis() {
  15. Role role = new Role();
  16. role.setId(10);
  17. role.setRoleName("CEO");
  18. SessionCallback sessionCallback = new SessionCallback<Role>() {
  19. @Override
  20. public Role execute(RedisOperations redisOperations) throws DataAccessException {
  21. redisOperations.boundValueOps("role_1").set(role);
  22. return (Role) redisOperations.boundValueOps("role_1").get();
  23. }
  24. };
  25. Role role1 = (Role) redisTemplate.execute(sessionCallback);
  26. System.out.println(role1.getRoleName());
  27. }
  28. }

配置中心:

  1. #redis
  2. redis:
  3. host: 127.0.0.1
  4. port: 6379
  5. password:
  6. timeout: 2000
  7. pool:
  8. max-active: 8
  9. max-idle: 8
  10. max-wait: -1
  11. min-idle: 0
  12. max-total: 10

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/318419
推荐阅读
相关标签
  

闽ICP备14008679号