標籤:map desktop 代碼 apach eid string ase TE temp
redis安裝
參考:https://www.cnblogs.com/LQBlog/p/9214517.html
單機版
1.添加pom依賴
<!-- Spring Boot Reids 依賴 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <version>1.5.7.RELEASE</version> </dependency> <!--spring2.0整合redis所需common-pool2--> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> <version>2.4.2</version> </dependency>
2.application.properties配置redis串連資訊
spring redis: host: 192.168.65.128 port: 6379 timeout: 0 password: # 密碼 沒有則不填
3.添加測試代碼
@Servicepublic class AddressServiceImpl extends BaseServiceImpl<Address> implements AddressService { @Resource AddressMapper addressMapper; @Autowired private RedisTemplate<Object,Object> redisTemplate; @Override public Address selectByPrimaryKey(Object key) { String redisKey=key.toString(); Address address=(Address) redisTemplate.opsForValue().get(redisKey); if(address==null){ //防止緩衝穿透 synchronized (this) { address = (Address) redisTemplate.opsForValue().get(redisKey); if (address == null) { address = super.selectByPrimaryKey(key); redisTemplate.opsForValue().set(redisKey, address); } } }else { System.out.println("使用緩衝了"); } return address; }}
紅色代碼是為了防止記憶體穿透,比如你這個業務方法有10000個人同時訪問,如果不加鎖。當第一次訪問都判斷address為空白 然後全部去查資料庫,正常應該是一個串連查詢資料庫並設定緩衝 後面9999都使用緩衝
通過redis Desktop Manager查看結果
因預設key 和value都是用jdk內建的序列化方式JdkSerializationRedisSerializer 可以發現可讀性很差
自訂序列化方式
新增一個redisConfig 配置序列化方式
@Configurationpublic class RedisConfig { /** * redisTemplate 序列化使用的jdkSerializeable, 儲存二進位位元組碼, 所以自訂序列化類別 * @param redisConnectionFactory * @return */ @Bean public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(redisConnectionFactory); // 使用Jackson2JsonRedisSerialize 替換預設序列化 Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(objectMapper); // 設定value的序列化規則和 key的序列化規則 redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); redisTemplate.afterPropertiesSet(); return redisTemplate; }}
再次測試結果
Spring Boot-整合redis(六)