redis杂记(二) --jedis

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("*"));
    }

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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

天涯共明月

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

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

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

打赏作者

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

抵扣说明:

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

余额充值