Jedis的使用

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: Jedis的使用

Jedis的使用

需要把jedis依赖的jar包添加到工程中。Maven工程中需要把jedis的坐标添加到pom.xml文件中。

<!-- Redis客户端 -->
      <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>2.7.2 </version>
      </dependency>

连接单机版

第一步:创建一个Jedis对象。需要指定服务端的ip及端口。

第二步:使用Jedis对象操作数据库,每个redis命令对应一个方法。

第三步:打印结果。

第四步:关闭Jedis

@Test
  public void testJedis() throws Exception {
    // 第一步:创建一个Jedis对象。需要指定服务端的ip及端口。
    Jedis jedis = new Jedis("192.168.25.153", 6379);
    // 第二步:使用Jedis对象操作数据库,每个redis命令对应一个方法。
    String result = jedis.get("hello");
    // 第三步:打印结果。
    System.out.println(result);
    // 第四步:关闭Jedis
    jedis.close();
  }

使用连接池连接单机版

第一步:创建一个JedisPool对象。需要指定服务端的ip及端口。

第二步:从JedisPool中获得Jedis对象。

第三步:使用Jedis操作redis服务器。

第四步:操作完毕后关闭jedis对象,连接池回收资源。

第五步:关闭JedisPool对象。

@Test
  public void testJedisPool() throws Exception {
    // 第一步:创建一个JedisPool对象。需要指定服务端的ip及端口。
    JedisPool jedisPool = new JedisPool("192.168.25.153", 6379);
    // 第二步:从JedisPool中获得Jedis对象。
    Jedis jedis = jedisPool.getResource();
    // 第三步:使用Jedis操作redis服务器。
    jedis.set("jedis", "test");
    String result = jedis.get("jedis");
    System.out.println(result);
    // 第四步:操作完毕后关闭jedis对象,连接池回收资源。
    jedis.close();
    // 第五步:关闭JedisPool对象。
    jedisPool.close();
  }

连接集群版

第一步:使用JedisCluster对象。需要一个Set参数。Redis节点的列表。

第二步:直接使用JedisCluster对象操作redis。在系统中单例存在。

第三步:打印结果

第四步:系统关闭前,关闭JedisCluster对象。

@Test
  public void testJedisCluster() throws Exception {
    // 第一步:使用JedisCluster对象。需要一个Set<HostAndPort>参数。Redis节点的列表。
    Set<HostAndPort> nodes = new HashSet<>();
    nodes.add(new HostAndPort("192.168.25.153", 7001));
    nodes.add(new HostAndPort("192.168.25.153", 7002));
    nodes.add(new HostAndPort("192.168.25.153", 7003));
    nodes.add(new HostAndPort("192.168.25.153", 7004));
    nodes.add(new HostAndPort("192.168.25.153", 7005));
    nodes.add(new HostAndPort("192.168.25.153", 7006));
    JedisCluster jedisCluster = new JedisCluster(nodes);
    // 第二步:直接使用JedisCluster对象操作redis。在系统中单例存在。
    jedisCluster.set("hello", "100");
    String result = jedisCluster.get("hello");
    // 第三步:打印结果
    System.out.println(result);
    // 第四步:系统关闭前,关闭JedisCluster对象。
    jedisCluster.close();
  }

因为集群是比较消耗成本的,所以在公司中,一般生产环境使用集群,开发环境使用单机版。

我们在项目整合中都需要有。


可以开发一个接口,有单机版的实现类和集群版的实现类。使用时可以面向接口开发,不影响业务逻辑,使用spring管理实现类,部署时切换实现类即可。


常用的操作redis的方法抽取出一个接口,分别对应单机版和集群版创建两个实现类。

接口封装

常用的操作redis的方法抽取出一个接口,分别对应单机版和集群版创建两个实现类。

接口定义

public interface JedisClient {
  String set(String key, String value);
  String get(String key);
  Boolean exists(String key);
  Long expire(String key, int seconds);
  Long ttl(String key);
  Long incr(String key);
  Long hset(String key, String field, String value);
  String hget(String key, String field);
  Long hdel(String key, String... field);
}

单机版实现类

public class JedisClientPool implements JedisClient {
  @Autowired
  private JedisPool jedisPool;
  @Override
  public String set(String key, String value) {
    Jedis jedis = jedisPool.getResource();
    String result = jedis.set(key, value);
    jedis.close();
    return result;
  }
  @Override
  public String get(String key) {
    Jedis jedis = jedisPool.getResource();
    String result = jedis.get(key);
    jedis.close();
    return result;
  }
  @Override
  public Boolean exists(String key) {
    Jedis jedis = jedisPool.getResource();
    Boolean result = jedis.exists(key);
    jedis.close();
    return result;
  }
  @Override
  public Long expire(String key, int seconds) {
    Jedis jedis = jedisPool.getResource();
    Long result = jedis.expire(key, seconds);
    jedis.close();
    return result;
  }
  @Override
  public Long ttl(String key) {
    Jedis jedis = jedisPool.getResource();
    Long result = jedis.ttl(key);
    jedis.close();
    return result;
  }
  @Override
  public Long incr(String key) {
    Jedis jedis = jedisPool.getResource();
    Long result = jedis.incr(key);
    jedis.close();
    return result;
  }
  @Override
  public Long hset(String key, String field, String value) {
    Jedis jedis = jedisPool.getResource();
    Long result = jedis.hset(key, field, value);
    jedis.close();
    return result;
  }
  @Override
  public String hget(String key, String field) {
    Jedis jedis = jedisPool.getResource();
    String result = jedis.hget(key, field);
    jedis.close();
    return result;
  }
  @Override
  public Long hdel(String key, String... field) {
    Jedis jedis = jedisPool.getResource();
    Long result = jedis.hdel(key, field);
    jedis.close();
    return result;
  }
}

applicationContext-redis.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
  xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans4.2.xsd
  http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context4.2.xsd
  http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx4.2.xsd
  http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util4.2.xsd">
  <!-- 配置单机版的连接 -->
  <bean id="jedisPool" class="redis.clients.jedis.JedisPool">
    <constructor-arg name="host" value="192.168.25.153"></constructor-arg>
    <constructor-arg name="port" value="6379"></constructor-arg>
  </bean>
  <bean id="jedisClientPool" class="com.taotao.jedis.JedisClientPool"/> 
</beans>

集群板实现类

package com.taotao.jedis;
import org.springframework.beans.factory.annotation.Autowired;
import redis.clients.jedis.JedisCluster;
public class JedisClientCluster implements JedisClient {
  @Autowired
  private JedisCluster jedisCluster;
  @Override
  public String set(String key, String value) {
    return jedisCluster.set(key, value);
  }
  @Override
  public String get(String key) {
    return jedisCluster.get(key);
  }
  @Override
  public Boolean exists(String key) {
    return jedisCluster.exists(key);
  }
  @Override
  public Long expire(String key, int seconds) {
    return jedisCluster.expire(key, seconds);
  }
  @Override
  public Long ttl(String key) {
    return jedisCluster.ttl(key);
  }
  @Override
  public Long incr(String key) {
    return jedisCluster.incr(key);
  }
  @Override
  public Long hset(String key, String field, String value) {
    return jedisCluster.hset(key, field, value);
  }
  @Override
  public String hget(String key, String field) {
    return jedisCluster.hget(key, field);
  }
  @Override
  public Long hdel(String key, String... field) {
    return jedisCluster.hdel(key, field);
  }
}

Spring的配置:

添加此配置到applicationContext-redis.xml中:

<!-- 集群版的配置 -->
  <bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">
    <constructor-arg>
      <set>
        <bean class="redis.clients.jedis.HostAndPort">
          <constructor-arg name="host" value="192.168.25.153"></constructor-arg>
          <constructor-arg name="port" value="7001"></constructor-arg>
        </bean>
        <bean class="redis.clients.jedis.HostAndPort">
          <constructor-arg name="host" value="192.168.25.153"></constructor-arg>
          <constructor-arg name="port" value="7002"></constructor-arg>
        </bean>
        <bean class="redis.clients.jedis.HostAndPort">
          <constructor-arg name="host" value="192.168.25.153"></constructor-arg>
          <constructor-arg name="port" value="7003"></constructor-arg>
        </bean>
        <bean class="redis.clients.jedis.HostAndPort">
          <constructor-arg name="host" value="192.168.25.153"></constructor-arg>
          <constructor-arg name="port" value="7004"></constructor-arg>
        </bean>
        <bean class="redis.clients.jedis.HostAndPort">
          <constructor-arg name="host" value="192.168.25.153"></constructor-arg>
          <constructor-arg name="port" value="7005"></constructor-arg>
        </bean>
        <bean class="redis.clients.jedis.HostAndPort">
          <constructor-arg name="host" value="192.168.25.153"></constructor-arg>
          <constructor-arg name="port" value="7006"></constructor-arg>
        </bean>
      </set>
    </constructor-arg>
  </bean>
  <bean id="jedisClientCluster" class="com.taotao.jedis.JedisClientCluster"/>

注意:单机版和集群版不能共存,使用单机版时注释集群版的配置。使用集群版,把单机版注释。

封装代码测试

@Test
  public void testJedisClient() throws Exception {
    //初始化Spring容器
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-*.xml");
    //从容器中获得JedisClient对象
    JedisClient jedisClient = applicationContext.getBean(JedisClient.class);
    jedisClient.set("first", "100");
    String result = jedisClient.get("first");
    System.out.println(result);       
  }







相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
7月前
|
缓存 负载均衡 监控
请列出与jedis相关的10种技术
列出与jedis相关的10种技术
178 0
|
5月前
|
NoSQL Java Redis
|
7月前
|
存储 NoSQL Java
Jedis
Jedis
66 0
|
缓存 Dart NoSQL
Jedis和RedisTemplate 1
Jedis和RedisTemplate
124 0
|
7月前
|
NoSQL Java Redis
|
JavaScript NoSQL Java
18Redis - Jedis介绍
18Redis - Jedis介绍
38 0
|
缓存 Dart Java
Jedis和RedisTemplate 2
Jedis和RedisTemplate
63 0
|
弹性计算 NoSQL 安全
Jedis那么低性能,还在用?赶紧换上 lettuce 吧!
Jedis那么低性能,还在用?赶紧换上 lettuce 吧!
|
NoSQL Java Redis
分享一个基于 Jedis 的 Redis 工具类
分享一个基于 Jedis 的 Redis 工具类
106 0
|
NoSQL Java 中间件
Jedis基础详解
Jedis基础详解
113 0