一、Jedis介绍
jedis 是 redis推荐的java客户端。通过Jedis我们可以很方便地使用java代码的方式,对redis进行操作。jedis使用起来比较简单,它的操作方法与redis命令相类似。对于初次使用redis的人来说,上手更快,更能适应。本例子使用maven,需要添加如下依赖:
<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.1.0</version>
</dependency>
二、Jedis连接
(1)设置redis允许远程连接(redis.conf),注释掉 bind 参数
(2)使用Jedis连接
/**
* 连接redis
*/
@Before
public void init() {
// 参数为redis的IP地址,端口号
jedis=new Jedis("192.168.147.128",6379);
// 输入密码
// jedis.auth(password)
}
如果出现这个错误说明没有关闭Linux防火墙
关闭linux防火墙
出现这个错误,是说开启了protected mode(保护模式)还是找到配置文件,打开,查看发现真的有这么一个mode把它改成no试试
把protected-mode改为no
然后重启服务,测试成功
三、jedis对key的操作
/**
* Jedis对key的一些操作
*/
@Test
public void keyTest() {
// 确认key是否存在
Boolean exists = jedis.exists("k1");
// 删除一个key
Long del = jedis.del("k1");
// 返回值的类型
String type = jedis.type("k1");
// keys(pattern):返回满足给定pattern的所有key
Set<String> keys = jedis.keys("*");
// 随机返回key空间的一个key
String randomKey = jedis.randomKey();
// rename(oldname, newname):将key由oldname重命名为newname,若newname存在则删除newname表示的key
String rename = jedis.rename("", "");
// dbsize:返回当前数据库中key的数目
Long dbSize = jedis.dbSize();
// expire:设定一个key的活动时间(s)
jedis.expire("", 1000);
// ttl:获得一个key的活动时间
Long ttl = jedis.ttl("");
// select(index):按索引查询
String select = jedis.select(0);
// move(key, dbindex):将当前数据库中的key转移到有dbindex索引的数据库
jedis.move("", 1);
// flushdb:删除当前选择数据库中的所有key
String flushDB = jedis.flushDB();
// flushall:删除所有数据库中的所有key
String flushAll = jedis.flushAll();
}
四、Jedis对String操作的命令
/**
* Jedis对String的操作
*/
@Test
public void stringTest() {
// set(key, value):给数据库中名称为key的string赋予值value
String set = jedis.set("k1", "v1");
// get(key):返回数据库中名称为key的string的value
String string = jedis.get("k1");
// getset(key, value):给名称为key的string赋予上一次的value
String set2 = jedis.getSet("", "");
// mget(key1, key2,…, key N):返回库中多个string(它们的名称为key1,key2…)的value
List<String> mget = jedis.mget("k1", "k2", "k3");
// setnx(key, value):如果不存在名称为key的string,则向库中添加string,名称为key,值为value
Long setnx = jedis.setnx("", "");
// setex(key, time, value):向库中添加string(名称为key,值为value)同时,设定过期时间time(seconds)
String setex = jedis.setex("", 1000, "");
// mset(key1, value1, key2, value2,…key N, value N):同时给多个string赋值,
// 名称为key i的string赋值value i
String mset = jedis.mset("k1", "v1", "k2", "v2");
// msetnx(key1, value1, key2, value2,…key N, value N):如果所有名称为key i的string都不存在,
// 则向库中添加string,名称 key i赋值为value i
Long msetnx = jedis.msetnx("k1", "v1", "k2", "v2");
// incr(key):名称为key的string增1操作
Long incr = jedis.incr("");
// incrby(key, integer):名称为key的string增加integer
Long incrBy = jedis.incrBy("", 10);
// decr(key):名称为key的string减1操作
Long decr = jedis.decr("");
// decrby(key, integer):名称为key的string减少integer
Long decrBy = jedis.decrBy("", 10);
// append(key, value):名称为key的string的值附加value
Long append = jedis.append("", "");
// substr(key, start, end):返回名称为key的string的value的子串
String substr = jedis.substr("", 1, 5);
}
五、Jedis对List操作的命令
/**
* Jedis对list的操作
*/
@Test
public void listTest() {
// rpush(key, value):在名称为key的list尾添加一个值为value的元素
Long rpush = jedis.rpush("l1", "v1", "v2", "v3");
// lpush(key, value):在名称为key的list头添加一个值为value的 元素
Long lpush = jedis.lpush("l1", "v1", "v2", "v3");
// llen(key):返回名称为key的list的长度
Long llen = jedis.llen("");
// lrange(key, start, end):返回名称为key的list中start至end之间的元素(下标从0开始,下同)
List<String> lrange = jedis.lrange("", 0, 2);
// ltrim(key, start, end):截取名称为key的list,保留start至end之间的元素
String ltrim = jedis.ltrim("", 0, 2);
// lindex(key, index):返回名称为key的list中index位置的元素
String lindex = jedis.lindex("", 1);
// lset(key, index, value):给名称为key的list中index位置的元素赋值为value
String lset = jedis.lset("", 0, "");
// lrem(key, count, value): 删除count个名称为key的list中值为value的元素。
// count为0,删除所有值为value的元素,
// count>0 从头至尾删除count个值为value的元素,
// count<0从尾到头删除|count|个值为value的元素。
Long lrem = jedis.lrem("",2,"");
// lpop(key):返回并删除名称为key的list中的首元素
String lpop = jedis.lpop("");
// rpop(key):返回并删除名称为key的list中的尾元素
String rpop = jedis.rpop("");
// blpop(key1, key2,… key N, timeout):lpop 命令的block版本。
// 即当timeout为0时,若遇到名称为key i的list不存在或该list为空,则命令结束。
// 如果 timeout>0,则遇到上述情况时,等待timeout秒,
// 如果问题没有解决,则对key i+1开始的list执行pop操作。
List<String> blpop = jedis.blpop("","","");
// brpop(key1, key2,… key N, timeout):rpop的block版本。参考上一命令。
List<String> brpop = jedis.brpop("","","");
// rpoplpush(srckey, dstkey):返回并删除名称为srckey的list的尾元素,
// 并将该元素添加到名称为dstkey的list的头部
String rpoplpush = jedis.rpoplpush("", "");
}
六、Jedis对Set操作的命令
/**
* Jedis对set的操作
*/
@Test
public void setTest() {
// sadd(key, members):向名称为key的set中添加元素member
Long sadd = jedis.sadd("", "");
// srem(key, member) :删除名称为key的set中的元素member
Long srem = jedis.srem("", "");
// spop(key) :随机返回并删除名称为key的set中一个元素
String spop = jedis.spop("");
// smove(srckey, dstkey, member) :将member元素从名称为srckey的集合
// 移到名称为dstkey的集合
Long smove = jedis.smove("", "", "");
// scard(key) :返回名称为key的set的基数
Long scard = jedis.scard("");
// sismember(key, member) :测试member是否是名称为key的set的元素
Boolean sismember = jedis.sismember("", "");
// sinter(key1, key2,…key N) :求交集
Set<String> sinter = jedis.sinter("", "", "");
// sinterstore(dstkey, key1, key2,…key N) :求交集并将交集保存到dstkey的集合
Long sinterstore = jedis.sinterstore("", "", "");
// sunion(key1, key2,…key N) :求并集
Set<String> sunion = jedis.sunion("", "", "");
// sunionstore(dstkey, key1, key2,…key N) :求并集并将并集保存到dstkey的集合
Long sunionstore = jedis.sunionstore("", "", "");
// sdiff(key1, key2,…key N) :求差集
Set<String> sdiff = jedis.sdiff("", "");
// sdiffstore(dstkey, key1, key2,…key N) :求差集并将差集保存到dstkey的集合
Long sdiffstore = jedis.sdiffstore("", "", "");
// smembers(key) :返回名称为key的set的所有元素
Set<String> smembers = jedis.smembers("");
// srandmember(key) :随机返回名称为key的set的一个元素
String srandmember = jedis.srandmember("");
}
七、Jedis对zset(sorted set)操作的命令
/**
* Jedis对zset的操作
*/
@Test
public void zsetTest() {
// zadd(key, score, member):向名称为key的zset中添加元素member,
// score用于排序。如果该元素已经存在,则根据score更新该元素的顺序。
Long zadd = jedis.zadd("", 1, "");
// zrem(key, members) :删除名称为key的zset中的元素member
Long zrem = jedis.zrem("", "");
// zincrby(key, increment, member) :如果在名称为key的zset中已经存在元素member,
// 则该元素的score增加increment;否则向集合中添加该元素,其score的值为increment
Double zincrby = jedis.zincrby("", 1, "");
// zrank(key, member) :返回名称为key的zset(元素已按score从小到大排序)
// 中member元素的rank(即index,从0开始),若没有member元素,返回“nil”
Long zrank = jedis.zrank("", "");
// zrevrank(key, member) :返回名称为key的zset(元素已按score从大到小排序)
// 中member元素的rank(即index,从0开始),若没有member元素,返回“nil”
Long zrevrank = jedis.zrevrank("", "");
// zrange(key, start, end):返回名称为key的zset(元素已按score从小到大排序)
// 中的index从start到end的所有元素
Set<String> zrange = jedis.zrange("", 0, 1);
// zrevrange(key, start, end):返回名称为key的zset(元素已按score从大到小排序)
// 中的index从start到end的所有元素
Set<String> zrevrange = jedis.zrevrange("", 0, 1);
// zrangebyscore(key, min, max):返回名称为key的zset中score >= min且score <= max的所有元素
Set<String> zrangeByScore = jedis.zrangeByScore("", 10, 20);
// zcard(key):返回名称为key的zset的基数
Long zcard = jedis.zcard("");
// zscore(key, element):返回名称为key的zset中元素element的score
Double zscore = jedis.zscore("", "");
// zremrangebyrank(key, min, max):删除名称为key的zset中rank >= min且rank <= max的所有元素
Long zremrangeByRank = jedis.zremrangeByRank("", 0L, 20L);
// zremrangebyscore(key, min, max) :删除名称为key的zset中score >= min且score <= max的所有元素
Long zremrangeByScore = jedis.zremrangeByScore("", 0D, 20D);
// zunionstore / zinterstore(dstkeyN, key1,…,keyN, WEIGHTS w1,…wN, AGGREGATE SUM|MIN|MAX):
// 对N个zset求并集和交集,并将最后的集合保存在dstkeyN中。对于集合中每一个元素的score,
// 在进行AGGREGATE运算前,都要乘以对于 的WEIGHT参数。如果没有提供WEIGHT,默认为1。
// 默认的AGGREGATE是SUM,即结果集合中元素的score是所有集合对应元素进行 SUM运算的值,
// 而MIN和MAX是指,结果集合中元素的score是所有集合对应元素中最小值和最大值。
Long zunionstore = jedis.zunionstore("dstkeyN", "keyN", "WEIGHT", "SUM");
}
八、Jedis对Hash操作的命令
/**
* Jedis对hash的操作
*/
@Test
public void hashTest() {
// hset(key, field, value):向名称为key的hash中添加元素field<—>value
Long hset = jedis.hset("", "", "");
// hget(key, field):返回名称为key的hash中field对应的value
String hget = jedis.hget("", "");
// hmget(key, field1, …,field N):返回名称为key的hash中field i对应的value
List<String> hmget = jedis.hmget("", "", "");
// hmset(key, hash):向名称为key的hash中添加hash元素
String hmset = jedis.hmset("h1",new HashMap());
// hincrby(key, field, integer):将名称为key的hash中field的value增加integer
Long hincrBy = jedis.hincrBy("", "", 1);
// hexists(key, field):名称为key的hash中是否存在键为field的域
Boolean hexists = jedis.hexists("","");
// hdel(key, fields):删除名称为key的hash中键为field的域
Long hdel = jedis.hdel("", "");
// hlen(key):返回名称为key的hash中元素个数
Long hlen = jedis.hlen("");
// hkeys(key):返回名称为key的hash中所有键
Set<String> hkeys = jedis.hkeys("");
// hvals(key):返回名称为key的hash中所有键对应的value
List<String> hvals = jedis.hvals("");
// hgetall(key):返回名称为key的hash中所有的键(field)及其对应的value
Map<String, String> hgetAll = jedis.hgetAll("");
}