1. 程式人生 > >SpringBoot關聯NOSql資料庫 Redis

SpringBoot關聯NOSql資料庫 Redis

一,SpringBoot關聯NOSql資料庫 Redis
Redis資料庫安裝 :
Redis資料庫安裝最好是在Linux的環境下,因為Redis資料庫本身開發的軟體只有Linux版本,windows環境下的redis是後期windows開發的,並不是十分的穩定。

安裝十分簡單 :
    下載redis的安裝包,將redis的存放路徑在path環境變數中進行配置,以防在doc視窗中顯示非命令錯誤。
    執行  redis-server.exe  redis.conf  就可以啟動redis   (這個視窗不要關)  , 開啟新的cmd視窗 , 到reids的存放路徑下操作, 輸入redis-cli.exe -h localhost
    沒有錯誤的話就差不多正確了,可以通過set和get命令讀寫看看是否正確地進行了操作!
SpringBoot操作Redis資料庫的簡單例項 : 
                <name>redis</name>
                <description>Demo project for Spring Boot</description>
                <parent>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-parent</artifactId
>
<version>1.5.9.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding
>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 新增redis的依賴jar包 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> <version>1.4.7.RELEASE</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>

我在匯入jar包的時候一直出現這個jar包unknow的情況,修改下映象為阿里雲或者別的,或者你可以嘗試修改redis jar包的版本號試試!,一般不會出錯。

在application.properties檔案中新增如下的配置:

        # REDIS (RedisProperties)
        # Redis資料庫索引(預設為0)
        spring.redis.database=0
        # Redis伺服器地址
        spring.redis.host=localhost
        # Redis伺服器連線埠
        spring.redis.port=6379
        # Redis伺服器連線密碼(預設為空)
        spring.redis.password=
        # 連線池最大連線數(使用負值表示沒有限制)
        spring.redis.pool.max-active=8
        # 連線池最大阻塞等待時間(使用負值表示沒有限制)
        spring.redis.pool.max-wait=-1
        # 連線池中的最大空閒連線
        spring.redis.pool.max-idle=8
        # 連線池中的最小空閒連線
        spring.redis.pool.min-idle=0
        # 連線超時時間(毫秒)
        spring.redis.timeout=0

test檔案中進行測試:

        @RunWith(SpringRunner.class)
        @SpringBootTest
        public class RedisApplicationTests {
            @Autowired
            private StringRedisTemplate stringRedisTemplate;
            @Test
            public void contextLoads() {
                //儲存字串
                stringRedisTemplate.opsForValue().set("key1","111");
                //Assert.assertEquals("111",stringRedisTemplate.opsForValue().get("key1"));
                System.out.print(stringRedisTemplate.opsForValue().get("key1"));
            }
        }

StringRedisTemplate物件能夠對Redis進行讀取操作,操作的型別為String,其實是相當於RedisTemplate<String,String>
RedisTemplate物件也能夠對Redis進行操作,操作物件,相當於RedisTemplate<String,Object>

特別需要注意的是: SpringBoot並不支援直接使用物件,這就需要我們自己實現  RedisSerializer<T> 介面來對傳入進來的物件
進行序列化和反序列化操作。

第一步:  建立實體類物件  (省略)
第二步:  實現物件的序列化介面
            public class RedisObjectSerializer implements RedisSerializer<Object> {

                private Converter<Object, byte[]> serializer = new SerializingConverter();
                private Converter<byte[], Object> deserializer = new DeserializingConverter();

                static final byte[] EMPTY_ARRAY = new byte[0];

                public Object deserialize(byte[] bytes) {
                    if (isEmpty(bytes)) {
                        return null;
                    }

                    try {
                        return deserializer.convert(bytes);
                    } catch (Exception ex) {
                        throw new SerializationException("Cannot deserialize", ex);
                    }
                }

                public byte[] serialize(Object object) {
                    if (object == null) {
                        return EMPTY_ARRAY;
                    }

                    try {
                        return serializer.convert(object);
                    } catch (Exception ex) {
                        return EMPTY_ARRAY;
                    }
                }

                private boolean isEmpty(byte[] data) {
                    return (data == null || data.length == 0);
                }
            }

第三步: 配置針對實體類的RedisTemplate例項

            @Configuration
            public class RedisConfig {

                @Bean
                JedisConnectionFactory jedisConnectionFactory(){
                    return new JedisConnectionFactory();
                }

                @Bean
                public RedisTemplate<String, User> redisTemplate( RedisConnectionFactory factory){
                    RedisTemplate<String, User> template = new RedisTemplate<>();
                    template.setConnectionFactory(jedisConnectionFactory());
                    template.setKeySerializer(new StringRedisSerializer());
                    template.setValueSerializer(new RedisObjectSerializer());
                    return template;
                }
            }

第四步:編寫測試類


            @RunWith(SpringJUnit4ClassRunner.class)
            @SpringBootTest
            public class RedisApplicationTests {

                @Autowired
                private RedisTemplate<String , User> redisTemplate;

                @Test
                public void test(){
                    //儲存物件
                    User user = new User("liang",22,"男");
                    redisTemplate.opsForValue().set(user.getName(),user);

                    user = new User("yunqing", 25,"男");
                    redisTemplate.opsForValue().set(user.getName(),user);

                    Assert.assertEquals(20,redisTemplate.opsForValue().get("liang").getName());
                }

            }

這裡寫圖片描述