数据库Redis的简单实践
前言在进行 Redis 的操作之前,请确保电脑上已经安装了 Redis。
如果还没有安装 Redis 的,请参考这篇博客进行安装 Win10安装Redis
Redis简介
Redis 是一个高性能的 key-value 分布式内存数据库,基于内存运行,并支持持久化的 NoSQL 数据库。
Redis 是运行在内存中的,所以读写速度非常快,因此 Redis 被广泛应用在缓存方向。
Redis的优点:
速度快,因为数据存在内存中
支持丰富的数据类型,支持 String、list、set、sorted set、hash
支持事务,操作都是原子性的
特性丰富,可用于缓存、消息。按 key 设置过期时间,到期自动删除
支持主从复制,进行读写分离
支持数据持久化,支持 AOF、RDB 两种方式
Redis的应用场景:
热点数据的缓存
限时业务的应用
分布式锁
延时操作
分页、模糊查找
······
Redis基本操作命令
http://www.51testing.com/attachments/2020/12/15326825_202012081434061A23o.png
根据前言中的参考博客所述,通过 cmd 打开 redis 服务,可以在命令行中练习以上操作命令,以求掌握,这里就不贴图做演示了。
Java使用Redis
使用IDEA搭建Redis项目
使用 IDEA创建 Redis 项目分为六步:
创建一个新项目
选择“Maven”
填写项目路径
检查项目信息
等待项目构建成功
导入相关依赖
首先,我们打开 IDEA,创建一个新项目。
http://www.51testing.com/attachments/2020/12/15326825_202012081432282ph8E.png
在左侧选择“Maven”,Project SDK选择为自己的 JDK安装目录,勾选“Create form archetype”,选择“quickstart”快速启动的工程,点击 next。
http://www.51testing.com/attachments/2020/12/15326825_202012081432283bD52.png
然后我们填写项目名称,选择自己喜欢的路径,点击 next。
http://www.51testing.com/attachments/2020/12/15326825_202012081432284Othq.png
接着我们要检查项目信息,看看包名什么的是否需要修改。这里一般都是采用默认设置,直接 finish 即可。
http://www.51testing.com/attachments/2020/12/15326825_202012081432285mY4K.png
等待项目加载完成。如果IDEA界面的右下角弹出提示 Maven项目需要导入,选择“Enable Auto-Import”让其自动导入。
http://www.51testing.com/attachments/2020/12/15326825_202012081432286zYPw.png
如果项目加载完成后看到了如下警告,可以忽略不管,这不会影响到项目的使用。
http://www.51testing.com/attachments/2020/12/15326825_202012081432287rAB1.png
项目构建完成,我们打开 pom.xml 文件,导入 redis 的相关依赖。这里导入了 Jedis 的依赖、阿里的一个 json 处理类
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.73</version>
</dependency>
这两个依赖导入完成后,整个项目就搭建完成了,我们可以开始使用了。
使用Jedis进行简单增删改查
Jedis是 Redis 官方推荐的 Java 连接开发工具。对 Jedis的熟练使用可以让我们在 Java 开发中使用好 Redis 中间件。
我们新建一个 util 目录,在目录下新建一个 RedisUtil 工具类,用于获取 Redis 的连接。
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
public class RedisUtil {
//定义连接池和对象
public static JedisPoolConfig poolConfig = new JedisPoolConfig();
public static JedisPool jedisPool = null;
public static Jedis jedis = null;
static {
//简单配置
poolConfig.setMaxIdle(50);//最大空闲数
poolConfig.setMaxTotal(100);//最大连接数
poolConfig.setMaxWaitMillis(20000);//最长等待时间(毫秒)
//进行连接
jedisPool = new JedisPool(poolConfig, "127.0.0.1");
//获取jedis对象
jedis = jedisPool.getResource();
}
}
因为我们是将 redis 装在了本机电脑上,所以配置连接池时直接使用的是 127.0.0.1 ,如果是装在服务器上的,更换为服务器的IP地址。
当然,我们需要通过 cmd 窗口启动 redis 的服务,不然运行 java 代码会报错。
http://www.51testing.com/attachments/2020/12/15326825_202012081432288ILDo.png
接着我们新建一个 run 目录, 在目录下新建 JedisTest 类来进行操作
import org.example.util.RedisUtil;
import redis.clients.jedis.Jedis;
public class JedisTest {
Jedis jedis = RedisUtil.jedis;
//增
public void setKeyValue(String key, String value) {
jedis.set(key, value);
}
//查
public String getKeyValue(String key) {
return jedis.get(key);
}
//删
public void delKey(String key) {
jedis.del(key);
}
//改
public void updateKey(String oldKey, String newKey) {
jedis.rename(oldKey, newKey);
}
public static void main(String[] args) {
JedisTest jedisTest = new JedisTest();
//设置键值对
jedisTest.setKeyValue("test1", "hello");
jedisTest.setKeyValue("test2", "hello2");
//取值
String v1 = jedisTest.getKeyValue("test1");
String v2 = jedisTest.getKeyValue("test2");
System.out.println("test1:"+v1+"\ntest2:"+v2);
System.out.println("\n");
//删除
jedisTest.delKey("test2");
String v3 = jedisTest.getKeyValue("test2");
System.out.println("test2:"+v3);
System.out.println("\n");
//改名
jedisTest.updateKey("test1","mytest");
String v4 = jedisTest.getKeyValue("test1");
String v5 = jedisTest.getKeyValue("mytest");
System.out.println("test1:"+v4+",mytest:"+v5);
}
}
运行 main 方法,可以看到,我们已经成功插入了键值对,删改查也成功实现。
http://www.51testing.com/attachments/2020/12/15326825_2020120814322896ZZF.png
使用Jedis操作对象
我们之前使用的都是 String 类型,现在我们要通过 jedis 来传入对象。
新建一个 pojo 目录,在目录下新建 User 类,实现构造函数和 Get and Set 方法。
public class User {
private String name;
private String school;
private int age;
public User() {
}
public User(String name, String school, int age) {
this.name = name;
this.school = school;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSchool() {
return school;
}
public void setSchool(String school) {
this.school = school;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
在 run 目录中新建一个 UserTest 类,实现对象的存储和查询
import com.alibaba.fastjson.JSON;
import org.example.pojo.User;
import org.example.util.RedisUtil;
import redis.clients.jedis.Jedis;
public class UserTest {
Jedis jedis = RedisUtil.jedis;
//增
public void setObject(String key, Object obj) {
jedis.set(key, JSON.toJSONString(obj));
}
//查
public Object getObject(String key, Class clazz) {
return JSON.parseObject(jedis.get(key), clazz);
}
public static void main(String[] args) {
UserTest userTest = new UserTest();
//设置对象
User user = new User("Bob", "BIT", 20);
//进行存取
userTest.setObject("user", user);
User user2 = (User) userTest.getObject("user", User.class);
System.out.println("name:"+user2.getName());
System.out.println("school:"+user2.getSchool());
System.out.println("age:"+user2.getAge());
}
}
这里因为 value 必须是字符串或者是数组,我们要传入对象的话得通过 JSON 的 toJSonString() 方法把对象转换为字符串。同样地,取出的时候也要使用 parseObject() 方法转换成对象才行。
运行 main 方法,可以看到,我们已经成功实现了对象的存取。
http://www.51testing.com/attachments/2020/12/15326825_2020120814322810akRk.png
页:
[1]