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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

=PNZ=BeijingL

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

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

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

打赏作者

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

抵扣说明:

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

余额充值