spring boot 與redis 整合

建立項目時須要導入的包
java

在application.yml 配置文件中配置須要的mysql

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/數據庫名?useSSL=false&serverTimezone=Asia/Shanghai
    username: 用戶名
    password: 密碼
  jpa:
    show-sql: true
    hibernate:
      ddl-auto: none
#redis 能夠不配,默認就是locatihost
  redis:
    host: localhost
    port: 6379
  cache:
    type: redis

建立一個實體類redis

package com.lanou3g.redisdemo.entity;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 建立人: 武奇
 * 建立事件: 2019/6/25
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Emp {

    private Long uuid;
    private String username;
    private String email;

}

在test 測試類中與redis交互spring

package com.lanou3g.redisdemo;

import com.lanou3g.redisdemo.entity.Emp;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.test.context.junit4.SpringRunner;

import javax.annotation.Resource;
import java.util.Collections;

@RunWith(SpringRunner.class)
@SpringBootTest
public class RedisDemoApplicationTests {

    // 若是沒有Spring, 而且還想使用Java操做Redis
    // 那麼須要引入Jedis框架

    @Resource
    private RedisTemplate<String, Object> redisTemplate;

    @Test
    public void contextLoads() {

        // RedisTemplate裏面的方法都是全局指令
        // 這些指令是與數據類型無關的
        // 好比: 刪除key, 設置過時時間, 判斷key是否存在等等
        
        this.redisTemplate.keys("school").forEach(System.out::println);
        //判斷key是否存在
        Boolean boo = this.redisTemplate.hasKey("school");
        System.out.println(boo ? "key存在" : "key不存在");
        //刪除
        Boolean b = this.redisTemplate.delete("school");
        System.out.println(b ? "刪除成功" : "刪除失敗");

    }

    @Test
    public void testString() {
        // 操做String類型的數據
//        添加 
        ValueOperations<String, Object> ops = this.redisTemplate.opsForValue();
        ops.set("ppppp111888", "藍鷗3G");
//        序列化轉換
        RedisSerializer<?> keySerializer = this.redisTemplate.getKeySerializer();
        System.out.println(keySerializer.getClass());
    }

    @Test
    public void saveObj() {
        Emp emp = Emp.builder()
                .uuid(1001L)
                .username("zhangsan")
                .email("zhang3@qq.com")
                .build();
//存儲對象時必須使這個對象序列化,咱們要配置bean
        ValueOperations<String, Object> ops = this.redisTemplate.opsForValue();
        ops.set("emp", emp);
    }

    @Test
    public void readObj() {
        ValueOperations<String, Object> ops = this.redisTemplate.opsForValue();

        Emp emp = (Emp) ops.get("emp");
        System.out.println(emp);

    }

}

配置beansql

package com.lanou3g.redisdemo.config;

import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;


@Configuration
@EnableCaching// 啓用緩存
public class RedisConfig {

//    配置key的序列化
    @Bean
    public RedisSerializer keySerializer() {
        return new StringRedisSerializer();
    }
    //    配置value的序列化
    @Bean
    public RedisSerializer valueSerializer() {
        // 當向Redis中存儲一個對象時候,
        // 會把對象轉換爲json數據存儲到Redis中
        return new GenericJackson2JsonRedisSerializer();
    }

//
    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        redisTemplate.setKeySerializer(keySerializer());
        redisTemplate.setHashKeySerializer(keySerializer());
        // 若是不配置JSON的序列化, 還想保存對象,
        // 那麼前提是這個對象是能夠被序列化的, 也就是說
        // 對應的類必須是實現Serializable接口的
        // 若是須要使用JSON的序列化, 被保存的對象,
        // 必須得有默認的構造方法, 不然對象能被存上, 可是讀不出來
        redisTemplate.setValueSerializer(valueSerializer());
        redisTemplate.setHashValueSerializer(valueSerializer());
        return redisTemplate;
    }

      //實體類配置Bean  與配置文件配置沒有任何差別

    /*
    <bean id="keySerializer" class="org.springframework.data.redis.serializer.StringRedisSerializer"/>

    <bean id="redisTemplate" class="com.xxx.RedisTemplate">
        <property key="connectionFactory" ref="redisConnectionFactory"/>
        <property key="keySerializer" ref="keySerializer" />
        <property key="hashKeySerializer" ref="keySerializer" />
    </bean>




     */

}
相關文章
相關標籤/搜索