Redis-Jedis 操作 Redis

在 java 应用中操作 Redis,使用 Redis 官方推荐的 Jedis。Jedis 几乎涵盖了 Redis 的所有 命令。操作 Redis 的命令在 Jedis 中以方法的形式出现

Jedis 源码:https://github.com/xetorthio/jedis

api 文档:https://www.javadoc.io/doc/redis.clients/jedis/latest/index.html

下载:http://search.maven.org/,搜索 jedis

1、创建maven版的java工程

2、添加jedis依赖

        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>3.1.0</version>
        </dependency>

3、Commons Pool连接池

<!--Commons-Pool-->
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-pool2</artifactId>
      <version>2.7.0</version>
    </dependency>

Jedis 对象并不是线程安全的,在多线程下使用同一个 Jedis 对象会出现并发问题。为了避免每次使用 Jedis 对象时都需要重新构建,Jedis 提供了 JedisPool。JedisPool 是基于Commons Pool 2 实现的一个线程安全的连接池

4、创建一个Jedis连接池工具类

public class RedisUtils {

    //JedisPool 有一个就够用了
    private static JedisPool pool;

    //创建线程池
    public static JedisPool open(String host,int port){
        if( pool == null ){
            //设置线程池的参数
            JedisPoolConfig config  = new JedisPoolConfig();
            //设置最大线程数量
            config.setMaxTotal(100);
            //设置空闲数
            config.setMaxIdle(2);
            //设置检查项为true,避免null的情况
            config.setTestOnBorrow(true);
            //创建JeidsPool
            pool = new JedisPool(config,host,port,6000,"123456");

        }
        return pool;
    }


    //关闭线程池,在整个程序结束后执行
    public static void close(){
        if( pool != null){
            pool.close();

        }
    }
}

1、key、String操作

public class RedisStringTest {
    public static void main(String[] args) {
        //创建Jedis对象,通过Jedis的方法,操作Redis数据
        String host = "127.0.0.1";// redis所在的linux的ip
        int port = 6379;// redis运行的端口
        Jedis jedis = new Jedis(host,port);

        //设置访问密码
        jedis.auth("123456");

        //通过jedis的方法操作Redis数据。
        jedis.set("name", "zhangsan");

        //获取数据
        String value = jedis.get("name");
        System.out.println("name :"+value);

        //创建多个key-value
        jedis.mset("user","admin","pwd","123456");

        //获取多个key的值
        List<String> values = jedis.mget("name ","user","pwd");
        //values.forEach(v -> System.out.println(v));
        for(String v: values){
            System.out.println(v);
        }


        //查询id = 1 Student , key == student:1
        if(jedis.exists("student:1")){
            String student = jedis.get("student:1");
        } else {
            //访问数据库, Student对象
            //把Stuent转为json数据
            jedis.set("student:1", "{student}");
        }

    }
}

2、list操作

public class ListRedisTest {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("127.0.0.1",6379);
        String key = "framework";
        jedis.del(key) ;
        jedis.lpush(key , "mybatis");
        jedis.lpush(key, "spring" ,"springmvc");

        List<String> lists= jedis.lrange(key , 0,-1);
        for(String str:lists){
            System.out.println("列表数据:"+str);
        }
        System.out.println("列表长度:"+jedis.llen(key));
        System.out.println("新值后列表长度: " + jedis.linsert(key, ListPosition.AFTER,"spring","jpa"));//从列表右侧插入数据
        jedis.rpush(key , "jsp" , "web");

        System.out.println("列表数据;"+jedis.lrange(key,0,-1));

        //列表数据:[ springmvc,spring,jpa,mybatis,]
        System.out.println("第1个下标的值: "+jedis.lindex(key,1));
        for( long i = 0;i < jedis.llen(key) ;i++){
            System.out.println("弹出值:" + jedis.lpop(key));
        }
    }
}

3、set操作

public class SetRedisTest {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("127.0.0.1",6379);
        String key = "web";

        //添加一个数据
        jedis.sadd(key,"htm1");
        jedis.sadd(key,"css", "javascript");

        Set<String> sets = jedis.smembers(key);
        //返回集合的所有成员
        Iterator<String> iter = sets.iterator();
        while(iter.hasNext()){
            System.out.println("集合Set成员:" + iter.next());
        }
        //判断set集合是否在集合中
        System.out.println("flutter有吗?"+jedis.sismember(key,"flutter"));//false/集合的成员数量
        System.out.println("集合成员个数:"+jedis.scard(key));
    }
}

4、hash操作

public class HashRedisTest {
    public static void main(String[] args) {
        JedisPool pool = RedisUtils.open("127.0.0.1",6379);
        Jedis jedis = null;
        try {
            jedis = pool.getResource();
            //jedis.hmset(String,Map<string,string> )
            Map<String, String> map = new HashMap<String, String>();
            map.put("username", "admin");
            map.put("age", "20");
            jedis.hmset("logininfo", map);

            List<String> fieldValues = jedis.hmget("logininfo", "username");
            for (String fv : fieldValues) {
                System.out.println("field值:" + fv);
            }
            System.out.println("返回boolean,存在username : " + jedis.hexists("logininfo", "username"));//查看所有的field

            Set<String> set = jedis.hkeys("logininfo");
            Iterator<String> iter = set.iterator();
            while (iter.hasNext()) {
                System.out.println("field name: " + iter.next());
                jedis.hdel("logininfo", "age");
                System.out.println("age是: " + jedis.hget("loginfo", "age")); //所有field的数量
                System.out.println("feild个数: " + jedis.hlen("logininfo"));
            }
        }finally{
            if (jedis != null) {
                jedis.close();
            }
        }
    }
}

5、zset操作

public class ZSetRedisTest {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("127.0.0.1",6379);
        String key="salary";
        jedis.del(key);
        jedis.zadd(key,2000D,"John");
        //使用方法: zadd(string key ,Map<string,Double>)添加多个数据
        Map<String,Double> map = new HashMap<String,Double>();
        map.put("Tom",3000D);
        map.put("Marry",6000D);
        map.put( "Rose",3600D);
        map.put("Mike", 5000D);
        //添加多个数据
        jedis.zadd(key, map);

        Set<String> sets=jedis.zrangeByScore(key,"-inf","+inf");
        Iterator<String> iter= sets.iterator();
        while(iter.hasNext()){
            System.out.println("排序小-大的成员:"+iter.next());}
        //带有score的数据
        Set<Tuple> tuple= jedis.zrangeByScoreWithScores(key,"-inf","+inf");
        Iterator<Tuple> iters = tuple.iterator();
        while(iters.hasNext()){
            Tuple tu = iters.next();
            System.out.println("排序小-大的成员:"+tu.getElement()+"#score:"+tu.getScore());
        }
        System.out.println("有序集合成员数量:" + jedis.zcard(key));
    }
}

6、事务操作

public class TransactionRedis {
    public static void main(String[] args) {
        //创建Jedis对象,连接到Redis,需要提供ip和port
        JedisPool pool = RedisUtils.open("127.0.0.1",6379);
        Jedis jedis = null;
        try{
            //开启事务
            Transaction trans = jedis.multi();//添加字符串
            trans.set( "name","zhangsan");//一次设置多个key-value
            trans.mset( "user","admin", "pwd","123456");

            List<Object> resultList = trans.exec();
            //事务的处理结果
            for(Object result : resultList) {
                System.out.println("成功的事务操作: " + result);
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            if (jedis != null) {
                jedis.close();
            }
        }
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值