redis

作者: 天渊hyominnLover | 来源:发表于2018-08-15 11:12 被阅读7次

    可存储数据结构:

    字符串,hash,List,set,有序set

    推荐java接口:jedis

    • 配置依赖:
    <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>2.9.0</version>
        <type>jar</type>
        <scope>compile</scope>
    </dependency>
    

    基本操作

    获取jedis对象进行redis操作,操作命令跟redis控制台命令一模一样:

    Jedis jedis = new Jedis("localhost");
    
    • 字符串String
    jedis.set("bb", "dqwqcqcqqq");//存储
    jedis.get("bb");    //取值
    jedis.rename("bb", "newBB");    //修改key的值
    jedis.setex("cc", 10, "woshicc");   //设置有效时间(10s)
    
    //数值操作
    jedis.set("num", "100");
    jedis.incr("num");
    jedis.incrBy("num", 5);
    jedis.decr("num");
    jedis.decrBy("num", 3);
    
    //通过通配符返回特定前缀的key
    jedis.keys("n*");
    jedis.keys("*");//返回全部
    
    //删除所有key
    jedis.flushAll();
    
    • List
    //将值存储到“myList”链表中
    jedis.lpush("myList", "aaa");
    jedis.lpush("myList", "bbb");
    jedis.lpush("myList", "ccc");
    
    //返回该链表中指定位置的数据
    jedis.lrange("myList", 0 ,2)
    
    //将数据插入到某个数据的前面
    jedis.linsert("myList", BinaryClient.LIST_POSITION.BEFORE, "bbb", "hahaha")
    //插入到某数据后面
    jedis.linsert("myList", BinaryClient.LIST_POSITION.AFTER, "bbb", "hehehe")
    
    //弹出并返回链表第一个元素(栈形式,先进后出,栈顶)
    jedis.lpop("myList");
    
    //弹出并返回两个元素:当前链表名和链表最后一个元素(栈底),若为空则阻塞相应时间,若还未获取到元素则返回nil(时间若设置为0的haul则一直阻塞)
    jedis.brpop(0, "myList");
    //弹出并返回链表第一个元素(栈顶),其他跟brpop一样
    jedis.blpop(0, "myList");
    
    //返回链表长度
    jedis.llen("myList");
    
    • HashMap
      redis可以保存HashMap对象
    String mapName = "person";
    //将属性保存到map对象中
    jedis.hset(mapName, "name", "刘耕");  
    jedis.hset(mapName, "age", "29");   
    jedis.hset(mapName, "height", "180cm");
    
    //取出map对象中的属性值
    jedis.hget(mapName, "name"); 
    //返回指定map对象
    jedis.hgetAll(mapName)
    //删除指定map中的指定属性
    jedis.hdel(mapName, "height");
    //判断某map是否有该属性
    jedis.hexists(mapName, "name");
    //取出所有key和value
    jedis.hkeys(mapName);
    jedis.hvals(mapName);
    //防重复写入,若指定属性不存在则写入,存在则不覆盖原值
    jedis.hsetnx(mapName, "school", "Chongda");
    
    • set
      redis可以保存set对象,set中的元素不可重复
    //将元素添加到指定的set对象中
    jedis.sadd(setName1, “1”);
    jedis.sadd(setName2, “1”);
    
    jedis.smembers(setName1);   //返回整个set对象
    jedis.sunion(setName1,setName2);    //返回两个set的并集
    jedis.sinter(setName1, setName2);   //返回两个set的交集
    jedis.sdiff(setName1, setName2);    //返回第一个set有而第二个set没有的集合
    jedis.sdiff(setName2, setName1);    //返回第二个set有而第一个set没有的集合
    
    jedis.sismember(setName1, "5"); //判断该set中是否包含指定元素
    jedis.srem(setName1, "6");  //删除指定元素(可删除多个)
    jedis.smove(setName1, setName2, "8"); //将set1中指定元素转移到set2
    jedis.scard(setName1);  //返回指定set中元素个数
    
    jedis.srandmember(setName1, 2); //从指定set中随机取指定数目的元素出来
    
    • 优先队列(SortedSet)
      也就是有序集合,其中的元素通过指定的score值进行排序
    //将指定了score的相应元素存入指定的SortedSet
    jedis.zadd(rank, 10, String.format("刘耕%d", 10)); 
    
    jedis.zrange(rank, 0, 9));  //按照score升序返回指定区间的元素
    jedis.zcount(rank, 50, 80));    //返回指定score区间的元素个数
    jedis.zscore(rank, "刘耕3"));   //返回指定元素的score值
    jedis.zincrby(rank, 5, "刘耕3"));   //将指定元素的score值增加指定数值
    jedis.zrangeByScore(rank, 0, 50));  //按照score升序返回指定score区间的元素
    jedis.zrevrange(rank, 0, 9));   //按照score降序返回指定区间的元素
    jedis.zrevrangeByScore(rank, 90,60); //按照score降序返回指定score区间的元素
    jedis.zremrangeByRank(rank, 6, 6); //删除指定排名区间的元素
    jedis.zremrangeByScore(rank, 50,80);  //删除指定score区间的元素 
    
    //取出SortedSet中的元素及对应的score(即取出map中的Entry集合)
    for(Tuple t:jedis.zrangeByScoreWithScores(rank, 60, 90)){
        print(41, t.getElement()+" : "+t.getScore());
    }
    
    jedis.zrank(rank, "刘耕8"); //获得某个元素的排名(升序)
    jedis.zrevrank(rank, "刘耕8"); //获得某个元素的排名(降序)
    jedis.zinterstore(dstKey, zsetName1, zsetName2); //获取两个zset的交集,并放入dstKey这个新的zset中
    
    //通过限定元素区间来返回指定区间的元素或元素个数
    jedis.zrevrank(rank, "刘耕8");
    jedis.zlexcount(rank, "[刘耕2", "[刘耕7");
    jedis.zlexcount(rank, "[刘耕2", "(刘耕7");
    jedis.zlexcount(rank, "-", "+");    //代表负无穷和正无穷
    jedis.zrevrangeByLex(rank, "[刘耕6", "[刘耕3");
    jedis.zrangeByLex(rank, "[刘耕3", "[刘耕6");
    jedis.zremrangeByLex(rank, "[刘耕7", "+");  //删除指定范围的元素
    

    jedis连接池

    jedis连接池默认有8个jedis连接,如果不关闭的话,后续任务将阻塞:

    JedisPool pool = new JedisPool();
    for(int i = 0; i<100; i++){
        Jedis j =  pool.getResource();
        print(49, j.get("a"));
        j.close();
    }
    

    Redis事务

    相关文章

      网友评论

          本文标题:redis

          本文链接:https://www.haomeiwen.com/subject/zniibftx.html