在Java中使用Redis

 

准备工作

1、下载驱动包jedis.jar。

名字很好记,就是把redis的首字母r换成j。

 

2、在项目中添加jedis.jar

 

 

 

 

Jedis类

在Java中操作Redis使用的是Jedis类。

 

1、构造函数

  • Jedis()    //使用默认的host、port。host默认为localhost/127.0.0.1,port默认为6379。
  • Jedis(String  host)    //指定Redis服务器地址,IP、域名均可。使用默认端口6379.
  • Jedis(String  host, int port)     
  • Jedis(String  host, int port , int  timeout)   //超时时间
  • Jedis(String host,int port , boolean  ssl)   //是否使用安全连接
  • Jedis(String  host,int port, int timeout, boolean  ssl)

 

 

2、连接服务器

  • auth(String password)   //验证密码
  • ping()    //测试连接,连接成功返回String类型的PONG。
  • connect()   //连接服务器。使用auth()时会自动自动调用connect()连接,可以不用connect()
  • disconnect()   //关闭连接
  • close()   //关闭连接并释放资源,会自动调用disconnect()
  • quit()   //关闭连接并退出,会自动调用close()
  • shutdown()   //关闭服务器

 

 

 

3、配置参数

  • configSet(String param, String value)
  • configGet(String param)
  • configRewrite()    //同步到配置文件中

 

 

 

4、操作数据库

  • select(index  db)    //选择当前使用的数据库,默认为数据库0
  • getDB()   //返回当前使用的数据库,int型。
  • dbSize()   //当前数据库中key的数量,返回值是long型

 

  • flushDB()    //清空当前数据库
  • flushAll()   //清空所有数据库

 

  • save()   //同步、持久化到数据库文件(.rdb)
  • bgsave()   //后台save()

 

  • keys(String pattern)   //获取当前数据库中,所有符合要求的key,返回值时Set<String>类型。”*”表示匹配所有的key。

 

 

 

 

5、操作键值对

  • set(String key,String value)    //如果key已存在,会覆盖

 

  • setnx(String  key, String value)    //key不存在时才设置,若key已存在,则不作操作(不会覆盖原来的值)

 

  • setex(String key,int seconds, String value)   //过期时间,多少秒后过期,如不设置则键值对一直存在。setex即set  expire,设置生存期。

 

  • mset(String key1,String value2,String  key2, String value2, …..)    //同时设置多个键值对。mset即multiple  set。
  • msetnx(String key1,String value2,String  key2, String value2, …..)    //key不存在时才设置

 

  • get(String key)    //返回String类型的value
  • mget(String key1,String key2, …..)   //同时获取多个value,返回值是List<String>

 

  • exists(String key)   //是否存在
  • expire(String key, int seconds)   //设置过期时间

 

  • del(String key)    //删除
  • del(String key1, String key2, ….)    //删除多个

 

  • rename(String oldKey,String newKey)    //重命名key
  • type(String key)    //获取value的类型,string、hash、list、set、sorted set。

 

  • incr(String key)    //key是内容为int的String,将value+1。返回操作后的数值,long型。
  • incrBy(String  key, long increment)   //增加指定值(long),返回long。
  • incrByFloat(String key,double increment)    //double型

 

  • decr(String key)   //-1
  • decrBy(String key,long  decrement)    //-decrement

没有decrByFloat()方法。

 

key、value对支持2种数据类型:

  • String、String,键和值都用String
  • byte[]、byte[],键和值都用byte[],二进制数据。

上面的方法都是操作String、String类型的键值对,byte[]、byte[]类型的键值对也有同样的方法。

 

 

 

 

6、操作hash

操作hash的方法都带有前缀h。

  • hset(String key,String field, String value)    //设置一个字段
  • hsetnx(String key,  String field,  String value)
  • hset(String   key,Map<String ,String>  hash)

 

  • 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)    //删除该字段

 

  • hkeys(String key)   //获取所有的字段名,返回值是Set<String>
  • hvals(String  key)   //获取所有的字段值,返回值是List<String>
  • hlen(String key)   //返回该hash表中字段数,返回值是Long型

 

  • hincrBy(String  key, String  field, long  increment)   //返回操作后的数值,long型
  • hincrByFloat(String key, String field , double  increment)   //double

没有hdecrXxx()方法。

 

 

 

 

7、操作list

  • lpush(String  key, String value1, String  value2, …..)     //在列表头部推入一个或多个元v素。l表示left,左边,即列表的头部。
  • lpushx(String key, String value1, String value2 ,…..)    
  • lpop(String key)   //弹出并返回列表的第一个元素,会从列表中移除该元素

 

  • rpush(String key, String value1, String value2, ….)   //在列表尾部推入一个或多个元素
  • rpushx(String key, String value1, String value2, ….) 
  • rpop(String key)   //弹出并返回列表的最后一个元素

 

  • lindex(String key, long index)   //返回该位置上的元素,String类型。
  • linsert(String key,ListPosition  position, String value1, String value2)   //在value1的前面/后面插入value2。第二个参数是常量,可用的值: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 value)   //修改该位置上的元素值。index位置上要已有元素。
  • lrem(String key, long count, String value)   //从列表中移除count个值是value的元素
  • ltrim(String key, long startIndex, long  endIndex)   //修剪列表,只保留[startIndex, endIndex]上的元素,其余删除。返回String类型的操作结果,“OK”表示操作成功。

 

 

 

 

8、操作set

  • sadd(String key, String value1, String value2, ….)   //添加一个或多个元素
  • srem(String key, String value1, String value2, …)    //移除一个或多个元素
  • scard(String  key)   //返回集合中的元素个数,long

 

  • smembers(String key)   //返回集合中所有的元素,Set<String>
  • sismember(String key, String element)   //集合中是否有该元素,boolean

 

  • spop(String key)   //随机弹出一个元素,String。pop操作均会移除该元素。
  • spop(String key, long count)   //随机弹出count个元素,Set<String>。因为set是无序的,所以是随机弹出。

 

  • 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]区间上的元素个数
  • zcount(String key, String startElement, String  endElement)   //返回[startElement, endElement]上的元素个数。元素根据score排序,是有顺序的。

 

  • zrank(String key, String element)   //返回值是value的元素个数。有序,元素可重复。
  • zincrby(String key, double increment, String element)    //返回操作后的值,double

 

  • zinter(String destKey, String…keys)    //交集
  • zunion(String destKey,String…keys)   //并集

 

  • zrangeByXxx()  系列方法      //返回该某个区间上的所有元素,Set<String>
  • zrevrangeXxx()  系列方法   //先反序排列,再返回某个区间上的所有元素,Set<String>
  • zremrangeByXxx()  系列方法   //删除某个区间上的所有元素

 

 

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

 

 

 

 

使用示例

1、简单测试

1  Jedis jedis=new Jedis("127.0.0.1");
2         jedis.auth("abc");
3         if (jedis.ping().equals("PONG")){  //连接成功
4             jedis.mset("name","张三","age","20");
5             System.out.println(jedis.get("name"));  //张三
6             System.out.println(jedis.get("age"));   //20
7             jedis.close();
8         }

 

 

 

 

2、迭代数据库中所有的key 

 1 Jedis jedis=new Jedis("127.0.0.1");
 2         jedis.auth("abc");
 3         if (jedis.ping().equals("PONG")){  //连接成功
 4             jedis.flushAll();  //清除其他数据
 5             jedis.mset("name","张三","age","20");
 6 
 7             Set<String> keys=jedis.keys("*");
 8             Iterator<String> iterator=keys.iterator();
 9 
10             String key=null;
11             while (iterator.hasNext()){
12                 key=iterator.next();
13                 System.out.println(key+":"+jedis.get(key));   //如果value不是String类型,此句代码会报错,所以之前flushAll()清空了数据库,保证value都是String类型
14             }
15             
16             jedis.close();

 

 

 

 

 

3、迭代hash、list、set、sorted set

 1 Jedis jedis=new Jedis("127.0.0.1");
 2         jedis.auth("abc");
 3         if (jedis.ping().equals("PONG")){  //连接成功
 4             jedis.lpush("students","张三","李四","王五");
 5 
 6             List<String> list=jedis.lrange("students",0,-1);
 7             Iterator<String> iterator=list.iterator();
 8 
 9             while (iterator.hasNext()){
10                 System.out.println(iterator.next());  //王五、李四、张三
11             }
12 
13             jedis.close();
14         }

 

点赞