1. 程式人生 > >從.Net到Java學習第四篇——spring boot+redis

從.Net到Java學習第四篇——spring boot+redis

“學習java已經十天,有時也懷念當初.net的經典,讓這語言將你我相連,懷念你......”接上一篇,本篇使用到的框架redis、FastJSON。

環境準備

安裝redis,下圖是我本機的redis綠色版,你可以網上自行下載安裝,如果不知道如何怎麼操作,可以移步到我的另一篇文章:ASP.NET Redis 開發

以管理員身份開啟CMD視窗:

C:\Users\zouqj>e:

E:\>cd E:\Redis-x64-3.2.100

E:\Redis-x64-3.2.100>redis-server --service-install redis.windows.conf --loglevel verbose --service-name redis --port 6379

執行之後,記得啟動redis服務,我這裡redis沒有設定密碼。

啟動服務命令:net start redis

修改pom.xml,新增redis的依賴

        <!--redis-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-redis</artifactId>
            <
version>1.3.8.RELEASE</version> </dependency> <!--JSON--> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.1.23</version> </dependency
>

修改專案配置檔案,新增如下配置節點

    redis:
      database: 0
      host: 127.0.0.1
      port: 6379
      pool:
        max-active: 100
        max-idle: 10
        max-wait: 100000
      timeout: 0

最終配置如下:

redis配置項說明:

# REDIS (RedisProperties)
# Redis資料庫索引(預設為0)
spring.redis.database=0  
# Redis伺服器地址
spring.redis.host=127.0.0.1
# 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  

新建一個redis的配置類RedisConfig,因為是配置類,所以要在類上面添加註解@Configuration

@EnableAutoConfiguration註解我們看下它的原始碼,發現它是一個組合註解

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({EnableAutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
    String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";

    Class<?>[] exclude() default {};

    String[] excludeName() default {};
}

@EnableAutoConfiguration註解大致處理流程就是:
1、先去掃描已經被@Component所註釋的類,當然會先判斷有沒有@Condition相關的註解。
2、然後遞迴的取掃描該類中的@ImportResource,@PropertySource,@ComponentScan,@Bean,@Import。一直處理完。

@Configuration
@EnableAutoConfiguration
public class RedisConfig {
    @Bean
    @ConfigurationProperties(prefix = "spring.redis.pool")
    public JedisPoolConfig getRedisConfig() {
        JedisPoolConfig config = new JedisPoolConfig();
        return config;
    }

    @Bean
    @ConfigurationProperties(prefix = "spring.redis")
    public JedisConnectionFactory getConnectionFactory() {
        JedisConnectionFactory factory = new JedisConnectionFactory();
        factory.setUsePool(true);
        JedisPoolConfig config = getRedisConfig();
        factory.setPoolConfig(config);
        return factory;
    }

    @Bean
    public RedisTemplate<?, ?> getRedisTemplate() {
        JedisConnectionFactory factory = getConnectionFactory();
        RedisTemplate<?, ?> template = new StringRedisTemplate(factory);
        return template;
    }
}

新增一個redis的介面服務RedisService

package com.yujie.service;

public interface RedisService {
    /**
     * set存資料 * @param key * @param value * @return
     */
    boolean set(String key, String value);

    /**
     * get獲取資料 * @param key * @return
     */
    String get(String key);

    /**
     * 設定有效天數 * @param key * @param expire * @return
     */
    boolean expire(String key, long expire);

    /**
     * 移除資料 * @param key * @return
     */
    boolean remove(String key);

}

新增redis實現類RedisServiceImpl,注意下面程式碼中標紅了的程式碼,這裡設定redis的key和value以字串的方式進行儲存,如果不配置的話,預設是以16進位制的形式進行儲存,到時候我們讀取的時候,就會看著很亂。

@Service("redisService")
public class RedisServiceImpl implements RedisService {
    @Resource
    private RedisTemplate<String, ?> redisTemplate;

    @Override
    public boolean set(final String key, final String value) {
        boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {
            @Override
            public Boolean doInRedis(RedisConnection connection) throws DataAccessException {
                RedisSerializer<String> serializer = redisTemplate.getStringSerializer();
                connection.set(serializer.serialize(key), serializer.serialize(value));
                return true;
            }
        });
        return result;
    }

    @Override
    public String get(final String key) {
        String result = redisTemplate.execute(new RedisCallback<String>() {
            @Override
            public String doInRedis(RedisConnection connection) throws DataAccessException {
                RedisSerializer<String> serializer = redisTemplate.getStringSerializer();
                byte[] value = connection.get(serializer.serialize(key));
                return serializer.deserialize(value);
            }
        });
        return result;
    }

    @Override
    public boolean expire(final String key, long expire) {
        return redisTemplate.expire(key, expire, TimeUnit.SECONDS);
    }

    @Override
    public boolean remove(final String key) {
        boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {
            @Override
            public Boolean doInRedis(RedisConnection connection) throws DataAccessException {
                RedisSerializer<String> serializer = redisTemplate.getStringSerializer();
                connection.del(key.getBytes());
                return true;
            }
        });
        return result;
    }
}

由於專案中引入了spring-boot-starter-test的依賴,也就是集成了spring boot的單元測試框架。給redis實現類,新增單元測試,將游標移動到RedisService介面位置處,然後按Alt+Enter,如下圖所示:

全選所有方法

在model包中,新增一個實體類Person

public class Person {
    private String name;
    private String sex;

    public Person() {
    }

    public Person(String name, String sex) {
        this.name = name;
        this.sex = sex;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
}

接下來,我們再修改一下單元測試

@RunWith(SpringRunner.class)
@SpringBootTest
public class RedisServiceImplTest {
    private JSONObject json = new JSONObject();
    @Autowired
    private RedisService redisService;

    @Test
    public void contextLoads() throws Exception {
    }

    /**
     * 插入字串
     */
    @Test
    public void setString() {
        redisService.set("redis_string_test", "springboot redis test");
    }

    /**
     * 獲取字串
     */
    @Test
    public void getString() {
        String result = redisService.get("redis_string_test");
        System.out.println(result);
    }

    /**
     * 插入物件
     */
    @Test
    public void setObject() {
        Person person = new Person("person", "male");
        redisService.set("redis_obj_test", json.toJSONString(person));
    }

    /**
     * 獲取物件
     */
    @Test
    public void getObject() {
        String result = redisService.get("redis_obj_test");
        Person person = json.parseObject(result, Person.class);
        System.out.println(json.toJSONString(person));
    }

    /**
     * 插入物件List
     */
    @Test
    public void setList() {
        Person person1 = new Person("person1", "male");
        Person person2 = new Person("person2", "female");
        Person person3 = new Person("person3", "male");
        List<Person> list = new ArrayList<>();
        list.add(person1);
        list.add(person2);
        list.add(person3);
        redisService.set("redis_list_test", json.toJSONString(list));
    }

    /**
     * 獲取list
     */
    @Test
    public void getList() {
        String result = redisService.get("redis_list_test");
        List<String> list = json.parseArray(result, String.class);
        System.out.println(list);
    }

    @Test
    public void remove() {
        redisService.remove("redis_test");
    }

}
View Code

 我們發現,在單元測試類上面自動添加了2個註解,@SpringBootTest@RunWith(SpringRunner.class)

@SpringBootTest註解是SpringBoot自1.4.0版本開始引入的一個用於測試的註解。

@RunWith就是一個執行器

@RunWith(SpringRunner.class)就是指用SpringRunner來執行

執行單元測試:

檢視redis中的結果,這裡用到一個視覺化的redis管理工具:RedisDesktopManager

相關推薦

.Net到Java學習——spring boot+redis

“學習java已經十天,有時也懷念當初.net的經典,讓這語言將你我相連,懷念你......”接上一篇,本篇使用到的框架redis、FastJSON。 環境準備 安裝redis,下圖是我本機的redis綠色版,你可以網上自行下載安裝,如果不知道如何怎麼操作,可以移步到我的另一篇文章:ASP.NET R

.Net到Java學習——spring boot+mybatis+mysql

jar fig targe list pro ble TE png tween 環境:mysql5.7 新建mysql數據庫demo,然後執行如下sql腳本進行數據表創建和數據初始化: -- ---------------------------- -- Tabl

.Net到Java學習——Spring Boot檔案上傳和下載

圖片上傳 Spring Boot中的檔案上傳就是Spring MVC中的檔案上傳,將其整合進來了。 在模板目錄建立一個新的頁面 profile/uploadPage.html <!DOCTYPE html> <html xmlns:th="http://www.thymel

.Net到Java學習——Spring Boot &&Profile &&Swagger2

剛學java不久,我有個疑問,為何用到的各種java開源jar包許多都是阿里巴巴的開源專案,為何幾乎很少見百度和騰訊?不是說好的BAT嗎? Spring Boot 的配置檔案及多環境配置   Spring Boot 使用一個全域性的配置檔案 application.properties 或 appli

: Spring Boot使用校驗框架validation校驗

Spring Boot在內部通過整合hibernate-validation已經實現了JSR-349驗證規範介面,在Spring Boot專案中只要直接使用就行了。一般用在Controller中用於驗證前端傳來的引數。驗證分兩種:對封裝的Bean進行驗證  或者  對方法簡單

Oracle 學習

結果 使用 職位 com 函數 分組顯示 日期比較 統計 comm Day04-Oracle查詢基礎 學習目標: ? 修改數據 ? 刪除數據 ? 簡單查詢 ? 條件查詢 ? 分組查詢 oracle修改數據 使用update語句修改表中數據。 Update 語句基本語法:

MyBatis學習——(攔截器和攔截器分頁實現)

MyBatis架構體圖 1:mybatis核心物件 從MyBatis程式碼實現的角度來看,MyBatis的主要的核心部件有以下幾個: SqlSession         &n

機器學習

全文搜尋引擎允許人們在大量文件中搜索一系列單詞,並根據文件與這些單詞的相關程度對結果進行排序。 PageRank——標準演算法的一個變體 資訊檢索步驟: 1、找到一種蒐集文件的方法 爬蟲:接受一組等待建立索引的網頁,再根據這些網頁內部的連結進而找到其他的網頁,依此類推。程式碼通常會將

Python 語言學習 :動態型別模型

Python的變數不用宣告,賦值之後就可以直接使用,型別是在執行過程中自動確定的,這就是動態型別模型。該模型把變數和物件設計成兩個不同的實體,物件是儲存資料的地方,物件的型別是由初始值自動決定的,而變數僅僅是物件的引用。變數是通用的,同一個變數名可以引用任何型別的物件。 一,變數、物件和引用 動態型別模型

Spring Boot技術指南--部分 Spring Boot特性

這一章我們將更深入的學習Spring Boot,學習如何使用和定製它的特性。 23 SpringApplication SpringApplication從main啟動來引導Spring Boot。 public static void main(String[

vue餓了麼學習-(web字型)

1.字型庫網站:icomoon 2.在官網點選右上角icomoon app按鈕, 新頁面找到import ICONS點選, 選擇自己所有的svg檔案確定上傳, 選中新增的全部小圖示, 然後點選右下角的crate font, 跳轉到新頁面以後,每一個圖示下面都會出

【springboot 入門0 spring-boot是什麼

作為一個java程式設計師,如果你還不知道springboot,那你一定是落後了。 1. 什麼是springboot Spring Boot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程。該框架

spring boot實戰()Spring boot Bean載入原始碼分析

public static void invokeBeanFactoryPostProcessors( ConfigurableListableBeanFactory beanFactory, List<BeanFactoryPostProcessor> beanFactoryPostPro

SpringBoot入門系列: Spring Boot的測試

Spring Boot的測試,和普通專案的測試類同,可以繼續使用我們熟悉的測試工具。當然,這裡的測試,主要還是後臺程式碼的測試。 主要需要注意的地方僅有三點: 1、依賴包的引入:pom.xml中僅依賴spring-boot-starter-test,它把相關的依賴全部引入。 2、在測試類上的註解,常

Spring Boot學習(十)之Spring boot中使用QQ郵箱傳送郵件

相信使用過Spring的眾多開發者都知道Spring提供了非常好用的JavaMailSender介面實現郵件傳送。在Spring Boot的Starter模組中也為此提供了自動化配置。下面通過例項看看如

Python學習:利用python抓取英語單詞

一,為什麼這麼做? 1,當我們需要自己定製自己的ietls單詞本時,往往會因為各種原因不能達到目的。比如詞形相近的詞不在一起,沒有例句等問題。 2,使用python抓取資料,是對python的一種熟練。 二,怎麼做? 1,首先提供兩個網址: "http://www.exam

Spring Cloud十三 | Spring Boot Admin服務監控

本文是Spring Cloud專欄的第十三篇文章,瞭解前十二篇文章內容有助於更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用元件介紹概覽 Spring Cloud第二篇 | 使用並認識Eureka註冊中心 Spring Cloud第三篇 | 搭建高可用E

SpringBoot自學教程 | Spring Boot整合mybatis

整合 com 字段 apach param pack image ice rac   引入依賴   1:在pom文件引入mybatis-spring-boot-starter的依賴: 1 <dependency> 2 <groupId>

Spring Boot開啟宣告式事務

Spring支援宣告式事務,即使用註解來選擇需要使用事務的方法,它使用@Transactional註解在方法上表明該方法需要事務支援。當然,Spring Boot開啟事務也只需要一個註解@Transactional 就可以了。 準備階段 在pom檔案中引入mybatis啟動依賴:

RabbitMQSpring集成RabbitMQ

led ase don 才會 catch rabl try edt .get 前面幾篇講解了如何使用rabbitMq,這一篇主要講解spring集成rabbitmq。 首先引入配置文件org.springframework.amqp,如下 &l