博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java-redis集合数据操作示例(三)
阅读量:5214 次
发布时间:2019-06-14

本文共 4576 字,大约阅读时间需要 15 分钟。

 redis系列博文,redis连接管理类的代码请跳转查看《》。

一、集合类型缓存测试类

public class SetTest {    /**     * 主测试方案     */    @Test    public void test() {        RedisUtil.instance.run(conn -> oper(conn));        Assert.assertTrue(true);    }    /**     * 测试用的key     */    private final String _key = "simm-set";    /**     * 字符串操作     *      * @param conn     */    private void oper(ShardedJedis conn) {        System.out.println(MessageFormat.format("key[{0}]存在:{1} ", _key,conn.exists(_key)));        // 集合数据初始化        String[] arr= "AA,AB,AC,AD,AE,AF,AG,BA,BB,BC,BD,BE,BF,BG".split(",");        conn.sadd(_key, arr);        print(conn);        //1.查询元素        //指定个数 count 在redis服务中默认值为10         ScanResult
result = conn.sscan(_key, "0",new ScanParams().match("*").count(2)); String cursor = result.getStringCursor(); System.out.println(MessageFormat.format("游标位置:{0}", cursor)); print(result.getResult()); //匹配内容 result = conn.sscan(_key, "0",new ScanParams().match("A*")); print(result.getResult()); result = conn.sscan(_key, "0",new ScanParams().match("A*").count(100)); print(result.getResult()); //2.集合元素删除方法 //2.1.移除 Long effected = conn.srem(_key, "AE","BG","HI");//移除CGH。 System.out.println(MessageFormat.format("成功移除{0}个元素", effected)); print(conn); //2.2.从集合中弹出一个元素 String pop = conn.spop(_key); System.out.println(MessageFormat.format("POP: {0}", pop)); print(conn); //3.判断元素是否存在 System.out.println(MessageFormat.format("A是集合中的元素? {0}", conn.sismember(_key, "AA"))); System.out.println(MessageFormat.format("J是集合中的元素? {0}", conn.sismember(_key, "JQ"))); conn.expire(_key, 1); //设置改key值1s后过期,过期后redis自动清理该缓存 System.out.println(MessageFormat.format("key[{0}]存在:{1} ", _key,conn.exists(_key))); } private void print(List
list){ System.out.print(MessageFormat.format("scan输出,长度[{1}]:", _key,list.size())); for (String str : list) { System.out.print(MessageFormat.format("{0} ", str)); } System.out.println(); } private void print(ShardedJedis conn){ System.out.print(MessageFormat.format("{0}元素输出,长度[{1}]:", _key,conn.scard(_key))); Set
list = conn.smembers(_key); for (String str : list) { System.out.print(MessageFormat.format("{0} ", str)); } System.out.println(); }}

二、结果输出

  

三、关于命令

  

  match参数用于过滤,count参数用于限制一次迭代返回的集合数目。这个值默认是10。我测试了两种情况,集合元素个数少于10以及大于10。后面给出测试的结果。测试过这个sscan方法后,有点懵逼,网上查找别人的分享,好像也是懵逼的多。显示设置一次迭代的个数,是否能够生效,还受到set元素总个数是否超过10的影响。这块的实现让人费解。就测试后来看,当数据量不是很大,想正确的一次查询所有匹配项的话,请设置一个较大的count参数,这样能保证数据量从少到多的过程中都不会出问题。

  1、初始化集合元素为7个

  // 集合数据初始化        String[] arr= "AA,AB,AC,AD,AE,AF,AG".split(",");        conn.sadd(_key, arr);        print(conn);        //1.查询元素        //指定个数 count 在redis服务中默认值为10         ScanResult
result = conn.sscan(_key, "0",new ScanParams().match("A*").count(2)); String cursor = result.getStringCursor(); System.out.println(MessageFormat.format("游标位置:{0}", cursor)); print(result.getResult()); //匹配内容 result = conn.sscan(_key, "0",new ScanParams().match("A*")); print(result.getResult()); result = conn.sscan(_key, "0",new ScanParams().match("A*").count(100)); print(result.getResult());

    测试3种场景,情况如下

    •  match("A*").count(2):查询以A开头的元素,限定一次迭代2个元素。结果返回了3个数据。设置一次迭代2个元素,结果返回元素还大于设置的迭代量,卧槽,蛋疼的结果;
    •  match("A*"):不显示指定迭代个数,结果返回了所有的匹配项;
    •  match("A*").count(100):指定一次迭代上限为100,结果也返回了所有的匹配项。

  2、初始化集合元素为14个

// 集合数据初始化        String[] arr= "AA,AB,AC,AD,AE,AF,AG,BA,BB,BC,BD,BE,BF,BG".split(",");        conn.sadd(_key, arr);        print(conn);        //1.查询元素        //指定个数 count 在redis服务中默认值为10         ScanResult
result = conn.sscan(_key, "0",new ScanParams().match("A*").count(2)); String cursor = result.getStringCursor(); System.out.println(MessageFormat.format("游标位置:{0}", cursor)); print(result.getResult()); //匹配内容 result = conn.sscan(_key, "0",new ScanParams().match("A*")); print(result.getResult()); result = conn.sscan(_key, "0",new ScanParams().match("A*").count(100)); print(result.getResult());

    测试3种场景,情况如下

    •  match("A*").count(2):查询以A开头的元素,限定一次迭代2个元素。结果返回为空。可以理解为这一次的2个迭代元素均不符合过滤条件;
    •  match("A*"):不显示指定迭代个数,结果返回了4个匹配项。这样看默认的10个一批迭代的设置起作用了;
    •  match("A*").count(100):指定一次迭代上限为100,结果返回了所有的匹配项。看来想一次正确返回所有匹配项,只能直接设置一个较大的迭代值了。

转载于:https://www.cnblogs.com/MrSi/p/8479632.html

你可能感兴趣的文章
BootScrap
查看>>
[大牛翻译系列]Hadoop(16)MapReduce 性能调优:优化数据序列化
查看>>
WEB_点击一百万次
查看>>
CodeForces - 878A Short Program(位运算)
查看>>
路冉的JavaScript学习笔记-2015年1月23日
查看>>
Mysql出现(10061)错误提示的暴力解决办法
查看>>
2018-2019-2 网络对抗技术 20165202 Exp3 免杀原理与实践
查看>>
NPM慢怎么办 - nrm切换资源镜像
查看>>
CoreData 从入门到精通(四)并发操作
查看>>
Swift - UIView的常用属性和常用方法总结
查看>>
Swift - 异步加载各网站的favicon图标,并在单元格中显示
查看>>
Java编程思想总结笔记Chapter 5
查看>>
[LeetCode]662. Maximum Width of Binary Tree判断树的宽度
查看>>
WinForm聊天室
查看>>
Python 从零学起(纯基础) 笔记(一)
查看>>
【Python学习笔记】1.基础知识
查看>>
梦断代码阅读笔记02
查看>>
Java 线程安全问题
查看>>
selenium学习中遇到的问题
查看>>
大数据学习之一——了解简单概念
查看>>