Login
网站首页 > 文章中心 > 其它

【进阶篇】Redis实战之Jedis使用技巧详解

作者:小编 更新时间:2023-09-06 23:29:41 浏览量:391人看过

第一段:摘要

在上一篇文章中,我们详细的介绍了 redis 的安装和常见的操作命令,以及可视化工具的介绍.

Jedis

Lettuce

Redisson

废话不多说,直奔主题!

第二段:Jedis

【进阶篇】Redis实战之Jedis使用技巧详解-图1

官方网址如下:

https://github.com/redis/jedis

如何在项目中集成 Jedis 呢?请看下文!

首先创建一个普通的 Maven 项目,然后添加Jedis依赖包!


  redis.clients
  jedis
  ③9.0


然后创建一个简单的测试,即可实现连接!

public class JedisMain {

}
}

对于 Jedis 而言,一旦连接上了 Redis 服务器,剩下的操作就非常容易了,由于 Jedis 中的 API 和 Redis 的命令高度一致,所以,Jedis 中的方法见名知意,直接使用即可.

虽然 redis 服务端是单线程操作,但是在实际项目中,使用 Jedis 对象来操作 redis 时,每次操作都需要新建/关闭 TCP 连接,连接资源开销很高,同时 Jedis 对象的个数不受限制,在极端情况下可能会造成连接泄漏,同时 Jedis 存在多线程不安全的问题.

所以我们需要将 Jedis 交给线程池来管理,使用 Jedis 对象时,从连接池获取 Jedis,使用完成之后,再还给连接池.

在使用之前,需要添加common-pool线程池依赖包!


org.apache.commons
commons-pool2
2.11.1


创建一个简单的使用线程池测试用例.

public class JedisPoolMain {

}
}

在实际的使用过程中,我们常常会这样来初始化线程池JedisPool,详细代码如下:

public class RedisPoolUtils {

}

}

简单测试

public static void main(String[] args) throws InterruptedException {
System.out.println("新增<'username','xmr'>的键值对:"+jedis.set("username", "xmr"));
System.out.println("新增<'password','password'>的键值对:"+jedis.set("password", "123"));
Set keys = jedis.keys("*");
RedisPoolUtils.close(jedis);
}

运行结果如下:

清空数据:OK
判断某个键是否存在:false
新增<'username','xmr'>的键值对:OK
true
新增<'password','password'>的键值对:OK
系统中所有的键如下:[password, username]
删除键password:1
判断键password是否存在:false
设置键username的过期时间为5s:1
查看键username的剩余生存时间:7
移除键username的生存时间:1
查看键username的剩余生存时间:-1
查看键username所存储的值的类型:string

public class RedisClientUtil {

public static List mget(String... keys) {
}
}

public class RedisClientUtil {

public static Set hkeys(String key) {
public static Map hgetAll(String key) {
}
}

public class RedisClientUtil {

public static List lrange(String key, long start, long end) {
}

}

public class RedisClientUtil {

public static Set smembers(String key) {
}

}

public class RedisClientUtil {

public static Set zrevrange(String key, long start, long end) {
public static Set keys(String pattern) {
}

}

第三段:集群配置

在实际的项目生产环境中,redis 通常不是以单台服务实例来运行的,因为一旦服务器挂了,可能所有的下游服务都会受到影响,所以呢为了保障单台服务器即使出现故障也能运行,通常运维组会搭建集群环境,来保证服务高可用.

搭建的方式有两种,哨兵模式和 Cluster 模式.

哨兵模式:对redis服务器进行监控,如果有宕机的,就从备机里面选一个出来作为主机,实现自动切换

Cluster 模式:将数据进行分片存储,避免全部节点数据都一样,浪费空间

哨兵模式简单的说,就是一台主机,一台备机,外加一台监控服务,当监控服务观测到主机已经宕机,就会将备用机切换成主机,以便继续提供服务.

public class RedisPoolUtils {

        Set sentinels = new HashSet<>();

}

为了保证高可用,redis-cluster集群通常会引入主从复制模型,一个主节点对应一个或者多个从节点,当主节点宕机的时候,就会启用从节点.

public class RedisPoolUtils {

        Set nodes = new HashSet<>();
}
}

第四段:小结

优点很突出:

比较全面的提供了 Redis 的操作特性,也就是说你能用 redis 命令操作的,Jedis 包都也给你封装好了,直接使用即可

使用广泛,易上手

当然,缺点也有:

使用阻塞的I/O,且其方法调用都是同步的,程序流需要等到 sockets 处理完 I/O 才能执行,不支持异步

第五段:参考

以上就是土嘎嘎小编为大家整理的【进阶篇】Redis实战之Jedis使用技巧详解相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章