Redis-Jedis 操作 Redis

Posted MinggeQingchun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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();
            
        
    

以上是关于Redis-Jedis 操作 Redis的主要内容,如果未能解决你的问题,请参考以下文章

Redis-Jedis使用Scan实现redis前缀key查找

字段和字段的参数,查询的13个方法,但标的双下划线外键和多对多操作

阿里云 2.0全新云计算升级,这些标的重点关注

实现访问之侧标的两个大类

推送消息实现icon角标的动态显示

如何从 Gitlab API 获取用户所有已加星标的项目