Spring Boot-整合redis(六)

來源:互聯網
上載者:User

標籤: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(六)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.