Java操作Redis(一)

如何使用Jedis访问Redis数据库

一、Jedis访问单机Redis

  1. 新建java项目
  2. 导入jar包
    在这里插入图片描述
  3. 新建JedisDemo.java,并编写代码
/**
	 * Jedis连接Redis
	 * @return
	 */
	public static Jedis getJedis() {
		Jedis jedis = new Jedis("192.168.43.129",6380 );
		return jedis;
	}
  1. 编写main方法测试
	public static void main(String[] args) {

		Jedis jedis = getJedis();
		System.out.println(jedis.ping());
	}
  1. 运行程序,返回PONG,则连接成功
    在这里插入图片描述
  2. 接下来拿着jedis对象就可以各种操作啦。

二、jedisPool访问Redis

  1. 依然用上面的工程做示范
  2. 内容有点多,在网上找了个挺好的Util类
package cn.cdy.JedisTest;

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

/**
 *  JedisPool连接Redis
 *  @author yutou77
 *  */
public class JedisUtils {

    //服务器IP地址
    private static String ADDR = "192.168.43.129";
    //端口
    private static int PORT = 6380;
    //密码
   // private static String AUTH = "123456";
    //连接实例的最大连接数
    private static int MAX_ACTIVE = 1024;
    //控制一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值也是8。
    private static int MAX_IDLE = 200;
    //等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException
    private static int MAX_WAIT = 10000;
    //连接超时的时间  
    private static int TIMEOUT = 10000;
    // 在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;
    private static boolean TEST_ON_BORROW = true;

    private static JedisPool jedisPool = null;
    //数据库模式是16个数据库 0~15 
    public static final int DEFAULT_DATABASE = 0;
    
    /**
     * 初始化Redis连接池
     */
    static {
        try {
            JedisPoolConfig config = new JedisPoolConfig();
            config.setMaxTotal(MAX_ACTIVE);
            config.setMaxIdle(MAX_IDLE);
            config.setMaxWaitMillis(MAX_WAIT);
            config.setTestOnBorrow(TEST_ON_BORROW);
            //jedisPool = new JedisPool(config, ADDR, PORT, TIMEOUT,AUTH,DEFAULT_DATABASE);
            jedisPool = new JedisPool(config, ADDR, PORT, TIMEOUT);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取Jedis实例
     */
    public synchronized static Jedis getJedis() {
        try {
            if (jedisPool != null) {
                Jedis resource = jedisPool.getResource();
                System.out.println("redis--服务正在运行: "+resource.ping());
                return resource;
            } else {
                return null;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /***
     * 
     * 释放资源
     */
    public static void returnResource(final Jedis jedis) {
            if(jedis != null) {
                jedis.close();
            }
    }
}
  1. 在main方法中直接调用getJedis()方法
	public static void main(String[] args) {
	
		Jedis jedis = JedisUtils.getJedis();
		jedis.ping();
	}
  1. 运行程序,返回PONG则连接成功

三、JedisCluster连接Redis

  1. 新建ClusterDemo类,并编写代码
/**
	 * JedisCluster连接redis
	 * @return
	 */
	public static JedisCluster getCluster() {
		//创建HostAndPort对象
		HostAndPort node1 = new HostAndPort("192.168.43.129",6380);
		HostAndPort node2 = new HostAndPort("192.168.43.129",6381);
		HostAndPort node3 = new HostAndPort("192.168.43.129",6382);
		HostAndPort node4 = new HostAndPort("192.168.43.129",6383);
		HostAndPort node5 = new HostAndPort("192.168.43.129",6384);
		HostAndPort node6 = new HostAndPort("192.168.43.129",6385);
		
		Set<HostAndPort> nodeSet = new HashSet<>();
		nodeSet.add(node1);
		nodeSet.add(node2);
		nodeSet.add(node3);
		nodeSet.add(node4);
		nodeSet.add(node5);
		nodeSet.add(node6);
		
		JedisCluster cluster = new JedisCluster(nodeSet);
		
		return cluster;
	}
  1. 在main方法中调用方法,获取JedisCluster对象
public static void main(String[] args) {
		
		JedisCluster cluster = getCluster();
		cluster.set("hello", "world");
		System.out.println(cluster.get("hello"));
	}
  1. 运行输出
    在这里插入图片描述
*在Git上发现了一个输出单机和集群Redis所有key的util,在此分享一下
package cn.cdy.JedisTest;

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

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;

/**
 * Jedis 工具类
 *
 * @author MENG
 * @version 2017/12/5
 * @see
 */
public class JedisUtil
{
	/**
	 * 获取单机redis上所有key
	 * @param jedis
	 * @return
	 */
    public static List<String> getKeys(Jedis jedis)
    {
    	
    	List<String> list = new ArrayList<>();
        Set<String> set = jedis.keys("*");

        if (set.size() != 0)
        {
            Iterator<String> it = set.iterator();

            while (it.hasNext())
            {
                list.add(it.next()) ;
            }
        }
        else
        {
            System.out.println("数据库暂时没有数据");
        }     
        return list;
    }

    /**
     * 获取redisCluster上所有的key  慎用 数据量大的话会很可怕
     *
     * @param jedisCluster jedisCluster 对象
     * @param pattern
     * @return
     */
    public static TreeSet<String> JedisClusterKeys(JedisCluster jedisCluster, String pattern)
    {

        TreeSet<String> keys = new TreeSet<>();

        Map<String, JedisPool> clusterNodes = jedisCluster.getClusterNodes();

        for(String k : clusterNodes.keySet())
        {
            JedisPool jp = clusterNodes.get(k);
            Jedis connection = jp.getResource();
            try
            {
                keys.addAll(connection.keys(pattern));
            }
            catch(Exception e)
            {
                e.printStackTrace();//  logger
            }
            finally
            {
                connection.close();//用完一定要close这个链接!!!
            }
        }
        return keys;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值