zoukankan      html  css  js  c++  java
  • 使用Redis

    在Java中使用Redis

    java使用jedis操作redis。

    名字很好记,redis的r换成j,j即java。

    redis-server要做到:

    bind绑定机器的实际ip
    防火墙开放对应端口

    Jedis的使用
    1、添加jedis依赖
    需要2个jar包:jedis.jar、commons-pool2.jar。

    jedis使用apache的线程池,所以需要添加commons-pool2.jar。

    使用maven,添加jedis时会自动包含commons-pool2。

    github上只有源码,如果要下载jar包,可以到Maven Repository下载。

    2、使用示例

    复制代码
            Jedis jedis=new Jedis("192.168.1.9",6379);
            // jedis.auth("abcd");  //如果需要密码
            //jedis.select(0);  //选择数据库,下标指定,默认使用db0
    
            if (jedis.ping().equals("PONG")){  //链路通畅
                jedis.set("name","chy");
                System.out.println(jedis.get("name"));
            }
            else{
                System.out.println("无法连接redis服务器");
            }
    
            jedis.close();
            
    复制代码
    
    
    复制代码
           Jedis jedis=new Jedis("192.168.1.9",6379);
    
           if (jedis.ping().equals("PONG")){  //连接成功
               jedis.zadd("users", 1223, "zhangsan");
               jedis.zadd("users", 2568, "lisi");
               jedis.zadd("users", 1379, "wangwu");
    
               //迭代
               Set<Tuple> users = jedis.zrangeWithScores("users", 0, -1);  //[0,-1]
               for (Tuple user:users){
                   String name = user.getElement(); //获取元素值
                   double score = user.getScore(); //获取分数
                   System.out.println(name+"的积分是:"+score);
               }
           }
           else{
               System.out.println("无法连接redis服务器");
           }
    
           jedis.close();
    复制代码
    

    Jedis类的常用方法
    1、构造方法

    Jedis(String  host, int port)    //指定redis服务器主机地址、端口号,host 可以是ip或者域名。参数均可选,缺省时默认为127.0.0.1、6379
    Jedis(String  host,int port, int timeout, boolean  ssl)  //连接超时时间、是否使用安全连接。参数都可选。
     
    

    2、连接

    auth(String password)   //验证密码
    ping()    //是否能ping通,能ping通则返回String类型的PONG。
    connect()   //连接redis-server。这个很少用,因为进行读写操作时会检测是否已连接,没连接会自动连接
    close()   //关闭连接并释放资源
    shutdown()   //关闭redis-server
     
    

    3、redis-server的配置项

    configGet(String param)  //获取redis-server配置的某个参数值
    configSet(String param, String value)  //设置redis-server的一个配置项
    configRewrite()    //同步到配置文件中,永久有效。若不同步,则重启redis-server失效。
     
    

    4、数据库

    select(index  db)    //选择要使用的数据库,默认使用db0
    flushDB()    //清空当前数据库
    flushAll()   //清空所有数据库
    save()   //同步到硬盘
    bgsave()   //后台同步
     
    

    5、key

    set(String key,String value)    //如果key已存在,会覆盖
    setnx(String  key, String value)    //key不存在时才设置,若key已存在,则不进行任何操作
    mset(String key1,String value2,String  key2, String value2, .....)    //同时设置多个键值对
    msetnx(String key1,String value2,String  key2, String value2, .....)    //key不存在时才设置
     
    
    expire(String key, int seconds)   //设置过期时间
    setex(String key,int seconds, String value)   //设置键值对、并指定过期时间,默认永不过期
     
    
    get(String key)    //返回String类型的value
    mget(String key1,String key2, .....)   //同时获取多个value,返回值是List<String>
     
    
    exists(String key)   //检测某个key是否存在
    rename(String oldKey,String newKey)    //重命名key
    type(String key)    //获取value的类型,string、hash、list、set、sorted set。
    del(String key1, String key2, ....)    //删除一个或多个键值对
     
    
    incr(String key)    //值自增,+1,返回操作后的值,long型
    incrBy(String  key, long increment)   //指定int型增量,返回long
    incrByFloat(String key,double increment)    //指定double型增量,返回double。方法名中的float表示浮点数,并不限于单精度
     
    
    decr(String key)   //值自减
    decrBy(String key,long  decrement)  //原值减去decrement,decrement要指定为正数
    没有decrByFloat()方法,可以用incrByFloat(),增量指定为负数即可。
    
    

    6、hash

    hset(String key, String field, String value)    //设置单个字段
    hsetnx(String key,  String field,  String value)  
    hset(String   key, Map<String ,String>  map)  //把map中的字段都添加进来
     
    
    hget(String key , String field)
    hmget(String key,  String field1, String field2,  ....)    //获取多个字段的值,返回List<String>
    hgetAll(String  key)    //获取所有的字段,返回Map<String , String >
     
    
    hexists(String key, String  field)   //某个字段是否存在
    hdel(String  key, String  field)    //删除某个字段
     
    
    hlen(String key)   //返回该hash表中字段数,返回值是Long型
    hkeys(String key)   //获取所有的字段名,返回值是Set<String>
    hvals(String  key)   //获取所有的字段值,返回值是List<String>
     
    
    hincrBy(String  key, String  field, long  increment)   //返回操作后的数值,long型
    hincrByFloat(String key, String field , double  increment)   //double
    没有hdecrXxx()方法,将上面的增量写成负数即可。
    

    7、list

    lpush(String  key, String element1, String  element2, .....)     //在列表头插入一个或多个元素
    lpushx(String key, String element1, String element2 ,.....)    //key存在才插入,若key不存在,不进行任何操作
    lpop(String key)   //弹出列表的第一个元素。弹出是指删除并返回。
     
    
    rpush(String key, String element1, String element2, ....)   //在列表尾插入一个或多个元素
    rpushx(String key, String element1, String element2, ....) 
    rpop(String key)   //弹出列表的最后一个元素
     
    
    lindex(String key, long index)   //返回指定位置上的元素
    linsert(String key,ListPosition  position,,String element1, String element2)   //在element1的前面|后面插入element2。第二个参数是枚举类型,可用的值:ListPosition.BEFORE,ListPosition.AFTER
     
    
    llen(String key)    //元素个数,long
    lrange(String key, long  startIndex, long  endIndex)   //返回[startIndex, endIndex]上的所有元素,List<String>
     
    
    lset(String key, long index, String element)   //修改该位置上的值,index上要已有元素。
    lrem(String key, long count, String element)   //从列表中移除count个值是value的元素,count为正表示从前往后搜索,为负表示从后往前搜索
    ltrim(String key, long startIndex, long  endIndex)   //修剪列表,只保留[startIndex, endIndex]上的元素,其余删除。返回String类型的操作结果,“OK”表示操作成功。
    

    8、set

    sadd(String key, String element1, String element2, ....)   //添加一个或多个元素
    srem(String key, String element1, String element2, ...)    //移除一个或多个元素
     
    
    smembers(String key)   //返回集合中所有的元素,Set<String>
    scard(String  key)   //返回集合中的元素个数,long
    sismember(String key, String element)   //检测集合中是否包含某个元素,boolean
     
    
    spop(String key)   //随机弹出一个元素,String
    spop(String key, long count)   //随机弹出count个元素,Set<String>
     
    
    srandmember(String key)   //随机返回一个元素。与spop()的区别是,srandmember()不会移除该元素
    srandmember(Sring key, long count)
     
    
    sdiff(String key1, String key2, ....)   //求差集,返回Set<String>
    sdiffstore(String  destKey, String key1, String key2)   //把差集中的元素存储到destKey集合中,返回差集中的元素个数,long
    相同用法的还有:
    
    sinter   交集
    sunion   并集
     
    

    set是无序的,没有与索引相关的方法。

    9、sorted set

    zadd(String key, doubel  score, String element)   
    zadd(String key, Map<String, Double>  map)
    zrem(String key, String element1, String element2,  ....)   //移除一个或多个元素
     
    
    zcard(String key)   //元素个数,long
    zcount(String key, double  minScore, double  maxScore)   //返回[minScore, maxScore]区间上的元素个数。元素默认按score升序排列
    zcount(String key, String startElement, String  endElement)   //返回[startElement, endElement]上的元素个数
     
    
    zrank(String key, String element)   //返回该元素所在位置|排名,下标。默认按score升序排列
    zrevrank(String key, String element)   //按score降序排列
     
    
    zincrby(String key, double increment, String element)    //返回操作后的元素值,double。没有zdecrby()方法,将增量设置为负数即可
     
    
    zinter(String destKey, String...keys)    //交集,结果存储到destKey集合中
    zunion(String destKey,String...keys)   //并集
     
    
    zrangeByXxx()  系列方法      //返回该某个区间上的所有元素,Set<String>。默认按score升序排列
    zrevrangeXxx()  系列方法   //返回某个区间上的所有元素,Set<String>。按score降序排列,rev即reverse,反序
    zremrangeByXxx()  系列方法   //删除某个区间上的所有元素
     
    

    list返回多个元素时用的是List,set、sorted set返回多个元素时用的是Set,hash返回多个值时用的是Map、List、Set。

    JedisPool的使用
    自动创建一些Jedis对象,放在JedisPool中,要用时取出来直接用即可,用完放回池中,减少创建Jedis对象的时间开销。

      JedisPool jedisPool = new JedisPool("192.168.1.9",6379);  //host、port均可选,缺省时使用默认值
      Jedis jedis = jedisPool.getResource();
     
    

    可以对JedisPool进行配置:

    复制代码
            JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
            jedisPoolConfig.setMaxTotal(15);
            jedisPoolConfig.setMaxIdle(10);
            jedisPoolConfig.setMinIdle(5);
            jedisPoolConfig.setMaxWaitMillis(180);//若一个Jedis对象闲置多少秒,就销毁
    
            JedisPool jedisPool= new JedisPool(jedisPoolConfig, "192.168.1.9", 6379);
            Jedis jedis = jedisPool.getResource();
    复制代码
    
    JedisPool jedisPool= new JedisPool(jedisPoolConfig, "192.168.1.9", 6379, 30, "abcd", true);
    

    配置、host、port、超时时间、密码、是否使用ssl,参数均可选。

    超时时间是指多少秒内连不上redis-server就返回失败。

    如果要使用ssl,需要在Linux上安装ssl证书。

    连接redis集群
    复制代码

            // 集群节点
            Set<HostAndPort> nodes = new HashSet();
            nodes.add(new HostAndPort("192.168.1.7", 6379)); //host、port
            nodes.add(new HostAndPort("192.168.1.7", 6380));
            nodes.add(new HostAndPort("192.168.1.7", 6381));
            nodes.add(new HostAndPort("192.168.1.7", 6382));
            nodes.add(new HostAndPort("192.168.1.7", 6383));
            nodes.add(new HostAndPort("192.168.1.7", 6384));
    
    
            //获取JedisCluster对象
            JedisCluster jedisCluster = new JedisCluster(nodes);
    
    
            jedisCluster.set("level", "master");
            String level = jedisCluster.get("level");
            System.out.println("your level is : "+level);
    
    
            jedisCluster.zadd("users", 1223, "zhangsan");
            jedisCluster.zadd("users", 2568, "lisi");
            jedisCluster.zadd("users", 1379, "wangwu");
    
            Set<Tuple> users = jedisCluster.zrangeWithScores("users", 0, -1); //[0,-1]
            for (Tuple user:users){
                String name = user.getElement(); //获取元素值
                double score = user.getScore(); //获取分数
                System.out.println(name+"的积分是:"+score);
            }    
    
    复制代码
     
    

    JedisCluster类的方法和Jedis类的方法基本一样,不再一一说明。

    为了目标奋斗
  • 相关阅读:
    内存问题再次注意
    数据分析(基础/数组)
    总结
    scrapy框架
    selenium
    chromedriver设置无界面模式 selenium基础操作
    selenium+phantomjs/Chrome/Firefox
    json解析模块
    cookie模拟登录
    常用正则
  • 原文地址:https://www.cnblogs.com/Rosemajor/p/13296778.html
Copyright © 2011-2022 走看看