redis-java基本使用

作者: 慕凌峰 | 来源:发表于2016-06-21 21:12 被阅读760次

    一、用户eclipse实现java代码和Redis的基本操作

    </br>

    1、jar包

    </br>

    2、代码实现

    • 基本代码:Redis/src/com/redis/RedisClient.java

    package com.redis;
    
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Set;
    
    import redis.clients.jedis.Jedis;
    import redis.clients.jedis.JedisPool;
    import redis.clients.jedis.JedisPoolConfig;
    import redis.clients.jedis.JedisShardInfo;
    import redis.clients.jedis.ShardedJedis;
    import redis.clients.jedis.ShardedJedisPool;
    import redis.clients.jedis.SortingParams;
    
    public class RedisClient {
    
        private Jedis jedis;   //非切片客户端连接
        private JedisPool jedisPool;  //非切片连接池
        private ShardedJedis shardedJedis;  //切片客户端连接
        private ShardedJedisPool shardedJedisPool;  //切片连接池
        
        public RedisClient() {
            initialPool(); 
            initialShardedPool(); 
            shardedJedis = shardedJedisPool.getResource(); 
            jedis = jedisPool.getResource();
        }
        
        /*
         * 初始化非切片池
         */
        
        private void initialPool(){
            
            //池基本配置
            JedisPoolConfig config = new JedisPoolConfig();
            config.setMaxActive(20);
            config.setMaxIdle(5);
            config.setMaxWait(1000L);
            config.setTestOnBorrow(false);
            
            jedisPool = new JedisPool(config,"127.0.0.1",6379);
        }
        
        /*
         * 初始化切片池
         */
        private void initialShardedPool(){
            
            //池基本配置
            JedisPoolConfig config = new JedisPoolConfig();
            config.setMaxActive(20);
            config.setMaxIdle(5);
            config.setMaxWait(1000L);
            config.setTestOnBorrow(false);
            
            //slave连接
            List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>();
            shards.add(new JedisShardInfo("127.0.0.1", 6379, "master"));
            
            //构造池
            shardedJedisPool = new ShardedJedisPool(config, shards);
            
        }
        
        public void show(){
            KeyOperate();
            StringOperate();
            ListOperate();
            SetOperate();
            SortedSetOperate();
            HashOperate();
        }
        
        //功能代码模块
        
        /*
         * key功能
         */
         private void KeyOperate() {
             System.out.println();
            System.out.println("Key 功能 : ");
            
            //清空库中所有数据
            System.out.println("清空库中所有数据: "+jedis.flushDB());
            
            //新增 key001,value001键值对
            System.out.println("新增 key001,value001键值对: "+shardedJedis.set("key001", "value001"));
            System.out.println("新增 key002,value002键值对: "+shardedJedis.set("key002", "value002"));
            
            //判断key001是否存在
            System.out.println("判断key001是否存在: "+shardedJedis.exists("key001"));
            
            //输出系统中所有的key
            System.out.println("输出系统中所有的key:");
            Set<String> keys = jedis.keys("*");
            Iterator<String> iterator = keys.iterator();
            while(iterator.hasNext()){
                String key = iterator.next();
                System.out.println(key);
            }
                //结果为key001 key002
            
            //删除某个key,若key不存在这忽略命令
            System.out.println("删除某个key,若key不存在这忽略命令: "+jedis.del("key002"));;
            System.out.println("判断key002是否存在: "+jedis.exists("key002"));  //判断key002是否存在
            
            //设置key001的过期时间
            System.out.println("设置key001的过期时间: "+jedis.expire("key001", 5));
            
            try {
                Thread.sleep(2000); //睡眠2秒
            } catch (Exception e) {
                
            }
    
            //返回某个key的剩余有效时间,单位为”秒“,不存在的或者永远有效的都返回-1
            System.out.println("返回某个key001的剩余有效时间: "+jedis.ttl("key001"));
            
            //设置某个key的生存时间
            System.out.println("设置某个key001的生存时间: "+jedis.persist("key001"));
            
            //查看key所存放值的类型
            System.out.println(""+jedis.type("key001"));
            
            //修改key的名称
            System.out.println("重命名key001: "+jedis.rename("key001", "key01"));
            
            //将当前db中的key移动到指定的db当中
            System.out.println("将当前db中的key移动到指定的db当中: "+jedis.move("key01", 3));
            
            /*
             * 运行结果
             * 
                  清空库中所有数据:OK
            判断key999键是否存在:false
            新增key001,value001键值对:OK
            判断key001是否存在:true
            新增key002,value002键值对:OK
            系统中所有键如下:
            key002
            key001
            系统中删除key002: 1
            判断key002是否存在:false
            设置 key001的过期时间为5秒:1
            查看key001的剩余生存时间:3
            移除key001的生存时间:1
            查看key001的剩余生存时间:-1
            查看key所储存的值的类型:string
            *
            */
         }
    
         private void StringOperate() {
             System.out.println();
             System.out.println("String 功能 :");
             // 清空数据 
             System.out.println("清空库中所有数据:"+jedis.flushDB());
             
             System.out.println("=============增=============");
             jedis.set("key001","value001");
             jedis.set("key002","value002");
             jedis.set("key003","value003");
             System.out.println("已新增的3个键值对如下:");
             System.out.println(jedis.get("key001"));
             System.out.println(jedis.get("key002"));
             System.out.println(jedis.get("key003"));
             
             System.out.println("=============删=============");  
             System.out.println("删除key003键值对:"+jedis.del("key003"));  
             System.out.println("获取key003键对应的值:"+jedis.get("key003"));
             
             System.out.println("=============改=============");
             //1、直接覆盖原来的数据
             System.out.println("直接覆盖key001原来的数据:"+jedis.set("key001","value001-update"));
             System.out.println("获取key001对应的新值:"+jedis.get("key001"));
             //2、直接覆盖原来的数据  
             System.out.println("在key002原来值后面追加:"+jedis.append("key002","+appendString"));
             System.out.println("获取key002对应的新值"+jedis.get("key002")); 
        
             System.out.println("=============增,删,查(多个)=============");
             /** 
              * mset,mget同时新增,修改,查询多个键值对 
              * 等价于:
              * jedis.set("name","ssss"); 
              * jedis.set("jarorwar","xxxx"); 
              */  
             System.out.println("一次性新增key201,key202,key203,key204及其对应值:"+jedis.mset("key201","value201",
                             "key202","value202","key203","value203","key204","value204"));  
             System.out.println("一次性获取key201,key202,key203,key204各自对应的值:"+
                             jedis.mget("key201","key202","key203","key204"));
             System.out.println("一次性删除key201,key202:"+jedis.del(new String[]{"key201", "key202"}));
             System.out.println("一次性获取key201,key202,key203,key204各自对应的值:"+
                     jedis.mget("key201","key202","key203","key204")); 
             System.out.println();
                     
                 
             //jedis具备的功能shardedJedis中也可直接使用,下面测试一些前面没用过的方法
             System.out.println("======================String_2=========================="); 
             // 清空数据 
             System.out.println("清空库中所有数据:"+jedis.flushDB());       
            
             System.out.println("=============新增键值对时防止覆盖原先值=============");
             System.out.println("原先key301不存在时,新增key301:"+shardedJedis.setnx("key301", "value301"));
             System.out.println("原先key302不存在时,新增key302:"+shardedJedis.setnx("key302", "value302"));
             System.out.println("当key302存在时,尝试新增key302:"+shardedJedis.setnx("key302", "value302_new"));
             System.out.println("获取key301对应的值:"+shardedJedis.get("key301"));
             System.out.println("获取key302对应的值:"+shardedJedis.get("key302"));
             
             System.out.println("=============超过有效期键值对被删除=============");
             // 设置key的有效期,并存储数据 
             System.out.println("新增key303,并指定过期时间为2秒"+shardedJedis.setex("key303", 2, "key303-2second")); 
             System.out.println("获取key303对应的值:"+shardedJedis.get("key303")); 
             try{ 
                 Thread.sleep(3000); 
             } 
             catch (InterruptedException e){ 
             } 
             System.out.println("3秒之后,获取key303对应的值:"+shardedJedis.get("key303")); 
             
             System.out.println("=============获取原值,更新为新值一步完成=============");
             System.out.println("key302原值:"+shardedJedis.getSet("key302", "value302-after-getset"));
             System.out.println("key302新值:"+shardedJedis.get("key302"));
             
             System.out.println("=============获取子串=============");
             System.out.println("获取key302对应值中的子串:"+shardedJedis.getrange("key302", 5, 7));
         }
    
         private void ListOperate() {
             System.out.println();
             System.out.println("list 功能 :"); 
             // 清空数据 
             System.out.println("清空库中所有数据:"+jedis.flushDB()); 
    
             System.out.println("=============增=============");
             shardedJedis.lpush("stringlists", "vector"); 
             shardedJedis.lpush("stringlists", "ArrayList"); 
             shardedJedis.lpush("stringlists", "vector");
             shardedJedis.lpush("stringlists", "vector");
             shardedJedis.lpush("stringlists", "LinkedList");
             shardedJedis.lpush("stringlists", "MapList");
             shardedJedis.lpush("stringlists", "SerialList");
             shardedJedis.lpush("stringlists", "HashList");
             shardedJedis.lpush("numberlists", "3");
             shardedJedis.lpush("numberlists", "1");
             shardedJedis.lpush("numberlists", "5");
             shardedJedis.lpush("numberlists", "2");
             System.out.println("所有元素-stringlists:"+shardedJedis.lrange("stringlists", 0, -1));
             System.out.println("所有元素-numberlists:"+shardedJedis.lrange("numberlists", 0, -1));
             
             System.out.println("=============删=============");
             // 删除列表指定的值 ,第二个参数为删除的个数(有重复时),后add进去的值先被删,类似于出栈
             System.out.println("成功删除指定元素个数-stringlists:"+shardedJedis.lrem("stringlists", 2, "vector")); 
             System.out.println("删除指定元素之后-stringlists:"+shardedJedis.lrange("stringlists", 0, -1));
             // 删除区间以外的数据 
             System.out.println("删除下标0-3区间之外的元素:"+shardedJedis.ltrim("stringlists", 0, 3));
             System.out.println("删除指定区间之外元素后-stringlists:"+shardedJedis.lrange("stringlists", 0, -1));
             // 列表元素出栈 
             System.out.println("出栈元素:"+shardedJedis.lpop("stringlists")); 
             System.out.println("元素出栈后-stringlists:"+shardedJedis.lrange("stringlists", 0, -1));
             
             System.out.println("=============改=============");
             // 修改列表中指定下标的值 
             shardedJedis.lset("stringlists", 0, "hello list!"); 
             System.out.println("下标为0的值修改后-stringlists:"+shardedJedis.lrange("stringlists", 0, -1));
             System.out.println("=============查=============");
             // 数组长度 
             System.out.println("长度-stringlists:"+shardedJedis.llen("stringlists"));
             System.out.println("长度-numberlists:"+shardedJedis.llen("numberlists"));
             // 排序 
             /*
              * list中存字符串时必须指定参数为alpha,如果不使用SortingParams,而是直接使用sort("list"),
              * 会出现"ERR One or more scores can't be converted into double"
              */
             SortingParams sortingParameters = new SortingParams();
             sortingParameters.alpha();
             sortingParameters.limit(0, 3);
             System.out.println("返回排序后的结果-stringlists:"+shardedJedis.sort("stringlists",sortingParameters)); 
             System.out.println("返回排序后的结果-numberlists:"+shardedJedis.sort("numberlists"));
             // 子串:  start为元素下标,end也为元素下标;-1代表倒数一个元素,-2代表倒数第二个元素
             System.out.println("子串-第二个开始到结束:"+shardedJedis.lrange("stringlists", 1, -1));
             // 获取列表指定下标的值 
             System.out.println("获取下标为2的元素:"+shardedJedis.lindex("stringlists", 2)+"\n");
         }
    
         private void SetOperate() {
             System.out.println();
             System.out.println("set 功能 :"); 
             // 清空数据 
             System.out.println("清空库中所有数据:"+jedis.flushDB());
             
             System.out.println("=============增=============");
             System.out.println("向sets集合中加入元素element001:"+jedis.sadd("sets", "element001")); 
             System.out.println("向sets集合中加入元素element002:"+jedis.sadd("sets", "element002")); 
             System.out.println("向sets集合中加入元素element003:"+jedis.sadd("sets", "element003"));
             System.out.println("向sets集合中加入元素element004:"+jedis.sadd("sets", "element004"));
             System.out.println("查看sets集合中的所有元素:"+jedis.smembers("sets")); 
             System.out.println();
             
             System.out.println("=============删=============");
             System.out.println("集合sets中删除元素element003:"+jedis.srem("sets", "element003"));
             System.out.println("查看sets集合中的所有元素:"+jedis.smembers("sets"));
             /*System.out.println("sets集合中任意位置的元素出栈:"+jedis.spop("sets"));//注:出栈元素位置居然不定?--无实际意义
             System.out.println("查看sets集合中的所有元素:"+jedis.smembers("sets"));*/
             System.out.println();
             
             System.out.println("=============改=============");
             System.out.println();
             
             System.out.println("=============查=============");
             System.out.println("判断element001是否在集合sets中:"+jedis.sismember("sets", "element001"));
             System.out.println("循环查询获取sets中的每个元素:");
             Set<String> set = jedis.smembers("sets");   
             Iterator<String> it=set.iterator() ;   
             while(it.hasNext()){   
                 Object obj=it.next();   
                 System.out.println(obj);   
             }  
             System.out.println();
             
             System.out.println("=============集合运算=============");
             System.out.println("sets1中添加元素element001:"+jedis.sadd("sets1", "element001")); 
             System.out.println("sets1中添加元素element002:"+jedis.sadd("sets1", "element002")); 
             System.out.println("sets1中添加元素element003:"+jedis.sadd("sets1", "element003")); 
             System.out.println("sets1中添加元素element002:"+jedis.sadd("sets2", "element002")); 
             System.out.println("sets1中添加元素element003:"+jedis.sadd("sets2", "element003")); 
             System.out.println("sets1中添加元素element004:"+jedis.sadd("sets2", "element004"));
             System.out.println("查看sets1集合中的所有元素:"+jedis.smembers("sets1"));
             System.out.println("查看sets2集合中的所有元素:"+jedis.smembers("sets2"));
             System.out.println("sets1和sets2交集:"+jedis.sinter("sets1", "sets2"));
             System.out.println("sets1和sets2并集:"+jedis.sunion("sets1", "sets2"));
             System.out.println("sets1和sets2差集:"+jedis.sdiff("sets1", "sets2"));//差集:set1中有,set2中没有的元素
         }
    
         private void SortedSetOperate() 
         { 
             System.out.println();
             System.out.println("zset 功能 :"); 
             // 清空数据 
             System.out.println(jedis.flushDB()); 
             
             System.out.println("=============增=============");
             System.out.println("zset中添加元素element001:"+shardedJedis.zadd("zset", 7.0, "element001")); 
             System.out.println("zset中添加元素element002:"+shardedJedis.zadd("zset", 8.0, "element002")); 
             System.out.println("zset中添加元素element003:"+shardedJedis.zadd("zset", 2.0, "element003")); 
             System.out.println("zset中添加元素element004:"+shardedJedis.zadd("zset", 3.0, "element004"));
             System.out.println("zset集合中的所有元素:"+shardedJedis.zrange("zset", 0, -1));//按照权重值排序
             System.out.println();
             
             System.out.println("=============删=============");
             System.out.println("zset中删除元素element002:"+shardedJedis.zrem("zset", "element002"));
             System.out.println("zset集合中的所有元素:"+shardedJedis.zrange("zset", 0, -1));
             System.out.println();
             
             System.out.println("=============改=============");
             System.out.println();
             
             System.out.println("=============查=============");
             System.out.println("统计zset集合中的元素中个数:"+shardedJedis.zcard("zset"));
             System.out.println("统计zset集合中权重某个范围内(1.0——5.0),元素的个数:"+shardedJedis.zcount("zset", 1.0, 5.0));
             System.out.println("查看zset集合中element004的权重:"+shardedJedis.zscore("zset", "element004"));
             System.out.println("查看下标1到2范围内的元素值:"+shardedJedis.zrange("zset", 1, 2));
    
         }
       
         private void HashOperate() 
         { 
             System.out.println();
             System.out.println("hash 功能 :");
             //清空数据 
             System.out.println(jedis.flushDB()); 
             
             System.out.println("=============增=============");
             System.out.println("hashs中添加key001和value001键值对:"+shardedJedis.hset("hashs", "key001", "value001")); 
             System.out.println("hashs中添加key002和value002键值对:"+shardedJedis.hset("hashs", "key002", "value002")); 
             System.out.println("hashs中添加key003和value003键值对:"+shardedJedis.hset("hashs", "key003", "value003"));
             System.out.println("新增key004和4的整型键值对:"+shardedJedis.hincrBy("hashs", "key004", 4l));
             System.out.println("hashs中的所有值:"+shardedJedis.hvals("hashs"));
             System.out.println();
             
             System.out.println("=============删=============");
             System.out.println("hashs中删除key002键值对:"+shardedJedis.hdel("hashs", "key002"));
             System.out.println("hashs中的所有值:"+shardedJedis.hvals("hashs"));
             System.out.println();
             
             System.out.println("=============改=============");
             System.out.println("key004整型键值的值增加100:"+shardedJedis.hincrBy("hashs", "key004", 100l));
             System.out.println("hashs中的所有值:"+shardedJedis.hvals("hashs"));
             System.out.println();
             
             System.out.println("=============查=============");
             System.out.println("判断key003是否存在:"+shardedJedis.hexists("hashs", "key003"));
             System.out.println("获取key004对应的值:"+shardedJedis.hget("hashs", "key004"));
             System.out.println("批量获取key001和key003对应的值:"+shardedJedis.hmget("hashs", "key001", "key003")); 
             System.out.println("获取hashs中所有的key:"+shardedJedis.hkeys("hashs"));
             System.out.println("获取hashs中所有的value:"+shardedJedis.hvals("hashs"));
             System.out.println();
                   
         }
        
    }
    
    

    • 测试类:Redis/src/com/redis/Main.java

    package com.redis;
    public class Main {
        
        public static void main(String[] args) {
            System.out.println("-------------开始测试---------------");
            System.out.println();
            new RedisClient().show();
            System.out.println();
            System.out.println("-------------结束测试---------------");
        }
    }
    

    • 运行结果:

    -------------开始测试---------------
    Key 功能 :
    清空库中所有数据: OK
    新增 key001,value001键值对: OK
    新增 key002,value002键值对: OK
    判断key001是否存在: true
    输出系统中所有的key:
    key002
    key001
    删除某个key,若key不存在这忽略命令: 1
    判断key002是否存在: false
    设置key001的过期时间: 1
    返回某个key001的剩余有效时间: 3
    设置某个key001的生存时间: 1
    string
    重命名key001: OK
    将当前db中的key移动到指定的db当中: 0
    String 功能 :
    清空库中所有数据:OK
    =============增=============
    已新增的3个键值对如下:
    value001
    value002
    value003
    =============删=============
    删除key003键值对:1
    获取key003键对应的值:null
    =============改=============
    直接覆盖key001原来的数据:OK
    获取key001对应的新值:value001-update
    在key002原来值后面追加:21
    获取key002对应的新值value002+appendString
    =============增,删,查(多个)=============
    一次性新增key201,key202,key203,key204及其对应值:OK
    一次性获取key201,key202,key203,key204各自对应的值:[value201, value202, value203, value204]
    一次性删除key201,key202:2
    一次性获取key201,key202,key203,key204各自对应的值:[null, null, value203, value204]
    ======================String_2==========================
    清空库中所有数据:OK
    =============新增键值对时防止覆盖原先值=============
    原先key301不存在时,新增key301:1
    原先key302不存在时,新增key302:1
    当key302存在时,尝试新增key302:0
    获取key301对应的值:value301
    获取key302对应的值:value302
    =============超过有效期键值对被删除=============
    新增key303,并指定过期时间为2秒OK
    获取key303对应的值:key303-2second
    3秒之后,获取key303对应的值:null
    =============获取原值,更新为新值一步完成=============
    key302原值:value302
    key302新值:value302-after-getset
    =============获取子串=============
    获取key302对应值中的子串:302
    list 功能 :
    清空库中所有数据:OK
    =============增=============
    所有元素-stringlists:[HashList, SerialList, MapList, LinkedList, vector, vector, ArrayList, vector]
    所有元素-numberlists:[2, 5, 1, 3]
    =============删=============
    成功删除指定元素个数-stringlists:2
    删除指定元素之后-stringlists:[HashList, SerialList, MapList, LinkedList, ArrayList, vector]
    删除下标0-3区间之外的元素:OK
    删除指定区间之外元素后-stringlists:[HashList, SerialList, MapList, LinkedList]
    出栈元素:HashList
    元素出栈后-stringlists:[SerialList, MapList, LinkedList]
    =============改=============
    下标为0的值修改后-stringlists:[hello list!, MapList, LinkedList]
    =============查=============
    长度-stringlists:3
    长度-numberlists:4
    返回排序后的结果-stringlists:[LinkedList, MapList, hello list!]
    返回排序后的结果-numberlists:[1, 2, 3, 5]
    子串-第二个开始到结束:[MapList, LinkedList]
    获取下标为2的元素:LinkedList
    set 功能 :
    清空库中所有数据:OK
    =============增=============
    向sets集合中加入元素element001:1
    向sets集合中加入元素element002:1
    向sets集合中加入元素element003:1
    向sets集合中加入元素element004:1
    查看sets集合中的所有元素:[element001, element002, element003, element004]
    =============删=============
    集合sets中删除元素element003:1
    查看sets集合中的所有元素:[element001, element002, element004]
    =============改=============
    =============查=============
    判断element001是否在集合sets中:true
    循环查询获取sets中的每个元素:
    element001
    element002
    element004
    =============集合运算=============
    sets1中添加元素element001:1
    sets1中添加元素element002:1
    sets1中添加元素element003:1
    sets1中添加元素element002:1
    sets1中添加元素element003:1
    sets1中添加元素element004:1
    查看sets1集合中的所有元素:[element001, element002, element003]
    查看sets2集合中的所有元素:[element002, element003, element004]
    sets1和sets2交集:[element002, element003]
    sets1和sets2并集:[element001, element002, element003, element004]
    sets1和sets2差集:[element001]
    zset 功能 :
    OK
    =============增=============
    zset中添加元素element001:1
    zset中添加元素element002:1
    zset中添加元素element003:1
    zset中添加元素element004:1
    zset集合中的所有元素:[element003, element004, element001, element002]
    =============删=============
    zset中删除元素element002:1
    zset集合中的所有元素:[element003, element004, element001]
    =============改=============
    =============查=============
    统计zset集合中的元素中个数:3
    统计zset集合中权重某个范围内(1.0——5.0),元素的个数:2
    查看zset集合中element004的权重:3.0
    查看下标1到2范围内的元素值:[element004, element001]
    hash 功能 :
    OK
    =============增=============
    hashs中添加key001和value001键值对:1
    hashs中添加key002和value002键值对:1
    hashs中添加key003和value003键值对:1
    新增key004和4的整型键值对:4
    hashs中的所有值:[value001, value002, value003, 4]
    =============删=============
    hashs中删除key002键值对:1
    hashs中的所有值:[value001, value003, 4]
    =============改=============
    key004整型键值的值增加100:104
    hashs中的所有值:[value001, value003, 104]
    =============查=============
    判断key003是否存在:true
    获取key004对应的值:104
    批量获取key001和key003对应的值:[value001, value003]
    获取hashs中所有的key:[key004, key003, key001]
    获取hashs中所有的value:[value001, value003, 104]
    -------------结束测试---------------


    相关文章

      网友评论

      • ElonYanJ:博主用的jedis是哪一版的啊

      本文标题:redis-java基本使用

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