java代码中 单表查询出的list集合 怎么读写到redis中

java代码中 单表查询出的list集合 怎么读写到redis中,第1张

查询出来的结果集是返回一个List,然后你倒序添加数据到redis里面就可以了。

// 返回一个数据库查询结果集,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

*

*/


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11520878.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-16
下一篇2023-05-16

发表评论

登录后才能评论

评论列表(0条)

    保存