欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

在Java中使用Redis

程序员文章站 2023-08-12 11:32:59
准备工作 1、下载驱动包jedis.jar。 名字很好记,就是把redis的首字母r换成j。 2、在项目中添加jedis.jar Jedis类 在Java中操作Redis使用的是Jedis类。 1、构造函数 Jedis() //使用默认的host、port。host默认为localhost/127. ......

 

准备工作

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         }