Jedis 使用入门


 

     Redis 是一个开源的基于内存的数据结构存储,Redis 是远程字典服务(Remote Dictionary Server )的简写 ,它通常被用作数据库,缓存,消息代理和流引擎。Redis提供的数据结构有string,hashes,lists,sets,sorted sets五种,Redis内置了复制,Lua脚本,LRU驱动事件,事务以及不同级别的磁盘持久方法。并提供了高可用的Redis 哨兵和Redis集群方案
 


1. Jedis是什么


 

      Jedis 是 Redis 官方首选的 Java 客户端开发包, Jedis客户端同时支持单机模式、分片模式、集群模式的访问模式,通过构建Jedis类对象实现单机模式下的数据访问,通过构建ShardedJedis类对象实现分片模式的数据访问,通过构建JedisCluster类对象实现集群模式下的数据访问。 

 


2. Jedis工作模式


  Jedis主要有四大模块, Jedis,JedisCluster,JedisSentinel和ShardedJedis对应了Redis的四种工作模式

序号模块Redis模式
1JedisRedis Standalone(单节点模式)
2JedisClusterRedis Cluster(集群模式)
3JedisSentinelRedis Sentinel(哨兵模式)
4ShardedJedisRedis Sharding(分片模式)

3. Jedis用例


依赖第三方包
jedis-2.7.2.jar 、commons-pool2-2.3.jar

JedisPoolManager用户管理数据库连接,比如获取或者释放

package com.redis.jedis.project.common;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

public class JedisPoolManager {

    //private static String REDISDB_IP = "192.168.62.44";
    private static String REDISDB_IP = "127.0.0.1";
    private static int REDISDB_PORT = 6379;

    private JedisPool jedisPool;

    public JedisPoolManager() {
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(20);
        config.setMaxIdle(5);
        config.setMaxWaitMillis(1000l);
        config.setTestOnBorrow(false);
        jedisPool = new JedisPool(config, REDISDB_IP, REDISDB_PORT);
    }

    public Jedis getJedis() throws Exception {
        try {
            Jedis jedis = jedisPool.getResource();
            return jedis;
        } catch (Exception e) {
            throw e;
        }
    }

    public void releaseJedis(Jedis jedis) {
        if (jedis != null) {
            jedis.close();
        }
    }
}

JedisManager 用户Redis数据库操作,当前只写了增删改查等常用行为

package com.redis.jedis.project.common;

import java.util.Map;

import redis.clients.jedis.Jedis;

public class JedisManager {

    private JedisPoolManager pool = new JedisPoolManager();

    protected void set(int dbIndex, String key, String value, int cashSeconds)
            throws Exception {
        Jedis jedis = null;
        try {
            jedis = pool.getJedis();
            jedis.select(dbIndex);
            jedis.set(key, value);
            if (cashSeconds > 0) {
                jedis.expire(key, cashSeconds);
            }
        } catch (Exception e) {
            throw e;
        } finally {
            pool.releaseJedis(jedis);
        }
    }

    protected String get(int dbIndex, String key) throws Exception {
        Jedis jedis = null;
        try {
            jedis = pool.getJedis();
            jedis.select(dbIndex);
            return jedis.get(key);
        } catch (Exception e) {
            throw e;
        } finally {
            pool.releaseJedis(jedis);
        }
    }

    protected void delete(int dbIndex, String key) throws Exception {
        Jedis jedis = null;
        try {
            jedis = pool.getJedis();
            jedis.select(dbIndex);
            jedis.del(key);
        } catch (Exception e) {
            throw e;
        } finally {
            pool.releaseJedis(jedis);
        }
    }

    protected Map<String, String> hgetAll(int dbIndex, String key)
            throws Exception {
        Jedis jedis = null;
        try {
            jedis = pool.getJedis();
            jedis.select(dbIndex);
            return jedis.hgetAll(key);
        } catch (Exception e) {
            System.out.println(e);
            throw e;
        } finally {
            pool.releaseJedis(jedis);
        }
    }

    protected void hset(int dbIndex, String key, String field, String value)
            throws Exception {
        Jedis jedis = null;
        try {
            jedis = pool.getJedis();
            jedis.select(dbIndex);
            jedis.hset(key, field, value);
        } catch (Exception e) {
            throw e;
        } finally {
            pool.releaseJedis(jedis);
        }
    }

    protected void hmset(int dbIndex, String key, Map<String, String> maps,
            int cacheSeconds) throws Exception {
        Jedis jedis = null;
        try {
            jedis = pool.getJedis();
            jedis.select(dbIndex);
            jedis.hmset(key, maps);
            if (cacheSeconds >= 0) {
                jedis.expire(key, cacheSeconds);
            }
        } catch (Exception e) {
            throw e;
        } finally {
            pool.releaseJedis(jedis);
        }
    }

    protected void del(int dbIndex, String key) throws Exception {
        Jedis jedis = null;
        try {
            jedis = pool.getJedis();
            jedis.select(dbIndex);
            jedis.del(key);
        } catch (Exception e) {
            throw e;
        } finally {
            pool.releaseJedis(jedis);
        }
    }

}

服务接口,实现具体业务,假设是登陆操作

package com.redis.jedis.project.common;
 
 
public interface ILoginCash {
 
    public boolean longin(LoginDTO loginDTO,int cashSeconds) throws Exception;
 
    public LoginDTO getLogInfo(int userId) throws Exception;
 
    public boolean longout(int userId) throws Exception;
 
}
package com.redis.jedis.project.common;
 
import java.io.Serializable;
 
public class LoginDTO implements Serializable {
 
    private static final long serialVersionUID = 1L;
    private int userId;
    private String code;
    private String name;
    private String ip;
 
    public int getUserId() {
        return userId;
    }
 
    public void setUserId(int userId) {
        this.userId = userId;
    }
 
    public String getCode() {
        return code;
    }
 
    public void setCode(String code) {
        this.code = code;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public String getIp() {
        return ip;
    }
 
    public void setIp(String ip) {
        this.ip = ip;
    }
 
}

实现服务接口时,同时继承JedisManager管理类,这样可以使用JedisManager封装的操作数据库的行为,为了更好的方便管理KEY名称,一般Rredis中的KEY 都是由 对象:ID 或者对象:ID:类型 等结构管理的
 

package com.redis.jedis.project.common;
 
import java.util.HashMap;
import java.util.Map;
 
public class LoginCashManager extends JedisManager implements ILoginCash {
 
    private static final String REDIS_USER = "user";
 
    @Override
    public boolean longin(LoginDTO loginDTO, int cashSeconds) throws Exception {
 
        boolean result = false;
        String key = REDIS_USER + ":" + loginDTO.getUserId();
        try {
            Map<String, String> map = new HashMap<String, String>();
            map.put("code", loginDTO.getCode());
            map.put("name", loginDTO.getName());
            map.put("ip", loginDTO.getIp());
            hmset(RedisDBConstants.USER_DB_INDEX, key, map, cashSeconds);
            result = true;
        } catch (Exception e) {
            System.out.println(e);
        }
        return result;
 
    }
 
    @Override
    public LoginDTO getLogInfo(int userId) throws Exception {
        if (userId <= 0) {
            return null;
        }
        String key = REDIS_USER + ":" + userId;
        LoginDTO loginDTO = null;
        try {
            Map<String, String> map = hgetAll(RedisDBConstants.USER_DB_INDEX,
                    key);
            if (map != null && !map.isEmpty()) {
                loginDTO = new LoginDTO();
                loginDTO.setUserId(userId);
                loginDTO.setCode(map.get("code"));
                loginDTO.setName(map.get("name"));
                loginDTO.setIp(map.get("ip"));
            }
        } catch (Exception e) {
            System.out.println(e);
        }
        return loginDTO;
    }
 
    @Override
    public boolean longout(int userId) throws Exception {
        if (userId <= 0) {
            return false;
        }
        String tokenKey = REDIS_USER + ":" + userId;
        boolean result = false;
        try {
            del(RedisDBConstants.USER_DB_INDEX, tokenKey);
            result = true;
        } catch (Exception e) {
            System.out.println(e);
        }
        return result;
 
    }
 
}

Redis默认有16个库,分别由数字 0到15编号,为方便管理,可以通过名称定义的方式以便查找

package com.redis.jedis.project.common;
 
public class RedisDBConstants {
    public static int SYS_DB_INDEX = 0;
    public static int USER_DB_INDEX = 1;
}

测试类

package com.redis.jedis.project.common;
 
 
public class MainTestRedis {
 
    public static void main(String[] args) throws Exception {
         
        LoginCashManager logincash = new LoginCashManager();
        System.out.println("==SAVE NOW==");
        LoginDTO loginDTO = new LoginDTO();
        loginDTO.setUserId(1000);
        loginDTO.setCode("1003");
        loginDTO.setName("LIUY");
        loginDTO.setIp("127.0.0.1");
        logincash.longin(loginDTO,50);
        System.out.println("==SAVE END==");
         
        LoginDTO login =logincash.getLogInfo(1000);
        System.out.println("==GET INFO==");
        System.out.println("id="+login.getUserId());
        System.out.println("code="+login.getCode());
        System.out.println("name="+login.getName());
        System.out.println("loginIP="+login.getIp());
    }
}

打印测试结果

==SAVE NOW==
==SAVE END==
==GET INFO==
id=1000
code=1003
name=LIUY
loginIP=127.0.0.1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
使用JedisJava中存储数据,你需要添加相应的Jedis依赖包,如jedis-2.9.0.jar和commons-pool2-2.4.2。你可以在Maven项目的pom.xml文件中添加以下依赖项: ``` <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> <version>2.4.2</version> </dependency> ``` 配置文件中需要设置Redis服务器的连接参数,如IP地址、端口号、访问密码和超时时间。以下是一个示例配置: ``` # Redis服务器IP redis.ip=169.254.130.122 # Redis服务器端口号 redis.port=6379 # Redis访问密码 redis.passWord=test123 # 与服务器建立连接的超时时间 redis.timeout=3000 ``` 你还需要设置Jedis池的参数,包括最大活跃连接数、最大空闲连接数、等待可用连接的最大时间等。以下是一个示例配置: ``` # Jedis的最大活跃连接数 jedis.pool.maxActive=100 # Jedis最大空闲连接数 jedis.pool.maxIdle=50 # 从池中获取连接的时候,是否进行有效检查 jedis.pool.testOnBorrow=true # 归还连接的时候,是否进行有效检查 jedis.pool.testOnReturn=true ``` 使用Jedis存储数据的一般步骤如下: 1. 创建一个Jedis实例,并根据你的配置参数进行初始化。 2. 使用Jedis实例调用相应的存储方法,如set方法用于存储字符串类型的数据,hset方法用于存储哈希类型的数据等。 3. 关闭Jedis实例,释放资源。 以下是一个简单的示例代码: ``` import redis.clients.jedis.Jedis; public class JedisExample { public static void main(String[] args) { // 创建Jedis实例并进行初始化 Jedis jedis = new Jedis("169.254.130.122", 6379); jedis.auth("test123"); // 存储数据 jedis.set("key", "value"); // 获取数据 String value = jedis.get("key"); System.out.println(value); // 关闭Jedis实例 jedis.close(); } } ``` 这个示例代码演示了如何使用Jedis存储和获取数据。首先,我们创建一个Jedis实例并设置Redis服务器的IP地址和端口号,然后使用auth方法设置访问密码。接下来,我们使用set方法将一个键值对存储到Redis中,并使用get方法获取该键对应的值。最后,我们关闭Jedis实例以释放资源。 请注意,这只是一个简单的示例,你可以根据你的具体需求和业务逻辑进行更多的操作和处理。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [java使用jedis将数据存入redis 步骤 教程](https://blog.csdn.net/qq_26472621/article/details/102695255)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [redis入门存储数据类型及集群搭建,以及java使用jedis操作redis,使用redis做缓存](https://download.csdn.net/download/handsome2013/10556635)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

=PNZ=BeijingL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值