Redis

一、简介

Jedis是Redis官网推荐的Java连接开发工具,使用Java操作Redis中间件。

二、远程连接Redis

① 修改redis.conf配置文件

[root@cyan ~]# vim redis.conf

将绑定的ip: bind 127.0.0.1注释掉

修改protected-mode属性为no

接着:wq保存退出,然后使用这个conf文件重新启动redis

② 开放 6379 端口号

firewall-cmd --query-port=6379/tcp  // 查看端口号是否已开启

firewall-cmd --permanent --add-port=6379/tcp  // 开启6379端口号

firewall-cmd --reload  // 重启防火墙

三、测试连接

① 导入相关依赖

<dependencies>
    <!--导入Jedis-->
    <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>3.2.0</version>
    </dependency>
    <!--fastjson-->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.62</version>
    </dependency>
</dependencies>

② 编码测试

  • 连接数据库
  • 操作命令
  • 断开连接
public class TestPing {
    public static void main(String[] args) {
        // 1、new Jedis对象,使用远程连接Redis
        Jedis jedis = new Jedis("111.230.195.169", 6379);
        // 2、ping,测试连接
        System.out.println(jedis.ping());
        // 3、断开连接
        jedis.close();
    }
}

输出:

四、常用API

● RedisKey

public class TestKey {
    public static void main(String[] args) {

        Jedis jedis = new Jedis("111.230.195.169", 6379);

        System.out.println("清空数据:" + jedis.flushDB());
        System.out.println("判断某个key-username是否存在:" + jedis.exists("username"));
        System.out.println("新增<'username','cyan'>键值对:" + jedis.set("username", "cyan"));
        System.out.println("新增<'password','12456'>键值对:" + jedis.set("password", "123456"));
        System.out.println("新增<'password','12456'>键值对:" + jedis.set("password", "123456"));
        System.out.println("系统中所有键如下:");
        Set<String> keys = jedis.keys("*");
        System.out.println(keys);

        System.out.println("删除键password:" + jedis.del("password"));
        System.out.println("判断键password是否存在:" + jedis.exists("password"));
        System.out.println("查看username所存储的值:" + jedis.type("username"));
        System.out.println("随机获取一个key:" + jedis.randomKey());
        System.out.println("重命名key:" + jedis.rename("username", "name"));
        System.out.println("获取改名后的key:" + jedis.get("name"));
        System.out.println("按索引查询:" + jedis.select(0));
        System.out.println("删除当前数据库中所有的key:" + jedis.flushDB());
        System.out.println("返回当前数据库中key的数目:" + jedis.dbSize());
        System.out.println("清空所有数据库:" + jedis.flushAll());

    }
}
View Code

● String

public class TestString {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("111.230.195.169", 6379);

        jedis.flushDB();
        System.out.println("===========================增加数据===========================");
        System.out.println(jedis.set("key1", "value1"));
        System.out.println(jedis.set("key2", "value2"));
        System.out.println(jedis.set("key3", "value3"));
        System.out.println("删除键key2:" + jedis.del("key2"));
        System.out.println("获取键key2:" + jedis.get("key2"));
        System.out.println("修改键key1:" + jedis.set("key1", "value1Change"));
        System.out.println("获取key1的值:" + jedis.get("key1"));
        System.out.println("在key3后面追加值::" + jedis.append("key3", "End"));
        System.out.println("key3的值:" + jedis.get("key3"));
        System.out.println("增加多个键值对:" + jedis.mset("key01", "value01", "key02", "value02", "key03", "value03", "key04", "value04"));
        System.out.println("获取多个键值对:" + jedis.mget("key1", "key2", "key3"));
        System.out.println("获取多个键值对:" + jedis.mget("key1", "key2", "key3", "key4"));
        System.out.println("删除多个键值对:" + jedis.del("key1", "key2"));
        System.out.println("获取多个键值对:" + jedis.mget("key1", "key2", "key3"));

        jedis.flushDB();
        System.out.println("===========================新增键值对防止覆盖原值===========================");
        System.out.println(jedis.setnx("key1", "value1"));
        System.out.println(jedis.setnx("key2", "value2"));
        System.out.println(jedis.setnx("key2", "value2-new"));
        System.out.println(jedis.get("key1"));
        System.out.println(jedis.get("key2"));

        System.out.println("===========================新增键值对并设置有效时间===========================");
        System.out.println(jedis.setex("key3", 2, "value3"));
        System.out.println(jedis.get("key3"));
        try {
            TimeUnit.SECONDS.sleep(3);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(jedis.get("key3"));

        System.out.println("================获取原值,更新为新值================");
        System.out.println(jedis.getSet("key2", "key2GetSet"));
        System.out.println(jedis.get("key2"));

        System.out.println("获取key2的值的子串:" + jedis.getrange("key2", 2, 4));
    }
}
View Code

List、Set、Hash、Zset。所有的api命令,就是Linux的指令,一个都没有变化!

● 事务

public class TestTX {
    public static void main(String[] args) {

        Jedis jedis = new Jedis("111.230.195.169", 6379);

        jedis.flushDB();
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("hello", "world");
        jsonObject.put("name", "kuangshen");
        // 开启事务
        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(); // 关闭连接
        }
    }
}
原文地址:https://www.cnblogs.com/Dm920/p/12881637.html