67,512
社区成员
发帖
与我相关
我的任务
分享
//将一个list集合元素push到redis
public long setCollection(byte[] key, Collection<?> value) {
Object result = redisTemplate.execute((conn) -> {
long size = 0;
for (Object val : value) {
// 迭代list的每一个元素, push到key对应的list
size = conn.rPush(key, SerializeUtil.serialize(val));
}
return size;
} , false);
return (long) result;
}
//从redis获取list集合的某一部分数据
public <T> List<T> getList(byte[] key, int page, int size) {
Object result = redisTemplate.execute((conn) -> {
// 先查询list里面的总长度
Long len = conn.lLen(key);
// 得到偏移量
int offeset = getOffeset(page, size);
// 如果偏移量已经大于总长度, 则直接返回null
if (offeset > len) {
return null;
}
// 得到集合里面对应位置的数据
List<byte[]> list = conn.lRange(key, offeset, size);
List<T> listOs = Lists.newArrayList();
// 将byte数组返序列化成对象
for (byte[] bs : list) {
listOs.add((T) SerializeUtil.unserialize(bs));
}
return listOs;
} , false);
return result == null ? Lists.newArrayList() : (List<T>) result;
}
/**
* 获取偏移量
**/
private int getOffeset(int page, int size) {
return page == 0 ? 0 : page * size;
}