准备工作
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 }