本文共 4591 字,大约阅读时间需要 15 分钟。
菜单大部分情况下不会出现变化,我们可以将其放入Redis 加快加载速度
org.springframework.boot spring-boot-starter-data-redis org.apache.commons commons-pool2
redis: timeout: 10000ms # 连接超时时间 host: 192.168.10.100 # Redis服务器地址 port: 6379 # Redis服务器端口 database: 0 # 选择哪个库,默认0库 lettuce: pool: max-active: 1024 # 最大连接数,默认 8 max-wait: 10000ms # 最大连接阻塞等待时间,单位毫秒,默认 -1 max-idle: 200 # 最大空闲连接,默认 8 min-idle: 5 # 最小空闲连接,默认 0
RedisConfig.java
import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;importorg.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;import org.springframework.data.redis.core.RedisTemplate;importorg.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;import org.springframework.data.redis.serializer.StringRedisSerializer;/*** Redis配置类** @author zhoubin* @since 1.0.0*/@Configurationpublic class RedisConfig { @Beanpublic RedisTemplateredisTemplate(LettuceConnectionFactoryredisConnectionFactory){ RedisTemplate redisTemplate = new RedisTemplate<>();//为string类型key设置序列器redisTemplate.setKeySerializer(new StringRedisSerializer());//为string类型value设置序列器redisTemplate.setValueSerializer(newGenericJackson2JsonRedisSerializer());//为hash类型key设置序列器redisTemplate.setHashKeySerializer(new StringRedisSerializer());//为hash类型value设置序列器redisTemplate.setHashValueSerializer(newGenericJackson2JsonRedisSerializer());redisTemplate.setConnectionFactory(redisConnectionFactory);return redisTemplate;}}
修改菜单方法:
MenuServiceImpl.java/*** 通过用户id获取菜单列表** @return*/@Overridepublic List
需要声明一配置项用于启用Repository以及模板
public class RedisConfig { @Bean public LettuceConnectionFactory redisConnectionFactory() { RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration("127.0.0.1", 6567); redisStandaloneConfiguration.setPassword("password");//如果有密码需要通过这个函数设置密码 return new LettuceConnectionFactory(redisStandaloneConfiguration); }@Bean public JedisConnectionFactory jedisConnectionFactory(){ //如果使用jedis作为客户端也需要声明该bean 使用与上面的类似}@Bean public RedisTemplate redisTemplate(){ RedisTemplatetemplate = new RedisTemplate<>(); RedisSerializer stringSerializer = new StringRedisSerializer(); JdkSerializationRedisSerializer jdkSerializationRedisSerializer = new JdkSerializationRedisSerializer(); template.setConnectionFactory(redisConnectionFactory()); template.setKeySerializer(stringSerializer); template.setHashKeySerializer(stringSerializer); template.setValueSerializer(stringSerializer); template.setHashValueSerializer(jdkSerializationRedisSerializer); template.setEnableTransactionSupport(true); template.afterPropertiesSet(); return template; }}
entity
import lombok.Data;import lombok.experimental.Accessors;import org.springframework.data.redis.core.RedisHash;import org.springframework.data.redis.core.index.Indexed;@Accessors(chain = true)@Data@RedisHash(value="Student",timeToLive = 10)public class stu implements Serializable { public enum Gender{ MALE,FEMALE } private String id; @Indexed private String name; private Gender gender; //RedisHash注解用于声明该实体将被存储与RedisHash中,如果需要使用repository的数据访问形式,这个注解是必须用到的 timetoLive为实体对象在数据库的有效期 //@Indexed用于标注需要作为查询条件的属性}
写接口
repository:@Repositorypublic interface StuRepository extends CrudRepository{ stu findByName(String name);//自定义查询方法,使用了@Indexed的name属性查询}
调用:
@SpringBootTestpublic class RedisApplicationTests { @Autowired StuRepository stuRepository; @Test void testSave(){ stu student = new stu().setId("0002").setName("xiaoming").setGender(stu.Gender.FEMALE); stuRepository.save(student);//根据id更新或者新增记录 } @Test void testFindBy(){ //使用主键查询 assert stuRepository.findById("0002").isPresent(); //根据自定义方法查询 assert stuRepository.findByName("xiaoming") !=null; }}
转载地址:http://vxten.baihongyu.com/