【文末送書】還在直接操作Redis?你Out啦!
DAO接口只需繼承CrudRepository,Spring Data Redis能為DAO組件提供實(shí)現(xiàn)類。
Spring Data Redis支持方法名關(guān)鍵字查詢,只不過Redis查詢的屬性必須是被索引過的。
Spring Data Redis同樣支持DAO組件添加自定義的查詢方法—通過添加額外的接口,并為額外的接口提供實(shí)現(xiàn)類,Spring Data Redis就能將該實(shí)現(xiàn)類中的方法“移植”到DAO組件中。
Spring Data Redis同樣支持Example查詢。
And:比如在接口中可以定義“findByNameAndAge”。
Or:比如“findByNameOrAge”。
Is、Equals:比如“findByNameIs”“findByName”“findByNameEquals”。這種表示相同或相等的關(guān)鍵字不加也行。
Top、First:比如“findFirst5Name”“findTop5ByName”,實(shí)現(xiàn)查詢前5條記錄。
@RedisHash:該注解指定將數(shù)據(jù)類映射到Redis的Hash對象。
@TimeToLive:該注解修飾一個數(shù)值類型的屬性,用于指定該對象的超時時長。
@Indexed:指定對普通類型的屬性建立索引,索引化后的屬性可用于查詢。
@GeoIndexed:指定對Geo數(shù)據(jù)(地理數(shù)據(jù))類型的屬性建立索引。
spring.redis.host=localhostspring.redis.port=6379# 指定連接Redis的DB1數(shù)據(jù)庫spring.redis.database=1# 連接密碼spring.redis.password=32147# 指定連接池中最大的活動連接數(shù)為20spring.redis.lettuce.pool.maxActive = 20# 指定連接池中最大的空閑連接數(shù)為20spring.redis.lettuce.pool.maxIdle=20# 指定連接池中最小的空閑連接數(shù)為2spring.redis.lettuce.pool.minIdle = 2
public class Book{// 標(biāo)識屬性,可用于查詢privateInteger id;// 帶@Indexed注解的屬性被稱為“二級索引”,可用于查詢privateString name;privateString description;privateDouble price;// 定義它的超時時長Longtimeout;// 省略getter、setter方法和構(gòu)造器...}
public interface BookDaoextends CrudRepository<Book, Integer>,QueryByExampleExecutor<Book>{List<Book> findByName(Stringname);List<Book> findByDescription(StringsubDesc);}
(webEnvironment = SpringBootTest.WebEnvironment.NONE)public class BookDaoTest{private BookDaobookDao;publicvoid testSaveWithId(){varbook = new Book("瘋狂Python","系統(tǒng)易懂的Python圖書,覆蓋數(shù)據(jù)分析、爬蟲等熱門內(nèi)容", 118.0);// 顯式設(shè)置id,通常不建議設(shè)置book.setId(2);book.setTimeout(5L); // 設(shè)置超時時長bookDao.save(book);}publicvoid testUpdate(){// 更新id為2的Book對象bookDao.findById(2).ifPresent(book -> {book.setName("瘋狂Python講義");bookDao.save(book);});}publicvoid testDelete(){// 刪除id為2的Book對象bookDao.deleteById(2);}({"瘋狂Java講義, 最全面深入的Java圖書, 129.0","SpringBoot終極講義,無與倫比的SpringBoot圖書, 119.0"})publicvoid testSave(String name, String description, Double price){varbook = new Book(name, description, price);bookDao.save(book);}(strings= {"瘋狂Java講義"})publicvoid testFindByName(String name){bookDao.findByName(name).forEach(System.out::println);}(strings= {"最全面深入的Java圖書"})publicvoid testFindByDescription(String description){bookDao.findByDescription(description).forEach(System.out::println);}({"瘋狂Java講義, 最全面深入的Java圖書"})publicvoid testExampleQuery1(String name, String description){// 創(chuàng)建樣本對象(probe)vars = new Book(name, description, 1.0);// 不使用ExampleMatcher,創(chuàng)建默認(rèn)的ExamplebookDao.findAll(Example.of(s)).forEach(System.out::println);}(strings= {"SpringBoot終極講義"})publicvoid testExampleQuery2(String name){// 創(chuàng)建matchingAll的ExampleMatcherExampleMatchermatcher = ExampleMatcher.matching()// 忽略null屬性,該方法可以省略//.withIgnoreNullValues().withIgnorePaths("description"); // 忽略description屬性// 創(chuàng)建樣本對象(probe)vars = new Book(name, "test", 1.0);bookDao.findAll(Example.of(s,matcher)).forEach(System.out::println);}}




book:在該key對應(yīng)的Set中添加新Book對象的id。
book:id:該key保存該Book對象的全部數(shù)據(jù)。
book:在該key對應(yīng)的Set中添加新Book對象的id。
book:id:該key對應(yīng)的Hash對象保存了該Book對象的全部數(shù)據(jù)。
book:id:idx:該key對應(yīng)的Set保存了該Book對象所有額外的key。
N個book:屬性名:屬性值:該key對應(yīng)的Set保存了所有該屬性都具有相同屬性值的Book對象的id值。
小哈又來送書辣,這次是送5本《瘋狂Spring Boot終極講義》,直接在小程序抽獎助手上抽,小伙伴們在公眾號回復(fù)關(guān)鍵字【抽獎】即可獲取參與二維碼,明晚八點(diǎn)開獎,包郵到家哦,感謝大家這么長時間以來對公眾號的支持,感激感激哦~
