通过Jedis操作Redis

HeJin大约 4 分钟数据库技术Redis

配置阿里云主机Redis远程访问

设置Redis密码

127.0.0.1:6379> config get requirepass
1) "requirepass"
2) ""
127.0.0.1:6379> config set requirepass ******		# 设置密码
OK
127.0.0.1:6379> config get requirepass
1) "requirepass"
2) "******"
127.0.0.1:6379> config rewrite				# 将连接密码写进当前使用的redis.conf。不然下一次重启会报错
OK

打开redis.conf,注释掉 bind 127.0.0.1

 IF YOU ARE SURE YOU WANT YOUR INSTANCE TO LISTEN TO ALL THE INTERFACES
# JUST COMMENT OUT THE FOLLOWING LINE.
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# bind 127.0.0.1

配置安全组规则,开放6379端口

image-20201229174055985
image-20201229174055985

使用Java来操作Redis

什么是Jedis?是Redis官方推荐的Java连接开发工具。使用Java操作Redis中间件。如果你要使用Java操作Redis,那么一定要对Jedis十分的熟悉。

知其然,知其所以然。

1、导入依赖

<!--导入jedis依赖-->
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.3.0</version>
</dependency>

<!--fastjson-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.73</version>
</dependency>

2、编码测试

  • 连接数据库

  • 操作命令

  • 断开连接

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

        System.out.println(jedis.ping());
    }
}
PONG

Process finished with exit code 0

常用API

对key操作的命令

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

        System.out.println(jedis.ping());
        System.out.println("清空数据:" + jedis.flushDB());
        System.out.println("判断某个键是否存在:" + jedis.exists("username"));
        System.out.println("新增键值对<username,hejin>:" + jedis.set("username", "hejin"));
        System.out.println("新增键值对<password,password>:" + jedis.set("password", "password"));
        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("取出改后的name:" + jedis.get("name"));
        System.out.println("切换到0号数据库:" + jedis.select(0));
        System.out.println("删除当前选择数据库的所有key:" + jedis.flushDB());
        System.out.println("返回当前数据库中key的数目:" + jedis.dbSize());
        System.out.println("删除索引数据库中的所有key:" + jedis.flushAll());

    }
}
PONG
清空数据:OK
判断某个键是否存在:false
新增键值对<username,hejin>OK
新增键值对<password,password>OK
系统中所有的键:
[password, username]
删除键password:1
判断password键是否存在:false
查看键username所存储的值的类型:string
随机返回key空间的一个:username
重命名key:OK
取出改后的name:hejin
切换到0号数据库:OK
删除当前选择数据库的所有key:OK
返回当前数据库中key的数目:0
删除索引数据库中的所有key:OK

Process finished with exit code 0

对String操作的命令

public class TestString {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("127.0.0.1",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", "vlaue1changed"));
        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("key01","key02","key03"));
        System.out.println("获取多个键值对:" + jedis.mget("key01","key02","key03","key04"));
        System.out.println("删除多个键值对:" + jedis.del("key01","key02"));
        System.out.println("获取多个键值对:" + jedis.mget("key01","key02","key03"));

        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));
    }
}
=======增加数据=======
OK
OK
OK
删除键key2:1
获取键key2:null
修改key1:OK
获取key1的值:vlaue1changed
在key3后面加入值:9
key3的值:value3End
增加多个键值对:OK
获取多个键值对:[value01, value02, value03]
获取多个键值对:[value01, value02, value03, value04]
删除多个键值对:2
获取多个键值对:[null, null, value03]
=======新增键值对防止覆盖原先值=======
1
1
0
value1
value2
=======新增键值对并设置有效时间=======
OK
value3
null
=======获取原值,更新为新值=======
value2
key2GetSet
获得key2的值的子串:y2G

Process finished with exit code 0

对List操作的命令

对Set操作的命令

对Hash操作的命令

对Zset操作的命令

在jedis中,这些命令与之前在命令行学习的Redis命令一样。只是变成了一个个的方法。