java使用redis缓存(String,bean,list,map)

来源:互联网 发布:淘宝推荐系统 编辑:程序博客网 时间:2024/05/01 10:28

 

代码实现了两种连接方式,一种是切片连接,另一种是非切片连接。但是实现的时候只采用的切片连接,非切片连接也是一样的,不一一列举。

首先实现一个序列化工具:

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。

0 0
原创粉丝点击