Java中使用Jedis操作redis

来源:互联网 发布:linux 一键脚本ssr 编辑:程序博客网 时间:2024/06/06 06:35

一、下载jar包

可以在MAVEN仓库中下载所需的jar包
http://mvnrepository.com/artifact/redis.clients/jedis这是路径
如果需要使用jedis连接池的话需要commons-pool2,这个是Apache开发的
我是从http://www.mvnjar.com/中下载的,可以在这里下载到源码包,对于一些比较喜欢看源码的小伙伴比较有用

二、操作

public void stringTest() {        Jedis jedis = JedisUtil.getInstance().getJedis();        try {            // 设置指定 key 的值            jedis.set("strTest", "String");            // 获取指定 key 的值            System.out.println(jedis.get("strTest"));            // 将给定 key 的值设为 value ,并返回 key 的旧值(old value)            System.out.println(jedis.getSet("strTest", "Test"));            // 获取所有(一个或多个)给定 key 的值。            System.out.println(jedis.mget("email", "strTest"));            // 对某个键设置过期时间            jedis.expire("strTest", 15);        } catch (Exception e) {            e.printStackTrace();        } finally {            // 关闭连接            JedisUtil.getInstance().closeJedis(jedis);        }    }
public void listTest() {        Jedis jedis = JedisUtil.getInstance().getJedis();        try {            // 设置指定 key 的值,将一个或多个值插入到列表头部(没有就创建一个key,有则添加在头部)             jedis.lpush("strList", "String1", "String2", "String3","String4", "String5");            // 获取指定列表长度            System.out.println(jedis.llen("strList"));            // 获取指定 ListKey的值,从开始start开始,向后面取出stop个值            System.out.println(jedis.lrange("strList", 1, 5));            // 若超出则没有数据,不会报错            System.out.println(jedis.lrange("strList", 15, 5));            // 取出第几个索引值(索引从0开始)            System.out.println(jedis.lindex("strList", 0));            // 为第几个索引赋值(替换)            jedis.lset("strList", 3, "three");            // 超出索引的会报错(索引从0开始)            jedis.lset("strList", 9, "ten");// ERR index out of range            // 移出并获取列表的第一个元素            System.out.println(jedis.lpop("strList"));            // 移出并获取列表的最后一个元素            System.out.println(jedis.rpop("strList"));            // 在键的尾部插入值,并返回键的长度            System.out.println(jedis.rpush("strList", "may", "be"));        } catch (Exception e) {            e.printStackTrace();        } finally {            // 关闭连接            JedisUtil.getInstance().closeJedis(jedis);        }    }

还有一个map的就不贴出来了,小伙伴自己去研究
下面是Redis连接池:

package com.jie.util;import java.util.HashMap;import java.util.Map;import org.apache.commons.pool2.impl.GenericObjectPoolConfig;import redis.clients.jedis.Jedis;import redis.clients.jedis.JedisPool;import redis.clients.jedis.JedisPoolConfig;import redis.clients.jedis.Protocol;public class JedisUtil {    /**     * 私有构造器     */    private JedisUtil() {    }    /**     * 全局的Map     */    private static Map<String, JedisPool> maps = new HashMap<String, JedisPool>();    /**     * @Description 获取连接池     * @auth weishujie     * @creattime 2017年8月18日上午10:52:30     * @param ip     * @param port     * @return     */    private static JedisPool getPool(String ip, int port) {        String key = ip + ":" + port;// jedis的地址        JedisPool pool = null;        if (!maps.containsKey(key)) {            JedisPoolConfig config = new JedisPoolConfig();            config.setMaxTotal(GenericObjectPoolConfig.DEFAULT_MAX_TOTAL);            config.setMaxIdle(GenericObjectPoolConfig.DEFAULT_MAX_IDLE);            config.setMaxWaitMillis(GenericObjectPoolConfig.DEFAULT_MAX_WAIT_MILLIS);            config.setTestOnBorrow(true);            config.setTestOnReturn(true);            try {                pool = new JedisPool(config, ip, port);                maps.put(key, pool);            } catch (Exception e) {                e.printStackTrace();            }        } else {            pool = maps.get(key);        }        return pool;    }    /**     * @Description 类级的内部类,也就是静态的成员式内部类,该内部类的实例与外部类的实例      *                  没有绑定关系,而且只有被调用到时才会装载,从而实现了延迟加载。      * @author weishujie     * @data 2017年8月18日上午11:54:30     */    private static class RedisUtilHolder {        /**          * 静态初始化器,由JVM来保证线程安全          */        private static JedisUtil instance = new JedisUtil();    }    /**      * 当getInstance方法第一次被调用的时候,它第一次读取      * RedisUtilHolder.instance,导致RedisUtilHolder类得到初始化;而这个类在装载并被初始化的时候,会初始化它的静态域,     * 从而创建RedisUtil的实例,由于是静态的域,因此只会在虚拟机装载类的时候初始化一次,并由虚拟机来保证它的线程安全性。      * 这个模式的优势在于,getInstance方法并没有被同步,并且只是执行一个域的访问,因此延迟初始化并没有增加任何访问成本。      */    public static JedisUtil getInstance() {        return RedisUtilHolder.instance;    }    /**     * @Description 获取Jedis     * @auth weishujie     * @creattime 2017年8月18日下午12:06:51     * @param ip     * @param port     * @return     */    public Jedis getJedis(String ip, int port) {        Jedis jedis = null;        int count = 0;        do {            jedis = getPool(ip, port).getResource();            count++;        } while (jedis == null && count < 3);// 重启三次,三次获取不到就结束        return jedis;    }    /**     * @Description 获取默认的Jedis     * @auth weishujie     * @creattime 2017年8月18日下午2:34:09     * @return     */    public Jedis getJedis() {        return getJedis(Protocol.DEFAULT_HOST, Protocol.DEFAULT_PORT);    }    /**     * @Description 释放Jdeis到连接池     * @auth weishujie     * @creattime 2017年8月18日下午2:16:55     * @param jedis     * @param ip     * @param port     */    @SuppressWarnings("deprecation")    public void closeJedis(Jedis jedis, String ip, int port) {        if (jedis != null) {            getPool(ip, port).returnResource(jedis);        }    }    /**     * @Description 直接关闭连接     * @auth weishujie     * @creattime 2017年8月18日下午2:36:57     * @param jedis     */    public void closeJedis(Jedis jedis) {        if (jedis != null) {            jedis.close();        }    }}
原创粉丝点击