代码实现了两种连接方式,一种是切片连接,另一种是非切片连接。但是实现的时候只采用的切片连接,非切片连接也是一样的,不一一列举。
首先实现一个序列化工具:
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。