<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
之前在SpringBoot專案中,我一直使用RedisTemplate來操作Redis中的資料,這也是Spring官方支援的方式。對比Spring Data對MongoDB和ES的支援,這種使用Template的方式確實不夠優雅!最近發現Redis官方新推出了Redis的專屬ORM框架RedisOM
,用起來夠優雅,推薦給大家!
SpringBoot實戰電商專案mall(50k+star)地址:github.com/macrozheng/…
RedisOM是Redis官方推出的ORM框架,是對Spring Data Redis的擴充套件。由於Redis目前已經支援原生JSON物件的儲存,之前使用RedisTemplate直接用字串來儲存JOSN物件的方式明顯不夠優雅。通過RedisOM我們不僅能夠以物件的形式來操作Redis中的資料,而且可以實現搜尋功能!
由於目前RedisOM僅支援JDK 11
以上版本,我們在使用前得先安裝好它。
JDK 11
,下載地址:https://www.jb51.net/softs/638448.htmlJDK 11
即可。接下來我們以管理儲存在Redis中的商品資訊為例,實現商品搜尋功能。注意安裝Redis的完全體版本RedisMod
,具體可以參考RediSearch 使用教學 。
pom.xml
中新增RedisOM相關依賴;<!--Redis OM 相關依賴--> <dependency> <groupId>com.redis.om</groupId> <artifactId>redis-om-spring</artifactId> <version>0.3.0-SNAPSHOT</version> </dependency>
<repositories> <repository> <id>snapshots-repo</id> <url>https://s01.oss.sonatype.org/content/repositories/snapshots/</url> </repository> </repositories>
application.yml
中新增Redis連線設定;spring: redis: host: 192.168.3.105 # Redis伺服器地址 database: 0 # Redis資料庫索引(預設為0) port: 6379 # Redis伺服器連線埠 password: # Redis伺服器連線密碼(預設為空) timeout: 3000ms # 連線超時時間
@EnableRedisDocumentRepositories
註解啟用RedisOM的檔案倉庫功能,並設定好檔案倉庫所在路徑;@SpringBootApplication @EnableRedisDocumentRepositories(basePackages = "com.macro.mall.tiny.*") public class MallTinyApplication { public static void main(String[] args) { SpringApplication.run(MallTinyApplication.class, args); } }
@Document
註解標識其為檔案物件,由於我們的搜尋資訊中包含中文,我們需要設定語言為chinese
;/** * 商品實體類 * Created by macro on 2021/10/12. */ @Data @EqualsAndHashCode(callSuper = false) @Document(language = "chinese") public class Product { @Id private Long id; @Indexed private String productSn; @Searchable private String name; @Searchable private String subTitle; @Indexed private String brandName; @Indexed private Integer price; @Indexed private Integer count; }
分別介紹下程式碼中幾個註解的作用;
@Id
:宣告主鍵,RedisOM將會通過全類名:ID
這樣的鍵來儲存資料;@Indexed
:宣告索引,通常用在非文字型別上;@Searchable
:宣告可以搜尋的索引,通常用在文字型別上。接下來建立一個檔案倉庫介面,繼承RedisDocumentRepository
介面;
/** * 商品管理Repository * Created by macro on 2022/3/1. */ public interface ProductRepository extends RedisDocumentRepository<Product, Long> { }
Repository
實現對Redis中資料的建立、刪除、查詢及分頁功能;/** * 使用Redis OM管理商品 * Created by macro on 2022/3/1. */ @RestController @Api(tags = "ProductController", description = "使用Redis OM管理商品") @RequestMapping("/product") public class ProductController { @Autowired private ProductRepository productRepository; @ApiOperation("匯入商品") @PostMapping("/import") public CommonResult importList() { productRepository.deleteAll(); List<Product> productList = LocalJsonUtil.getListFromJson("json/products.json", Product.class); for (Product product : productList) { productRepository.save(product); } return CommonResult.success(null); } @ApiOperation("建立商品") @PostMapping("/create") public CommonResult create(@RequestBody Product entity) { productRepository.save(entity); return CommonResult.success(null); } @ApiOperation("刪除") @PostMapping("/delete/{id}") public CommonResult delete(@PathVariable Long id) { productRepository.deleteById(id); return CommonResult.success(null); } @ApiOperation("查詢單個") @GetMapping("/detail/{id}") public CommonResult<Product> detail(@PathVariable Long id) { Optional<Product> result = productRepository.findById(id); return CommonResult.success(result.orElse(null)); } @ApiOperation("分頁查詢") @GetMapping("/page") public CommonResult<List<Product>> page(@RequestParam(defaultValue = "1") Integer pageNum, @RequestParam(defaultValue = "5") Integer pageSize) { Pageable pageable = PageRequest.of(pageNum - 1, pageSize); Page<Product> pageResult = productRepository.findAll(pageable); return CommonResult.success(pageResult.getContent()); } }
匯入商品
介面匯入資料,存取地址:http://localhost:8088/swagger-ui//** * 商品管理Repository * Created by macro on 2022/3/1. */ public interface ProductRepository extends RedisDocumentRepository<Product, Long> { /** * 根據品牌名稱查詢 */ List<Product> findByBrandName(String brandName); /** * 根據名稱或副標題搜尋 */ List<Product> findByNameOrSubTitle(String name, String subTitle); }
/** * 使用Redis OM管理商品 * Created by macro on 2022/3/1. */ @RestController @Api(tags = "ProductController", description = "使用Redis OM管理商品") @RequestMapping("/product") public class ProductController { @Autowired private ProductRepository productRepository; @ApiOperation("根據品牌查詢") @GetMapping("/getByBrandName") public CommonResult<List<Product>> getByBrandName(String brandName) { List<Product> resultList = productRepository.findByBrandName(brandName); return CommonResult.success(resultList); } @ApiOperation("根據名稱或副標題搜尋") @GetMapping("/search") public CommonResult<List<Product>> search(String keyword) { List<Product> resultList = productRepository.findByNameOrSubTitle(keyword, keyword); return CommonResult.success(resultList); } }
今天體驗了一把RedisOM,用起來確實夠優雅,和使用Spring Data來操作MongoDB和ES的方式差不多。不過目前RedisOM只發布了快照版本,期待Release版本的釋出,而且Release版本據說會支援JDK 8
的!
如果你想了解更多Redis實戰技巧的話,可以試試這個帶全套教學的實戰專案(50K+Star):github.com/macrozheng/…
參考資料
專案原始碼地址github.com/macrozheng/…
以上就是Redis官方ORM框架比RedisTemplate更優雅的詳細內容,更多關於Redis官方ORM框架的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45