Jedis是一款java操作redis数据库的工具,类似于jdbc。
[TOC]
## 1. 使用步骤
1. 导入依赖包
| JAR包 |
| --- |
| [jedis-3.3.0.jar](https://mvnrepository.com/artifact/redis.clients/jedis/3.3.0) <br/>[junit-4.13.jar](https://mvnrepository.com/artifact/junit/junit/4.13):用于测试|
2. 测试连接
先打开redis服务,而且不要关闭打开的窗口
![](https://img.kancloud.cn/5f/70/5f700132a7d13d86de0061d25bbf19ba_890x296.png)
```
package test;
import redis.clients.jedis.Jedis;
public class Test {
@org.junit.Test
public void test() {
// Jedis jedis = new Jedis("localhost", 6379)使用本机端口
Jedis jedis = new Jedis("localhost"); // 不使用本机端口也行
// 如果 Redis 服务设置来密码,需要下面这行,没有就不需要
// jedis.auth("123456");
jedis.set("student", "张三");
// 输出student:张三,连接成功
System.out.println("student:" + jedis.get("student"));
jedis.close();
}
}
```
可以如下获取本机的默认端口。
![](https://img.kancloud.cn/2d/6c/2d6c9a3bc75da3e32f0fa9cf53f9fa3b_892x478.png)
<br/>
## 2. 字符串类型string
```java
@org.junit.Test
public void test() throws InterruptedException {
Jedis jedis = new Jedis("localhost",6379);
// 10秒后过期
jedis.setex("studentName", 10, "张三");
System.out.println("studentName=" + jedis.get("studentName"));
Thread.sleep(10000);
System.out.println("(10秒后)studentName=" + jedis.get("studentName"));
jedis.close();
}
```
![](https://img.kancloud.cn/c8/f9/c8f9a1a5626fe9d62ed9745191062e94_609x188.png)
<br/>
## 3. 哈希类型hash(map格式)
```java
@org.junit.Test
public void test() throws InterruptedException {
Jedis jedis = new Jedis("localhost",6379);
jedis.hset("user", "name", "张三");
jedis.hset("user", "age", "18");
jedis.hset("user", "gender", "male");
System.out.println("姓名:" + jedis.hget("user", "name")
+ "\t年龄:" + jedis.hget("user", "age")
+ "\t性别:" + jedis.hget("user", "gender"));
// 获取全部
Map<String, String> userMap = jedis.hgetAll("user");
System.out.println("---------------");
System.out.println(userMap);
jedis.close();
}
```
![](https://img.kancloud.cn/5f/b3/5fb31c58c3ecc7b3dcbf7b3efa90e09f_680x228.png)
<br/>
## 4. 列表类型list(linkedlist格式)
字符串列表,根据插入顺序排序,可以添加一个元素到列表的头部或者尾部,其实相当于一个队列
```
@org.junit.Test
public void test() throws InterruptedException {
Jedis jedis = new Jedis("localhost",6379);
jedis.lpush("student", "张三", "王五", "李四");
jedis.rpush("student", "zhangsan", "wangwu", "lisi");
// 根据范围取
List<String> studentList = jedis.lrange("student", 0, -1);
System.out.println("--弹出前---" + studentList + "-----");
// 弹出,即删除该元素并返回这个元素
System.out.println("-----左边弹出一个:" + jedis.lpop("student"));
System.out.println("-----右边弹出一个:" + jedis.rpop("student"));
studentList = jedis.lrange("student", 0, -1);
System.out.println("--弹出后---" + studentList + "-----");
jedis.close();
}
```
![](https://img.kancloud.cn/63/7c/637cc0be1b0138b8a5adff2cba3de995_689x232.png)
<br/>
## 5. 集合类型set(hashset)
不允许重复,指的是同一个键如果存储两个相同的值,则前面存的会被覆盖
```
@org.junit.Test
public void test() throws InterruptedException {
Jedis jedis = new Jedis("localhost",6379);
jedis.sadd("language", "Java", "C", "C++", "C#");
// 获取全部数据
Set<String> language = jedis.smembers("language");
System.out.println(language);
jedis.close();
}
```
![](https://img.kancloud.cn/d7/e7/d7e7db9a944b64fc912e2b40c07ffbbd_522x165.png)
<br/>
## 6. 有序集合类型sortedset
不允许重复,有序,根据double类型的分数排序,可以用于实现动态排行榜,比如热搜榜
```
@org.junit.Test
public void test() throws InterruptedException {
Jedis jedis = new Jedis("localhost",6379);
jedis.zadd("sorted", 1.0, "张三");
jedis.zadd("sorted", 3.0, "李四");
jedis.zadd("sorted", 2.0, "王五");
// 根据范围获取
Set<String> sorted = jedis.zrange("sorted", 0, -1);
System.out.println("--根据范围获取---" + sorted);
// 根据分数范围获取
sorted = jedis.zrangeByScore("sorted", 2, 3.0);
System.out.println("--根据分数范围获取---" + sorted);
jedis.close();
}
```
![](https://img.kancloud.cn/4a/94/4a94c7f16830174d95146f9ca0246e88_558x193.png)
- 网络通信
- 网络协议
- 端口和套接字
- TCP网络程序
- UDP网络程序
- 多线程聊天室
- 多线程
- 线程相关概念
- 线程实现方式
- 中断线程
- 线程生命周期
- 线程优先级
- 优先级规则
- 案例演示
- 线程同步机制
- 线程同步机制
- synchronized关键字
- ReentrantLock类
- Condition类
- 监视器概念
- volatile关键字
- final变量
- 死锁
- 线程局部变量
- 读/写锁
- 原子类
- 阻塞队列
- 工作规则
- 案例演示
- 常用阻塞队列
- 线程安全集合
- 高效的映射/集/队列
- 并发集视图
- 写数组的拷贝
- Arrays类的并行数组算法
- 同步包装器
- Callable与Future
- 执行器
- 线程池
- 预定执行
- 控制任务组
- Fork-Join框架
- 同步器
- 同步器
- 信号量
- CountDownLatch类
- CyclicBarrier类
- Exchanger类
- SynchronousQueue类
- 线程与Swing
- Swing与线程问题
- 两个原则
- Swing工作线程
- 单一线程规则
- 文件IO
- File类
- 文件输入输出
- ZIP压缩文件
- 集合
- 集合框架
- 集合接口
- 集合实现类
- 线程安全集合
- 集合算法
- 迭代器
- 集合排序
- JDBC
- JDBC是什么
- JDBC-ODBC桥
- JDBC驱动程序类型
- JDBC常用类与接口
- 数据库操作
- 连接数据库
- 增/删/改/查/预处理
- 事务
- 批处理
- commons-dbutils工具
- 安全问题
- Jedis
- 使用Jedis操作Redis数据库
- JSON转换
- 使用连接池
- 案例
- 单例破坏
- 单例定义
- 单例实现方式
- 懒汉式实现单例
- 饿汉式实现单例
- 单例破坏
- 类的单例破坏
- 枚举的单例破坏
- 克隆
- 克隆是什么
- 浅克隆
- 深克隆
- 注解
- 注解是什么
- 三大注解
- 内置注解
- 元注解
- 自定义注解
- NIO
- 相关概念
- BIO/NIO/AIO
- 多线程编程
- 线程同步
- 线程通信
- NIO
- NIO三大核心组件
- NIO网络编程
- NIO文件读写
- AIO
- Java8新特性
- Lambda表达式
- 方法引用
- 函数式接口
- 默认方法
- 什么是默认方法
- 默认方法语法格式
- 多个同名的默认方法问题
- 静态默认方法
- 默认方法实例
- Stream
- Stream是什么
- Stream示例
- Optional容器
- 新的日期时间API
- Base64
- SPI
- SPI是什么
- SPI与API的区别
- 常见场景
- 使用SPI需遵循的约定
- SPI使用步骤