闲话不多说,直接上代码
在某些场景下,有这样一个需求:只需要存储 100 条最新的记录,其他的数据保存。
import java.util.ArrayList;
import java.util.List;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Transaction;
/**
* @作者 Mitkey
* @时间 2016年3月21日 下午2:56:54
* @类说明:存储限定记录数的 list。存储最新的记录数
* @版本 xx
*/
public class SaveNewestDataSpecifyCount {
/** 若实现最大记录是 100,则应该为 99 */
private int maxCount;
public SaveNewestDataSpecifyCount(int maxCount) {
this.maxCount = maxCount;
}
public void saveData(Jedis jedis, String redisKey, String msg) {
Transaction transaction = jedis.multi();
// 向List头部追加记录
transaction.lpush(redisKey, msg);
// 仅保留指定区间内的记录数,删除区间外的记录。下标从 0 开始,即 end 需要最大值 -1
transaction.ltrim(redisKey, 0, maxCount);
transaction.exec();
}
public List<String> queryData(Jedis jedis, String redisKey) {
List<String> list = jedis.lrange(redisKey, 0, -1);// end 为 -1 表示到末尾。因为前面插入操作时,限定了存在的记录数
if (list == null || list.size() == 0) {
list = new ArrayList<String>();
}
return list;
}
}