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

使用 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();      // 关闭链接
        }
    }
}
  • 正常代码显示
  • 异常代码显示
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,284评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,115评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,614评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,671评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,699评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,562评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,309评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,223评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,668评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,859评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,981评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,705评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,310评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,904评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,023评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,146评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,933评论 2 355

推荐阅读更多精彩内容