一、简介
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()); } }
● 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)); } }
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(); // 关闭连接 } } }