1. 程式人生 > >java使用redis快取(String,bean,list,map)

java使用redis快取(String,bean,list,map)

程式碼實現了兩種連線方式,一種是切片連線,另一種是非切片連線。但是實現的時候只採用的切片連線,非切片連線也是一樣的,不一一列舉。

首先實現一個序列化工具:

package com.test.utils;

import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

/**

 * 序列化工具類

 *@author Shuyu.Wang

 *

 */

public class SerializeUtil {

         publicstatic byte[] serialize(Object value) {

                   if(value == null) {   

           throw new NullPointerException("Can't serialize null");   

       }   

        byte[] rv=null;   

       ByteArrayOutputStream bos = null;   

       ObjectOutputStream os = null;   

       try {   

           bos = new ByteArrayOutputStream();   

           os = new ObjectOutputStream(bos);   

           os.writeObject(value);   

           os.close();   

           bos.close();   

           rv = bos.toByteArray();   

       } catch (IOException e) {   

           throw new IllegalArgumentException("Non-serializable object",e);   

       } finally {    

           try { 

                 if(os!=null)os.close(); 

                 if(bos!=null)bos.close(); 

           }catch (Exception e2) { 

            e2.printStackTrace(); 

           }   

       }   

       return rv;   

         }

         publicstatic Object unserialize(byte[] bytes) {

                   Objectrv=null;   

       ByteArrayInputStream bis = null;   

       ObjectInputStream is = null;   

       try {   

           if(bytes != null) {   

                bis=newByteArrayInputStream(bytes);    

                is=newObjectInputStream(bis);   

                rv=is.readObject();   

                is.close();   

                bis.close();   

           }   

       } catch (Exception e) {   

           e.printStackTrace(); 

        }finally {   

            try { 

                 if(is!=null)is.close(); 

                 if(bis!=null)bis.close(); 

            } catch (Exception e2) { 

                 e2.printStackTrace(); 

            } 

        } 

       return rv;    

         }

}

然後實現redis連線和具體的操作

package com.test.utils;

import java.util.ArrayList;

import java.util.List;

import java.util.Map;

import redis.clients.jedis.Jedis;

import redis.clients.jedis.JedisPool;

import redis.clients.jedis.JedisPoolConfig;

import redis.clients.jedis.JedisShardInfo;

import redis.clients.jedis.ShardedJedis;

importredis.clients.jedis.ShardedJedisPool;

/**

 *redis cache 工具類

 *

 */

public class RedisUtil {

         publicfinal static String VIRTUAL_COURSE_PREX = "_lc_vc_";

         /**

          * 非切片連結池

          */

         privateJedisPool jedisPool;

         /**

          * 切片連結池

          */

         privateShardedJedisPool shardedJedisPool;

         privateString ip = "127.0.0.1";

         /**

          * 建構函式

          */

         publicRedisUtil() {

                   //initialPool();

                   //initialShardedPool();

                   //shardedJedis = shardedJedisPool.getResource();

                   //jedis = jedisPool.getResource();

         }

         /**

          * 非切片連線池初始化

          */

         privatevoid initialPool() {

                   //池基本配置

                   JedisPoolConfigconfig = new JedisPoolConfig();

                   config.setMaxTotal(100);

                   config.setMaxIdle(5);

                   config.setMaxWaitMillis(1000);

                   config.setTestOnBorrow(true);

                   jedisPool= new JedisPool(config, ip, 6379);

         }

         /**

          * 初始化切片池

          */

         privatevoid initialShardedPool() {

                   //池基本配置

                   JedisPoolConfigconfig = new JedisPoolConfig();

                   config.setMaxTotal(100);

                   config.setMaxIdle(5);

                   config.setMaxWaitMillis(1000);

                   config.setTestOnBorrow(true);

                   //slave連結

                   List<JedisShardInfo>shards = new ArrayList<JedisShardInfo>();

                   shards.add(newJedisShardInfo(ip, 6379));

                   //shards.add(new JedisShardInfo(ip, 6379));

                   //構造池

                   shardedJedisPool= new ShardedJedisPool(config, shards);

         }

         /**

          * 在多執行緒環境同步初始化

          */

         privatesynchronized void poolInit() {

                   if(jedisPool == null) {

                            initialPool();

                   }

         }

         /**

          * 在多執行緒環境同步初始化

          */

         privatesynchronized void shardedPoollInit() {

                   if(shardedJedisPool == null) {

                            initialShardedPool();

                   }

         }

         /**

          * 非切片客戶端連結 同步獲取非切片Jedis例項

          *

          * @return Jedis

          */

         publicsynchronized Jedis getJedis() {

                   if(jedisPool == null) {

                            poolInit();

                   }

                   Jedisjedis = null;

                   try{

                            if(jedisPool != null) {

                                     jedis= jedisPool.getResource();

                                     //jedis.auth(redisCacheConfig.getAuth());

                            }

                   }catch (Exception e) {

                            e.printStackTrace();

                   }finally {

                            returnResource(jedis);

                   }

                   returnjedis;

         }

         /**

          * 切片客戶端連結 同步獲取切片ShardedJedis例項

          *

          * @return Jedis

          */

         publicsynchronized ShardedJedis getShardedJedis() {

                   if(shardedJedisPool == null) {

                            shardedPoollInit();

                   }

                   ShardedJedisshardedJedis = null;

                   try{

                            if(shardedJedisPool != null) {

                                     shardedJedis= shardedJedisPool.getResource();

                                     //shardedJedis.auth(redisCacheConfig.getAuth());

                            }

                   }catch (Exception e) {

                            e.printStackTrace();

                   }finally {

                            returnResource(shardedJedis);

                   }

                   returnshardedJedis;

         }

         /**

          * 釋放jedis資源

          *

          * @param jedis

          */

         @SuppressWarnings("deprecation")

         publicvoid returnResource(final Jedis jedis) {

                   if(jedis != null && jedisPool != null) {

                            jedisPool.returnResource(jedis);

                   }

         }

         /**

          * 釋放ShardedJedis資源

          *

          * @param jedis

          */

         @SuppressWarnings("deprecation")

         publicvoid returnResource(final ShardedJedis shardedJedis) {

                   if(shardedJedis != null && shardedJedisPool != null) {

                            shardedJedisPool.returnResource(shardedJedis);

                   }

         }

         /**

          * 得到Key

          *

          * @param key

          * @return

          */

         publicString buildKey(String key) {

                   returnVIRTUAL_COURSE_PREX + key;

         }

         /**

          * 設定 String

          *

          * @param key

          * @param value

          */

         //public void setString(String key ,String value){

         //try {

         //value = StringUtil.isNullOrEmpty(value) ? "" : value;

         //getJedis().set(buildKey(key),value);

         //} catch (Exception e) {

         //

         //}

         //}

         /**

          * 設定 過期時間

          *

          * @param key

          * @param seconds

          *           以秒為單位

          * @param value

          */

         //public void setString(String key ,int seconds,String value){

         //try {

         //value = StringUtil.isNullOrEmpty(value) ? "" : value;

         //getJedis().setex(buildKey(key), seconds, value);

         //} catch (Exception e) {

         //

         //}

         //}

         publicboolean exist(String key) {

                   StringbKey = buildKey(key);

                   if(getJedis() == null || !getJedis().exists(bKey)) {

                            returnfalse;

                   }

                   returntrue;

         }

         /**

          * 向快取中設定物件

          *

          * @param key

          * @param bean

          */

         public<T> void setString(String key, String param) {

                   StringbKey = buildKey(key);

                   try{

                            getJedis().set(bKey.getBytes(),SerializeUtil.serialize(param));

                   }catch (Exception e) {

                   }

         }

         /**

          * 獲取String值

          *

          * @param key

          * @return value

          */

         publicString getString(String key) {

                   StringbKey = buildKey(key);

                   if(getJedis() == null || !getJedis().exists(bKey)) {

                            returnnull;

                   }

                   returngetJedis().get(bKey);

         }

         /**

          * 向快取中設定物件

          *

          * @param key

          * @param bean

          */

         public<T> void setBean(String key, Object bean) {

                   StringbKey = buildKey(key);

                   try{

                            getJedis().set(bKey.getBytes(),SerializeUtil.serialize(bean));

                   }catch (Exception e) {

                   }

         }

         /**

          * 根據key 獲取物件

          *

          * @param key

          * @return

          */

         @SuppressWarnings("unchecked")

         public<T> T getBean(String key) {

                   StringbKey = buildKey(key);

                   if(getJedis() == null || !getJedis().exists(bKey.getBytes())) {

                            returnnull;

                   }

                   byte[]in = getJedis().get(bKey.getBytes());

                   Tbean = (T) SerializeUtil.unserialize(in);

                   returnbean;

         }

         /**

          * 設定 list

          *

          * @param <T>

          * @param key

          * @param value

          */

         public<T> void setList(String key, List<T> list) {

                   StringbKey = buildKey(key);

                   try{

                            getJedis().set(bKey.getBytes(),SerializeUtil.serialize(list));

                   }catch (Exception e) {

                   }

         }

         /**

          * 獲取list

          *

          * @param <T>

          * @param key

          * @return list

          */

         @SuppressWarnings("unchecked")

         public<T> List<T> getList(String key) {

                   StringbKey = buildKey(key);

                   if(getJedis() == null || !getJedis().exists(bKey.getBytes())) {

                            returnnull;

                   }

                   byte[]in = getJedis().get(bKey.getBytes());

                   List<T>list = (List<T>) SerializeUtil.unserialize(in);

                   returnlist;

         }

         /**

          * 設定 map

          *

          * @param <T>

          * @param key

          * @param value

          */

         public<T> void setMap(String key, Map<String, T> map) {

                   StringbKey = buildKey(key);

                   try{

                            getJedis().set(bKey.getBytes(),SerializeUtil.serialize(map));

                   }catch (Exception e) {

                   }

         }

         /**

          * 獲取list

          *

          * @param <T>

          * @param key

          * @return list

          */

         @SuppressWarnings("unchecked")

         public<T> Map<String, T> getMap(String key) {

                   StringbKey = buildKey(key);

                   if(getJedis() == null || !getJedis().exists(bKey.getBytes())) {

                            returnnull;

                   }

                   byte[]in = getJedis().get(bKey.getBytes());

                   Map<String,T> map = (Map<String, T>) SerializeUtil.unserialize(in);

                   returnmap;

         }

}

再新建一個測試類,自己寫幾個測試方法,下面貼出的是網頁的測試方式,可以根據自己的需要進行修改,

首先是存入:

         /**

          * 儲存資料

          * @param request

          * @param response

          * @return

          */

public ModelAndViewtest2(HttpServletRequest request, HttpServletResponse response) {

                   Useruser = new User();

                   user.setUserName(request.getParameter("userName"));

                   user.setPassWord(request.getParameter("passWord"));

                   System.out.println(user.getUserName());

                   System.out.println(user.getPassWord());

//               if(jedis.exists(user.getUserName().getBytes())){

//                         System.out.println("===========資料已經存在");

//               }else{

//                          序列化儲存

//                         jedis.set(user.getUserName().getBytes(),SerializeUtil.serialize(user));

//                         System.out.println("============新增完成");

                      //儲存字串

                   //list快取測試

                   Useruser2=new User();

                   user2.setUserName("T1");

                   user2.setPassWord("T1234");

                   Useruser3=new User();

                   user3.setUserName("T2");

                   user3.setPassWord("T2234");

                   Useruser4=new User();

                   user4.setUserName("T3");

                   user4.setPassWord("T3234");

                   RedisUtilredisUtil=new RedisUtil();

                   List<User>list=new ArrayList<User>();

                   list.add(user2);

                   list.add(user3);

                   list.add(user4);

                   redisUtil.setList(user.getUserName(),list);

//                   jedis.set(user.getUserName(),user.getPassWord());

//               }                                   

                   //物件快取測試

                   redisUtil.setBean("ac",user2);

                   ModelAndViewmav = new ModelAndView();

                   mav.addObject("message","Hello World!");

                   returnmav;

         }

下面的查詢:

/**

          * 根據key查詢

          * @param request

          * @param response

          * @return

          */

         @RequestMapping(value= "/f", method = { RequestMethod.POST, RequestMethod.GET })

         publicModelAndView test(HttpServletRequest request, HttpServletResponse response) {

                   Useruser = new User();

                   user.setUserName(request.getParameter("userName"));

                   byte[]person = null;

                   //反序列化查詢

         /*     if(jedis.exists((user.getUserName()).getBytes())) {                          

                            person= jedis.get((user.getUserName()).getBytes());

//                         List<User>list = (List<User> ) SerializeUtil.unserialize(person);

//                         System.out.println("============獲取結果");

//                         for(Userusers:list){

//                                  System.out.println(users.getUserName()+"  "+users.getPassWord());

//                         }

                            Userusers = (User)SerializeUtil.unserialize(person);

                            System.out.println(users.getUserName()+"  "+users.getPassWord());

                   }else {

                            System.out.println("============結果不存在");

                   }*/

                   //獲取list測試

                   RedisUtilredisUtil=new RedisUtil();

                   List<User>list=redisUtil.getList(user.getUserName());

                   for(User user2 : list) {

                            System.out.println(user2.getUserName()+"============"+user2.getPassWord());

                   }

                   //獲取物件測試

                   Useru=redisUtil.getBean("ac");

                   System.out.println(u.getUserName()+"============"+u.getPassWord());

         /*     if (jedis.exists(user.getUserName())) {                      

                            String  users = jedis.get(user.getUserName());

//                         List<User>list = (List<User> ) SerializeUtil.unserialize(person);

//                         System.out.println("============獲取結果");

//                         for(Userusers:list){

//                                  System.out.println(users.getUserName()+"  "+users.getPassWord());

//                         }

//                         Userusers = (User)SerializeUtil.unserialize(person);

                            System.out.println(users);

                   }else {

                            System.out.println("============結果不存在");

                   }*/

                   ModelAndViewmav = new ModelAndView();

                   mav.addObject("message","Hello World!");

                   returnmav;

         }

刪除快取

/**

          * 刪除快取

          * @param request

          * @param response

          * @return

          */

         @RequestMapping(value= "/d", method = { RequestMethod.POST, RequestMethod.GET })

         publicModelAndView test3(HttpServletRequest request, HttpServletResponse response) {

                   Useruser = new User();

                   user.setUserName(request.getParameter("userName"));

                   System.out.println(user.getUserName());

                   if(jedis.exists(user.getUserName().getBytes())){

                            jedis.del(user.getUserName());

                            System.out.println("===========資料已經刪除");

                   }else{

                            System.out.println("============資料不存在");

                   }                                   

                   ModelAndViewmav = new ModelAndView();

                   mav.addObject("message","Hello World!");

                   returnmav;

         }

以上是全部程式碼,測試的時候記得要先開啟本機的redis。

相關推薦

java使用redis快取String,bean,list,map

程式碼實現了兩種連線方式,一種是切片連線,另一種是非切片連線。但是實現的時候只採用的切片連線,非切片連線也是一樣的,不一一列舉。 首先實現一個序列化工具: package com.test.utils; import java.io.ByteArrayInputStr

json與Object/List/Map的相互轉化

json object list mep 在做web應用時,經常需要將json轉化成Object/list/map或者將Object/List/map轉化成json,通過簡單封裝可以在寫代碼是減輕很多負擔。本文將給出json轉化的一系列方法。 閑話不 多說,直接上代碼:先是Object /Li

利用遞迴遍歷獲取Java複雜物件物件的屬性仍是物件//list/map中指定屬性的值

本示例中又三個物件巢狀: UserBO:複雜物件,其中一個屬性是List<AddressBO>或者Map<AddressBO> AddressBO:其中一個屬性是SubAddressBO SubAddressBO:包含目標屬性addrId,且是string型別,查

jsp 頁面中用struts2 標籤遍歷集合list map

1,list: public class ListTestAction extends ActionSupport { private List<String> list1; private List<User> list2;

題目1018:統計同成績學生人數數組或者map

result ble tdi core %d github col targe map 題目鏈接:http://ac.jobdu.com/problem.php?pid=1018 詳解鏈接:https://github.com/zpfbuaa/JobduInCPlusPl

Leetcode341. 扁平化巢狀列表迭代器Flatten Nested List Iterator

題目描述 給定一個巢狀的整型列表。設計一個迭代器,使其能夠遍歷這個整型列表中的所有整數。 列表中的項或者為一個整數,或者是另一個列表。 示例 1: 輸入: [[1,1],2,[1,1]] 輸出: [1,1,2,1,1] 解釋: 通過重複呼叫 next 直到 hasNext

字串的不可變性String的不可變性Integer的常量池

JVM的記憶體分配圖: PC暫存器:會記錄各個執行緒的執行位置 Java方法棧:面向java方法 本地方法棧:面向本地方法(用C++ 寫的native方法) 方法區:載入後的Java類會被存放在java方法區,程式碼實際執行的時候,虛擬機器會執行方法區內的程式碼。 &n

C#LeetCode刷題之#203-刪除連結串列中的節點Remove Linked List Elements

問題 刪除連結串列中等於給定值 val 的所有節點。 輸入: 1->2->6->3->4->5->6, val = 6 輸出: 1->2->3-&

hdu 3172 Virtual Friends並查集+map

These days, you can do all sorts of things online. For example, you can use various websites to make virtual friends. For some people, growing their so

字串轉整數String to Integer (atoi)

public class StringtoInteger { public int myAtoi(String str) { if (str == null) return 0; str = str.trim(); if (str

如何實現訪問apache時的目錄瀏覽功能apache file list view

    我用apache做了一個檔案分享功能的站點(如下圖),可以實現了http模式的檔案檢視和下載。有的朋友看到了奇怪問這是怎麼做到的,這其實只是一些appche伺服器的基本功能,搞前端的coder也要了解一下伺服器才好;下面來說具體的操作: 很簡單

Android 四大大圖片快取Imageloader,Picasso,Glide,Fresco原理、特性對比

四大圖片快取基本資訊 Universal ImageLoader 是很早開源的圖片快取,在早期被很多應用使用。 Picasso 是 Square 開源的專案,且他的主導者是 JakeWharton,所以廣為人知。 Glide 是 Google 員工的開源專案,被一些

c++字串的轉化 string,char* tchar*

1.將string轉化為char* string s("你好"); char *nihao=s.data(); char *nihao=s.c_str(); 2.將string轉化為TCHAR[] string res("你好"); TCHAR wc[MAX_PATH];

基於java的Spring容器配置@Configuration,@Bean,@Import,@ImportSource

@Bean的使用  @Bean是一個方法級別的註解類似於XML的元素,這個註解提供了一些的屬性例如 init-method, destroy-method, autowiring 和name  應用場合:@Configuration註解或者@Componen

【原創】詳細案例解剖——淺談Redis快取的常用5中方式String,Hash,List,set,SetSorted

很多小夥伴沒接觸過Redis,以至於去學習的時候感覺雲裡霧裡的,就有一種:教程隨你出,懂了算我輸的感覺。 每次聽圈內人在談論的時候總是插不上話,小編就偷偷去了解了一下,也算是初入門徑。 然後就整理了一下,很簡單的一個demo(小編用的是C#語法進行demo編寫),我們一起來解剖一下。 總共分為兩步:

拼接Josn 串listmap

div set turn json cep buffer sub substr except /** * * @param list * @return _Json(單層); * @throws Exception */ public static

python資料型別string/list/tuple/dict內建方法

Python 字串常用方法總結 明確:對字串的操作方法都不會改變原來字串的值 1,去掉空格和特殊符號 name.strip()  去掉空格和換行符 name.strip('xx')  去掉某個字串 name.lstrip()  去掉左邊的空格和換行符

C++常用的容器vector、set、listmap

C++ STL中最基本以及最常用的類或容器無非就是以下幾個: string vector set list map 下面就依次介紹它們,並給出一些最常見的最實用的使用方法,做到快速入門。 string 首先看看我們C語言一般怎麼使用字串的 c

【小家java】Java之Apache Commons-Collections4使用精講含有Bag、MapList、Set全覆蓋

相關閱讀 【小家java】java5新特性(簡述十大新特性) 重要一躍 【小家java】java6新特性(簡述十大新特性) 雞肋升級 【小家java】java7新特性(簡述八大新特性) 不溫不火 【小家java】java8新特性(簡述十大新特性) 飽受讚譽 【小家java】java9

Collection.max min最大最小值 集合list set map

//list 用來待儲存檔案表中檔案id List<Integer> list=new ArrayList<>(); //file