redis杂记(二) --jedis

来源:互联网 发布:淘宝耳机店推荐 编辑:程序博客网 时间:2024/06/05 07:21

1、jedis

在java中操作数据库redis


2、环境

首先要导入JAR:

    jedis-2.9.0.jar     commons-pool2-2.4.2.jar

maven工程下pom.xml文件中配置:

    <!-- redis jar包 -->    <dependency>        <groupId>redis.clients</groupId>        <artifactId>jedis</artifactId>        <version>2.9.0</version>    </dependency>

3、redis操作string

public class RedisTest {    // 日志    private transient static final Logger log = Logger.getLogger(RedisUtils.class);    // 连接    private Jedis jedis;    // 连接服务器(启动)    @Before    public void setUp(){        jedis = new Jedis("127.0.0.1",6379);    }    //########## redis 操作 string ###########//    @Test    public void string(){        //-----添加数据----------          jedis.set("name","Tom");        log.info(jedis.get("name"));        // 拼接        jedis.append("name", " is my lover");         log.info(jedis.get("name"));         //删除某个键        jedis.del("name");          log.info(jedis.get("name"));        //设置多个键值对(key,value,.....)        jedis.mset("name","liuling","age","20","qq","476X-XX777XXX");        //进行加1操作        jedis.incr("age");         log.info(jedis.get("name") + " & " + jedis.get("age") + " & " + jedis.get("qq"));    } }

测试结果:
这里写图片描述


4、redis操作map

    //########## redis 操作 map ###########//    @Test    public void map() {        //-----添加数据----------          Map<String, String> map = new HashMap<String, String>();        map.put("name", "sonny");        map.put("age", "22");        map.put("qq", "123-456XXXX");        // 存map        jedis.hmset("user",map);        // 获取所以的key的value        List<String> rsmap = jedis.hmget("user", "name", "age", "qq");        log.info(rsmap);          //删除map中的某个键值          jedis.hdel("user","age");        log.info(jedis.hmget("user", "age")); //因为删除了,所以返回的是null          log.info(jedis.hlen("user")); //返回key为user的键中存放的值的个数        log.info(jedis.exists("user"));//是否存在key为user的记录 返回true          log.info(jedis.hkeys("user"));//返回map对象中的所有key          log.info(jedis.hvals("user"));//返回map对象中的所有value         Iterator<String> iter=jedis.hkeys("user").iterator();          while (iter.hasNext()){              String key = iter.next();              log.info(key+":"+jedis.hmget("user",key));          }      }

测试结果:
这里写图片描述


5、redis操作list

    //########## redis 操作 list ###########//    @Test      public void list(){          //开始前,先移除所有的内容          jedis.del("framework");          // 第一个是key,第二个是起始位置,第三个是结束位置,jedis.llen获取长度 -1表示取得所有          log.info(jedis.lrange("framework",0,-1));          // 左边添加        jedis.lpush("framework","spring");          jedis.lpush("framework","springMVC");          jedis.lpush("framework","mybatis");          log.info(jedis.lrange("framework",0,-1));          // 左边弹出        jedis.lpop("framework");        log.info(jedis.lrange("framework",0,-1));          // 右边添加        //jedis.del("framework");        jedis.rpush("framework","spring");          jedis.rpush("framework","springMVC");          jedis.rpush("framework","mybatis");         log.info(jedis.lrange("framework",0,-1));        // 右边弹出        jedis.rpop("framework");        log.info(jedis.lrange("framework",0,-1));        // 长度        log.info("长度:"+jedis.llen("framework"));        //获取列表key索引为index的值        log.info(jedis.lindex("framework", 1));        //注意,此处的rpush和lpush是List的操作。是一个双向链表(但从表现来看的)          jedis.del("a");        jedis.rpush("a", "1");          jedis.lpush("a","6");          jedis.lpush("a","3");          jedis.lpush("a","9");         // 输出        log.info(jedis.lrange("a",0,-1));        // 排序(原list不变)        log.info(jedis.sort("a"));        log.info(jedis.lrange("a",0,-1));      }  

测试结果:
这里写图片描述


6、redis操作set

    //########## redis 操作 set ###########//    @Test      public void set(){          //添加          jedis.sadd("people","曹操");          jedis.sadd("people","曹丕");          jedis.sadd("people","曹冲");          jedis.sadd("people","曹植");        jedis.sadd("people","曹昂");          // 输出所有值        log.info(jedis.smembers("people"));        //移除        jedis.srem("people","曹昂");          log.info(jedis.smembers("people"));        //判断 曹冲 是否是user集合的元素          log.info(jedis.sismember("people", "曹冲"));        // 随机获取值        log.info(jedis.srandmember("people"));          //返回集合的元素个数          log.info(jedis.scard("people"));    }  

测试结果:
这里写图片描述


7、redis操作sorted set

    //########## redis 操作 sorted set ###########//    @Test    public void sortSet(){        HashMap<String, Double> map = new HashMap<String, Double>();        map.put("Tom", 67.9);        map.put("jack", 77.5);        map.put("mary", 69.6);        map.put("sunny", 56.5);        map.put("daliy", 78.4);        map.put("ristom", 91.8);        // 添加        jedis.zadd("studentScore", map);        // 获取所有的元素        log.info(jedis.zrange("studentScore", 0, -1));        // 查询key下的某一个元素的score        log.info("元素为mary的成绩:"+jedis.zscore("studentScore", "mary"));        log.info("----- 小到大输出 -----");        // 获取所有的,并且带有scores(默认:小到大输出)        Set<Tuple> scores = jedis.zrangeWithScores("studentScore", 0, -1);        // 遍历输出 元素+score        Iterator<Tuple> iterator = scores.iterator();        while (iterator.hasNext()) {            Tuple tuple = iterator.next();            // 元素 + score            log.info(tuple.getElement()+" : "+tuple.getScore());        }        log.info("----- 大到小输出 -----");        // 获取所有的,并且带有scores(默认:大到小输出)        Set<Tuple> scores2 = jedis.zrevrangeWithScores("studentScore", 0, -1);        Iterator<Tuple> iterator2 = scores2.iterator();        while (iterator2.hasNext()) {            Tuple tuple = iterator2.next();            // 元素 + score            log.info(tuple.getElement()+" : "+tuple.getScore());        }        // 获取 key 中元素个数        log.info("key 中元素个数: "+jedis.zcard("studentScore"));        // 删除key中的元素ristom        jedis.zrem("studentScore", "ristom");        log.info(jedis.zrange("studentScore", 0, -1));        log.info("删除key中ristom元素后的个数: "+jedis.zcard("studentScore"));    }

测试结果:
这里写图片描述


8、使用JedisPool连接池

8.1、工具类

RedisPoolUtil.java

package Java.Redis;import org.apache.log4j.Logger;import redis.clients.jedis.Jedis;import redis.clients.jedis.JedisPool;import redis.clients.jedis.JedisPoolConfig;public class RedisPoolUtil {        //Redis服务器IP        private static String HOST = "127.0.0.1";        //Redis的端口号        private static int PORT = 6379;        //可用连接实例的最大数目,默认值为8;        //如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。        private static int MAX_ACTIVE = 1024;        //控制一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值也是8。        private static int MAX_IDLE = 200;        //等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException;        private static long MAX_WAIT = 10000;        private static int TIMEOUT = 10000;        //在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;        private static boolean TEST_ON_BORROW = true;        // reids连接池        private static JedisPool jedisPool = null;        // 日志        private transient static final Logger log = Logger.getLogger(RedisPoolUtil.class);        /**         * 初始化Redis连接池         */        static {            try {                JedisPoolConfig config = new JedisPoolConfig();                config.setMaxIdle(MAX_IDLE);                config.setMaxTotal(MAX_ACTIVE);                config.setMaxWaitMillis(MAX_WAIT);                config.setTestOnBorrow(TEST_ON_BORROW);               jedisPool = new JedisPool(config, HOST, PORT, TIMEOUT);               log.info("从连接池中获取jedis成功 !!");            } catch (Exception e) {                e.printStackTrace();                log.error("从连接池中获取jedis失败 !!");            }        }        /**         * 获取Jedis实例         * @return         */        public synchronized static Jedis getJedis() {            try {                if (jedisPool != null) {                    Jedis resource = jedisPool.getResource();                    return resource;                } else {                    return null;                }            } catch (Exception e) {                e.printStackTrace();                return null;            }        }}

8.2、测试

    @Test    public void redisPoolTest(){        Jedis jedis = RedisPoolUtil.getJedis();        log.info("redis-ping: "+jedis.ping());        // 输出 redis中的所有key        log.info(jedis.keys("*"));    }

测试结果:
这里写图片描述

原创粉丝点击