從.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啟動依賴:
RabbitMQ第四篇:Spring集成RabbitMQ
led ase don 才會 catch rabl try edt .get 前面幾篇講解了如何使用rabbitMq,這一篇主要講解spring集成rabbitmq。 首先引入配置文件org.springframework.amqp,如下 &l