
// 返回一个数据库查询结果集,list
List<Map>list = userService.getUserList()
//倒序把数据放进去就好了,不然取出来的数据,跟你查询出来的结果数据是相反的
for (int i = list.size() - 1i >= 0i--) {
RedisPool.getClient().lpush("userList", list.get(i).toString())
}
----------------------------下面是RedisPool类-------------
import redis.clients.jedis.Jedis
/**
* redis缓存运用
*
* @author TongJun
*
*/
public class RedisPool {
// redis 对象
private static Jedis jedis = null
private static final String IP = "127.0.0.1"
private static final int PROT = 6379
/**
* 单例模式构造redis对象
*
* @return
*/
public static synchronized Jedis getClient() {
if (jedis == null) {
jedis = new Jedis(IP, PROT)
}
return jedis
}
}
如果需要用到Redis存储List对象,而list又不需要进行 *** 作,可以按照MC的方式进行存储,不过Jedis之类的客户端没有提供API,可以有两种思路实现:1. 分别序列化 elements ,然后 set 存储
2.序列化List对象,set存储
这两种方法都类似MC的 Object方法存储,运用这种方式意味着放弃Redis对List提供的 *** 作方法。
import net.spy.memcached.compat.CloseUtil
import net.spy.memcached.compat.log.Logger
import net.spy.memcached.compat.log.LoggerFactory
import redis.clients.jedis.Client
import redis.clients.jedis.Jedis
import redis.clients.jedis.JedisPool
import redis.clients.jedis.JedisPoolConfig
import java.io.*
import java.util.ArrayList
import java.util.List
import java.util.Random
/**
* Created by IntelliJ IDEA.
* User: lifeng.xu
* Date: 12-6-11
* Time: 上午11:10
* To change this template use File | Settings | File Templates.
*/
public class JedisTest {
private static Logger logger = LoggerFactory.getLogger(JedisTest.class)
/**
* Jedis Pool for Jedis Resource
* @return
*/
public static JedisPool buildJedisPool(){
JedisPoolConfig config = new JedisPoolConfig()
config.setMaxActive(1)
config.setMinIdle(50)
config.setMaxIdle(3000)
config.setMaxWait(5000)
JedisPool jedisPool = new JedisPool(config,
"*****", ****)
return jedisPool
}
/**
* Test Data
* @return
*/
public static List<User>buildTestData(){
User a = new User()
a.setName("a")
User b = new User()
b.setName("b")
List<User>list = new ArrayList<User>()
list.add(a)
list.add(b)
return list
}
/**
* Test for
*/
public static void testSetElements(){
List<User>testData = buildTestData()
Jedis jedis = buildJedisPool().getResource()
String key = "testSetElements" + new Random(1000).nextInt()
jedis.set(key.getBytes(), ObjectsTranscoder.serialize(testData))
//验证
byte[] in = jedis.get(key.getBytes())
List<User>list = ObjectsTranscoder.deserialize(in)
for(User user : list){
System.out.println("testSetElements user name is:" + user.getName())
}
}
public static void testSetEnsemble(){
List<User>testData = buildTestData()
Jedis jedis = buildJedisPool().getResource()
String key = "testSetEnsemble" + new Random(1000).nextInt()
jedis.set(key.getBytes(), ListTranscoder.serialize(testData))
//验证
byte[] in = jedis.get(key.getBytes())
List<User>list = (List<User>)ListTranscoder.deserialize(in)
for(User user : list){
System.out.println("testSetEnsemble user name is:" + user.getName())
}
}
public static void main(String[] args) {
testSetElements()
testSetEnsemble()
}
public static void close(Closeable closeable) {
if (closeable != null) {
try {
closeable.close()
} catch (Exception e) {
logger.info("Unable to close %s", closeable, e)
}
}
}
static class User implements Serializable{
String name
public String getName() {
return name
}
public void setName(String name) {
this.name = name
}
}
static class ObjectsTranscoder{
public static byte[] serialize(List<User>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)
for(User user : value){
os.writeObject(user)
}
os.writeObject(null)
os.close()
bos.close()
rv = bos.toByteArray()
} catch (IOException e) {
throw new IllegalArgumentException("Non-serializable object", e)
} finally {
close(os)
close(bos)
}
return rv
}
public static List<User>deserialize(byte[] in) {
List<User>list = new ArrayList<User>()
ByteArrayInputStream bis = null
ObjectInputStream is = null
try {
if(in != null) {
bis=new ByteArrayInputStream(in)
is=new ObjectInputStream(bis)
while (true) {
User user = (User) is.readObject()
if(user == null){
break
}else{
list.add(user)
}
}
is.close()
bis.close()
}
} catch (IOException e) {
logger.warn("Caught IOException decoding %d bytes of data",
in == null ? 0 : in.length, e)
} catch (ClassNotFoundException e) {
logger.warn("Caught CNFE decoding %d bytes of data",
in == null ? 0 : in.length, e)
} finally {
CloseUtil.close(is)
CloseUtil.close(bis)
}
return list
}
}
static class ListTranscoder{
public static 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 {
close(os)
close(bos)
}
return rv
}
public static Object deserialize(byte[] in) {
Object rv=null
ByteArrayInputStream bis = null
ObjectInputStream is = null
try {
if(in != null) {
bis=new ByteArrayInputStream(in)
is=new ObjectInputStream(bis)
rv=is.readObject()
is.close()
bis.close()
}
} catch (IOException e) {
logger.warn("Caught IOException decoding %d bytes of data",
in == null ? 0 : in.length, e)
} catch (ClassNotFoundException e) {
logger.warn("Caught CNFE decoding %d bytes of data",
in == null ? 0 : in.length, e)
} finally {
CloseUtil.close(is)
CloseUtil.close(bis)
}
return rv
}
}
}
自定义pojo 实现Serializable 接口:package cn.mingyuan.redis
import java.io.Serializable
/**
* 测试用pojo,实现了Serializable,以便进行系列化 *** 作
*
* @author mingyuan
*
*/
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)