美文网首页Redis
Redis 笔记(十二)- Jedis 及事务操作

Redis 笔记(十二)- Jedis 及事务操作

作者: yjtuuige | 来源:发表于2021-08-22 12:28 被阅读0次

使用 java 操作 redis

  • jedisredis 官方推荐的 java 连接开发工具。使用 java 操作 redis 的一个中间件,是个 jar 包。

  • 连接测试:
    导入依赖

    <!-- 导入 jedis 包 -->
    <dependencies>
        <!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>3.6.3</version>
        </dependency>
    <!-- 导入 fastjson 包 -->
        <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.78</version>
        </dependency>
    </dependencies>
    

    TestPing.java 进行测试:
    1、连接数据库
    2、操作命令
    3、断开连接

     public static void main(String[] args) {
       //1.创建jedis对象
       Jedis jedis = new Jedis("IP", 6379); //1.redis服务必须关闭防火墙  2.redis服务必须开启远程连接
       jedis.select(0);//选择操作的库默认0号库
       //2.执行相关操作
       //....
       //3.释放资源
       jedis.close();
      } 
    
    //TestPing.java
    package com.demo;
    import redis.clients.jedis.Jedis;
    
    public class TestPing {
      public static void main(String[] args) {
    //        Jedis jedis = new Jedis("127.0.0.1", 6379);
            Jedis jedis = new Jedis("IP", 6379);
    //        jedis.auth("密码");
            String response = jedis.ping();
            System.out.println(response);        // PONG
        }
    }
    

    注意点:redis 配置远程连接
    1、在连接远程服务器时,要提前把安全组的端口开放,需要修改redis 配置文件

    bind 127.0.0.1 把这句注释掉
    2、同时为了安全需要添加验证 requirepass xxx
    3、代码中通过对应的 auth 属性设置密码

    连接成功

常用的 API

  1. 操作 key 相关 API
private Jedis jedis;
@Before
public void before(){
        this.jedis = new Jedis("IP", 6379);
        }
@After
public void after(){
        jedis.close();
        }
//测试key相关
@Test
public void testKeys(){
        //删除一个key
        jedis.del("name");
        //删除多个key
        jedis.del("name","age");
        //判断一个key是否存在exits
        Boolean name = jedis.exists("name");
        System.out.println(name);
        //设置一个key超时时间 expire pexpire
        Long age = jedis.expire("age", 100);
        System.out.println(age);
        //获取一个key超时时间 ttl
        Long age1 = jedis.ttl("newage");
        System.out.println(age1);
        //随机获取一个key
        String s = jedis.randomKey();
        //修改key名称
        jedis.rename("age","newage");
        //查看可以对应值的类型
        String name1 = jedis.type("name");
        System.out.println(name1);
        String maps = jedis.type("maps");
        System.out.println(maps);
        }
  1. 操作 String 相关 API,更多相关命令,查看
//测试String相关
@Test
public void testString(){
        //set
        jedis.set("name","小陈");
        //get
        String s = jedis.get("name");
        System.out.println(s);
        //mset
        jedis.mset("content","好人","address","海淀区");
        //mget
        List<String> mget = jedis.mget("name", "content", "address");
        mget.forEach(v-> System.out.println("v = " + v));
        //getset
        String set = jedis.getSet("name", "小明");
        System.out.println(set);
        //............
        }
  1. 操作 List 相关 API,更多相关命令,查看
//测试List相关
@Test
public void testList(){
        //lpush
        jedis.lpush("names1","张三","王五","赵柳","win7");
        //rpush
        jedis.rpush("names1","xiaomingming");
        //lrange
        List<String> names1 = jedis.lrange("names1", 0, -1);
        names1.forEach(name-> System.out.println("name = " + name));
        //lpop rpop
        String names11 = jedis.lpop("names1");
        System.out.println(names11);
        //llen
        jedis.linsert("lists", BinaryClient.LIST_POSITION.BEFORE,"xiaohei","xiaobai");
        //........
        }
  1. 操作 Set 的相关 API,更多相关命令,查看
//测试SET相关
@Test
public void testSet(){
        //sadd
        jedis.sadd("names","zhangsan","lisi");
        //smembers
        jedis.smembers("names");
        //sismember
        jedis.sismember("names","xiaochen");
        //...
        }
  1. 操作 ZSet 相关 API,更多相关命令,查看
//测试ZSET相关
@Test
public void testZset(){
        //zadd
        jedis.zadd("names",10,"张三");
        //zrange
        jedis.zrange("names",0,-1);
        //zcard
        jedis.zcard("names");
        //zrangeByScore
        jedis.zrangeByScore("names","0","100",0,5);
        //..
        }
  1. 操作 Hash 相关 API,更多相关命令,查看
//测试HASH相关
@Test
public void testHash(){
        //hset
        jedis.hset("maps","name","zhangsan");
        //hget
        jedis.hget("maps","name");
        //hgetall
        jedis.hgetAll("mps");
        //hkeys
        jedis.hkeys("maps");
        //hvals
        jedis.hvals("maps");
        //....
        }
  • jedis 事务操作
// TestTx.java  事务操作练习
package com.demo;

import com.alibaba.fastjson.JSONObject;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Transaction;

public class TestTx {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("IP", 6379);
        jedis.flushDB();
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("hello", "world");
        jsonObject.put("name", "li");
        // 开启事务
        Transaction multi = jedis.multi();
        String result = jsonObject.toJSONString();

        // jedis.watch(result)
        try {
            multi.set("user1", result);
            multi.set("user2", result);
            //  int i =1/0;     // 代码抛出异常,事务执行失败
            multi.exec();       // 执行事务
        } catch (Exception e) {
            multi.discard();        // 放弃事务
            e.printStackTrace();
        } finally {
            System.out.println(jedis.get("user1"));
            System.out.println(jedis.get("user2"));
            jedis.close();      // 关闭链接
        }
    }
}
  • 正常代码显示
  • 异常代码显示

相关文章

网友评论

    本文标题:Redis 笔记(十二)- Jedis 及事务操作

    本文链接:https://www.haomeiwen.com/subject/bihxiltx.html