日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

使用Servlet 3.0,Redis / Jedis和CDI的简单CRUD –第1部分

發布時間:2023/12/3 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Servlet 3.0,Redis / Jedis和CDI的简单CRUD –第1部分 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在這篇文章中,我們將構建一個簡單的用戶界面。 數據將存儲在Redis中。 為了與Redis交互,我們將使用Jedis庫。 CDI用于Depedency Injection,而Servlet 3.0用于視圖。

讓我們從Redis / Jedis部分開始。 您可以在這些 帖子中找到有關Redis和Jedis的概述。

讓我們從User類開始,我們可以在下面看到:

public class User {private String firstName;private String lastName;private String email;private String gender;private long id; }

現在,讓我們定義用于在Redis上存儲用戶信息的鍵。 在我們的示例中,我們將使用三個鍵:

  • user:ids –將通過使用INCR命令來生成用戶ID。
  • user:all –用于存儲所有用戶ID的Redis列表
  • user:<id>:data –系統中的每個用戶都有一個帶有此模式的密鑰。 這些密鑰將是哈希。

當我們要向系統添加新用戶時,我們將處理三個鍵,如下面的步驟所示:

  • 首先,我們通過增加user:ids鍵獲得一個新的用戶ID: INCR user:ids
  • 然后我們將其添加到user:all列表: lpush user:all returnId
  • 并將用戶信息添加到其自己的哈希中: HMSET user:<returnedId>:data字段值..
  • 我們可以在方法UserDAO.addUser中看到以下代碼:

    public User addUser(User user){long userId = jedis.incr(Keys.USER_IDS.key());user.setId(userId);//Getting the PipelinePipeline pipeline = jedis.pipelined();//add to users listpipeline.lpush(Keys.USER_ALL.key(), String.valueOf(userId));//add to the hashpipeline.hmset(Keys.USER_DATA.formated(String.valueOf(userId)), BeanUtil.toMap(user));pipeline.sync();return user;}

    解釋上面的代碼,首先我們得到新的用戶ID。 jedis變量是UserDAO類的屬性,它是Jedis類的實例。 為了避免對Redis服務器的三個網絡調用,我們使用管道的概念,因此,在對Redis服務器的一次調用中,我們將在user:all列表中添加用戶ID,并在user:<id>:data中添加用戶信息。哈希。

    管道實例執行的命令將在調用pipeline.sync()之后在redis服務器中執行。 我們創建了一個util類,用于將Map <String,String>中的用戶對象轉換為存儲在redis哈希中的對象。

    為了查看用戶的詳細信息,我們在DAO中有一個方法來獲取用戶,我們可以在下面看到:

    public User getUser(long userId){String userInfoKey = Keys.USER_DATA.formated(String.valueOf(userId));Map<String, String> properties = jedis.hgetAll(userInfoKey);return BeanUtil.populate(properties, new User());}

    如我們所見,這是一個簡單的方法,基本上,我們調用命令HGETALL來從哈希中檢索所有字段。 Jedis api將其作為Map返回,因此我們可以簡單地從Map中填充用戶屬性。

    要刪除用戶,我們創建了以下方法:

    public boolean remove(long userId){String userInfoKey = Keys.USER_DATA.formated(String.valueOf(userId));Pipeline pipeline = jedis.pipelined();Response<Long> responseDel = pipeline.del(userInfoKey);Response<Long> responseLrem = pipeline.lrem(Keys.USER_ALL.key(), 0, String.valueOf(userId));pipeline.sync();return responseDel.get() > 0 && responseLrem.get() > 0;}

    一旦需要從user:all列表中刪除Hash鍵和用戶ID,下面的方法也將使用流水線的概念。 LREM命令從列表中刪除該值,零表示刪除該值在列表中的所有出現。 在此方法中,我們還通過使用每個命令返回的Response對象來使用命令返回的值。 我們只有在調用sync方法之后才能使用那些對象。

    更新方法非常簡單,我們可以在下面看到它:

    public User update(User user){String userInfoKey = Keys.USER_DATA.formated(String.valueOf(user.getId()));jedis.hmset(userInfoKey ,BeanUtil.toMap(user));return user;}

    這只是HMSET的調用,它傳遞具有所有用戶屬性的Map,該映射將在Redis哈希中進行更新。

    要列出用戶,我們還需要使用管道。 Redis不提供HMGETALL命令,因此,要檢索具有一個網絡連接的所有用戶,我們將通過管道進行操作。

    列表方法如下所示:

    public List<User> list(){List<User> users = new ArrayList<User>();//Get all user ids from the redis list using LRANGEList<String> allUserIds = jedis.lrange(Keys.USER_ALL.key(), 0, -1);if(allUserIds != null && !allUserIds.isEmpty()){List<Response<Map<String,String>>> responseList = new ArrayList<Response<Map<String,String>>>();Pipeline pipeline = jedis.pipelined();for(String userId : allUserIds){//call HGETALL for each user idresponseList.add(pipeline.hgetAll(Keys.USER_DATA.formated(userId)));}pipeline.sync();//iterate over the pipelined resultsfor(Response<Map<String, String>> properties : responseList){users.add(BeanUtil.populate(properties.get(), new User()));}}return users;}

    在這種方法中,我們首先使用命令LRANGE從列表user:all獲得所有用戶ID。 之后,我們通過管道執行“ HMGETALL”,我們為每個用戶調用HGETALL命令,然后從返回的Map實例構建用戶對象。

    在第一篇文章中,我們了解了如何使用Jedis api與Redis服務器進行交互以存儲和檢索用戶的信息。 我們看到了Pipeline的概念和用法。 在下一篇文章中,我們將展示如何使用CDI進行依賴注入和使用Servlet 3.0進行視圖。

    參考: 使用Servlet 3.0,Redis / Jedis和CDI的簡單CRUD –第1部分,來自XICO JUNIOR'S WEBLOG博客的JCG合作伙伴 Francisco Ribeiro Junior。

    翻譯自: https://www.javacodegeeks.com/2013/10/simple-crud-using-servlet-3-0-redisjedis-and-cdi-part-1.html

    創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的使用Servlet 3.0,Redis / Jedis和CDI的简单CRUD –第1部分的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。