SpringBoot 2.X使用Redis(Lettuce)对list(ListOperations)的操作

 ListOperations主要对redis 的list(链表)操作,下面我主要是讲一个具体的例子,将一个list集合如何多个值批量存储到缓存:

我们先看ListOperations的 leftPushAll这个方法的源码:它是用的 “V... values”;说明它是支持1-N个参数

    /**
	 * Prepend {@code values} to {@code key}.
	 *
	 * @param key must not be {@literal null}.
	 * @param values
	 * @return {@literal null} when used in pipeline / transaction.
	 * @see <a href="http://redis.io/commands/lpush">Redis Documentation: LPUSH</a>
	 */
	@Nullable
	Long leftPushAll(K key, V... values);

再看实现类:它用的是数组,那么我们传入数据就有两种方式了吧。

    /*
	 * (non-Javadoc)
	 * @see org.springframework.data.redis.core.ListOperations#leftPushAll(java.lang.Object, java.lang.Object[])
	 */
	@Override
	public Long leftPushAll(K key, V... values) {

		byte[] rawKey = rawKey(key);
		byte[][] rawValues = rawValues(values);
		return execute(connection -> connection.lPush(rawKey, rawValues), true);
	}

 我们就可以用以下两种方式:

leftPushAll("users",new strings[]);
leftPushAll("users1",JsonUtil.toJson(user),JsonUtil.toJson(user1),JsonUtil.toJson(user2));

 现在我们就来实现这个操作:1.我们先将list集合转化为数组,有人肯定会想到用asList这个方法,这里会出现一个错误,这是因为你list是一个集合,里面是存储的一个对象。所有asList这个方法是不行了,我们只能将对象转化为一个字符串。如下:

@Test
	public void leftPushAll() {
		List<User> list = new ArrayList<User>();

		User user = new User();
		user.setId("1");
		user.setAge(11);
		user.setName("张三1");
		
		User user1 = new User();
		user1.setId("2");
		user1.setAge(12);
		user1.setName("张三2");
		
		User user2 = new User();
		user2.setId("3");
		user2.setAge(13);
		user2.setName("张三3");
		
		list.add(user);
		list.add(user1);
		list.add(user2);
		String[] strings =new String[list.size()]; 
		for (int i = 0; i < list.size(); i++) {
			strings[i]=list.get(i).toString();
		}
		System.out.println(JsonUtil.toJson(strings));
		ListOperations<String, String> operations =  this.template.opsForList();
			operations.leftPushAll("users",strings);
			operations.leftPushAll("users1", JsonUtil.toJson(user),JsonUtil.toJson(user1),JsonUtil.toJson(user2));
			System.out.println(operations.size("users"));
	}

运行的结果:

/**  
	* @Title: range  
	* @Description: TODO(获取指定key的范围内的value值的 list列表。 (0  -1)返回所有值列表 )  
	* @param @param key
	* @param @param start
	* @param @param end
	* @param @return    参数  
	* @return List<String>    返回类型  
	* @throws  
	*/ 
	List<String> range(final String key, Long start, Long end);
	
	/**  
	* @Title: trim  
	* @Description: TODO(保留key指定范围内的列表值。其它的都删除。)  
	* @param @param key
	* @param @param start
	* @param @param end    
	* @return void    返回类型  
	* @throws  
	*/ 
	void trim(final String key, Long start, Long end);
	
	/**  
	* @Title: size  
	* @Description: TODO(获取key 列表的长度)  
	* @param @param key
	* @param @return    参数  
	* @return Long    返回类型  
	* @throws  
	*/ 
	Long size(final String key);
	
	/**  	
	* @Title: leftPush  
	* @Description: TODO(写入缓存,是左面进入 先进后出)  
	* @param @param key
	* @param @param value
	* @param @return    参数  
	* @return Long    返回类型  
	* @throws  
	*/ 
	public Long leftPush(final String key, String value);
	
	/**  
	* @Title: leftPushAll  
	* @Description: TODO(多个值写入缓存,是左面进入 先进后出)  
	* @param @param key
	* @param @param values
	* @param @return    参数  
	* @return Long    返回类型  
	* @throws  
	*/ 
	public Long leftPushAll(final String key, String... values);
	
	/**  
	* @Title: leftPushIfPresent  
	* @Description: TODO(如果列表存在,则在列表左边插入值value)  
	* @param @param key
	* @param @param value
	* @param @return    参数  
	* @return Long    返回类型  
	* @throws  
	*/ 
	Long leftPushIfPresent(final String key, String value);
	
	/**  
	* @Title: leftPush  
	* @Description: TODO(在key的列表中指定的value左边(前面)插入一个新的value.如果 指定的value不存在则不插入任何值。)  
	* @param @param key
	* @param @param pivot
	* @param @param value
	* @param @return    参数  
	* @return Long    返回类型  
	* @throws  
	*/ 
	Long leftPush(final String key, String pivot, String value);
	
	/**  
	* @Title: rightPush  
	* @Description: TODO(写入缓存,是右边面进入 先进先出)  
	* @param @param key
	* @param @param value
	* @param @return    参数  
	* @return Long    返回类型  
	* @throws  
	*/ 
	Long rightPush(final String key, String value);
	
	/**  
	* @Title: rightPushAll  
	* @Description: TODO(多个值写入缓存,是右边面进入 先进先出)  
	* @param @param key
	* @param @param values
	* @param @return    参数  
	* @return Long    返回类型  
	* @throws  
	*/ 
	Long rightPushAll(final String key, String... values);
	
	/**  
	* @Title: rightPushIfPresent  
	* @Description: TODO(如果列表存在,则在列表右边插入值value)  
	* @param @param key
	* @param @param value
	* @param @return    参数  
	* @return Long    返回类型  
	* @throws  
	*/ 
	Long rightPushIfPresent(final String key, String value);
	
	/**  
	* @Title: rightPush  
	* @Description: TODO(在key的列表中指定的value右边(前面)插入一个新的value.如果 指定的value不存在则不插入任何值。)  
	* @param @param key
	* @param @param pivot
	* @param @param value
	* @param @return    参数  
	* @return Long    返回类型  
	* @throws  
	*/ 
	Long rightPush(final String key, String pivot, String value);
	
	/**  
	* @Title: set  
	* @Description: TODO(设置key列表中指定位置的值为value index不能大于列表长度。大于抛出异常,为负数则从右边开始计算)  
	* @param @param key
	* @param @param index
	* @param @param value    参数  
	* @return void    返回类型  
	* @throws  
	*/ 
	void set(final String key, Long index, String value);
	
	/**  
	* @Title: remove  
	* @Description: TODO(删除列表中第一个遇到的value值。count指定删除多少个,count为0则全部删除)  
	* @param @param key
	* @param @param count (大于0从左边开始,等于0全部删除,小于0从右边开始)
	* @param @param value
	* @param @return    参数  
	* @return Long    返回类型  
	* @throws  
	*/ 
	Long remove(final String key, Long count, Object value);
	
	/**  
	* @Title: index  
	* @Description: TODO(通过索引获取列表中的元素)  
	* @param @param key
	* @param @param index  (大于0从左边开始,小于0从右边开始)
	* @param @return    参数  
	* @return String    返回类型  
	* @throws  
	*/ 
	String index(final String key, Long index);
	
	/**  
	* @Title: leftPop  
	* @Description: TODO(移除列表中的第一个值,并返回该值)  
	* @param @param key
	* @param @return    参数  
	* @return String    返回类型  
	* @throws  
	*/ 
	String leftPop(final String key);
	
	/**  
	* @Title: leftPop  
	* @Description: TODO(移除列表中的第一个值,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。)  
	* @param @param key
	* @param @param timeout
	* @param @param unit
	* @param @return    参数  
	* @return String    返回类型  
	* @throws  
	*/ 
	String leftPop(final String key, Long timeout, TimeUnit unit);
	
	/**  
	* @Title: rightPop  
	* @Description: TODO(移除列表中的最后一个值,并返回该值)  
	* @param @param key
	* @param @return    参数  
	* @return String    返回类型  
	* @throws  
	*/ 
	String rightPop(final String key);
	
	/**  
	* @Title: rightPop  
	* @Description: TODO(移除列表中的最后一个值,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。)  
	* @param @param key
	* @param @param timeout
	* @param @param unit
	* @param @return    参数  
	* @return String    返回类型  
	* @throws  
	*/ 
	String rightPop(final String key, Long timeout, TimeUnit unit);
	
	/**  
	* @Title: rightPopAndLeftPush  
	* @Description: TODO(从指定列表中从右边(尾部)移除第一个值,并将这个值从左边(头部)插入目标列表)  
	* @param @param sourceKey
	* @param @param destinationKey
	* @param @return    参数  
	* @return String    返回类型  
	* @throws  
	*/ 
	String rightPopAndLeftPush(final String sourceKey,final String destinationKey);
	
	/**  
	* @Title: rightPopAndLeftPush  
	* @Description: TODO(从指定列表中从右边(尾部)移除第一个值,并将这个值从左边(头部)插入目标列表,如果移除的列表中没有值,则一直阻塞指定的单位时间)  
	* @param @param sourceKey
	* @param @param destinationKey
	* @param @param timeout
	* @param @param unit
	* @param @return    参数  
	* @return String    返回类型  
	* @throws  
	*/ 
	String rightPopAndLeftPush(final String sourceKey, final String destinationKey, Long timeout, TimeUnit unit);

gitHub项目DEMO地址:https://github.com/LX1309244704/SpringBoot-master/tree/master/springboot-redis

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值