1、Redis简介
Redis 是由C语言编写,完全开源免费且遵守BSD协议,是一个高性能的key-value非关系型数据库,它有以下三个特点:
- Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据,同时还提供List列表,Set集合,String字符串,Hash散列等数据结构的存储。
- Redis支持数据的备份,即master-slave模式的数据备份。
2、Redis优势
- 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。远高于传统关系型数据库,如Mysql临界值为2000次/s。
- 企业级应用极为广泛,它十分适合存储少、访问量巨大的场景,支持单机+集群使用。
- Redis运行在内存中但是可以持久化到磁盘,在对不同数据集进行高速读写时可以权衡内存。
- 原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
- 丰富的特性 – Redis还支持 publish/subscribe,通知,key 过期等等特性。
3、Redis单机版安装
①下载:我们以Window 下安装为例,Redis项目不正式支持Windows。但是,微软开发并维护了针对Win64的Windows版本,下载并在任意目录解压 Redis-x64-3.2.100.zip。
下载地址:https://github.com/MicrosoftArchive/redis/releases
针对Linux、Ubuntu下安装,请参看https://redis.io/download或者https://www.w3cschool.cn/redis/redis-install.html。
解压后安装目录如下图:
②我们开打redis.windows.conf,修改或添加如下配置:
#允许连接Redis实例地址,默认情况只允许本地连接,将默认注释掉,外网就可以连接Redis了
bind 127.0.0.1
#Redis端口
port 6379
#允许Redis后台启动
deamonizeyes
#表示登录该Redis实例所需要的密码
requirepass 123456
#有了密码登录,就可以关闭保护模式了
protected-mode no
③打开cmd命令进入redis(如E:\javaworkspace\Redis-x64-3.2.100)目录,输入命令启动Redis:redis-server.exe redis.windows.conf。
或者在Redis根目录下创建一个启动Redis.bat,里面代码为redis-server.exe redis.windows.conf。
启动后如下图所示:当前界面不能关闭,关闭后Redis服务终止。
④我们开打一个cmd窗口,进入Redis目录,亲自测试一下,输入代码redis-cli -a 123456进入系统,设置Key为"mykey",Value为"abcd1234",然后我们在读取一下"mykey",将键值取出来。
整个过程如图所示:
⑤至此,单机版Redis安装并启动成功了。
4、Spring-boot整合Redis基础教程(包含Jedis简单使用教程)
①项目创建Spring-boot Redis项目,项目默认使用Redis的工具是Lettuce,但大多数用户还是习惯使用Jedis,因此我们在依赖中排除Lettuce,引入Jedis,依赖情况如下:
<!--默认使用的Redis工具是Lettuce,如果使用Jedis,需要排除Lettuce井引入Jedis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<exclusions>
<exclusion>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 引入jedis-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
②接下来在application.properties中配置Redis连接信息,如下,每个配置均有详细介绍。配置信息会注入到RedisProperties中。Spring-boot默认提供了两个最基本操作Redis的实例,分别是RedisTemplate和StringRedisTemplate,后者通过字符串来进行操作。
#使用Redis库编号,Redis中提供了16个database,编号0~15
spring.redis.database=0
#Redis实例地址
spring.redis.host=127.0.0.1
#Redis端口号
spring.redis.port=6379
#Redis登录密码
spring.redis.password=123456
#Redis连接池最大连接数
spring.redis.jedis.pool.max-active=8
#Redis连接池最大空闲连接数
spring.redis.jedis.pool.max-idle=8
#最大阻塞等待时间,-1没有限制
spring.redis.jedis.pool.max-wait=-1ms
#Redis连接池最小空闲连接数
spring.redis.jedis.pool.min-idle=0
③创建一个BookReis实体类,方便我们测试。该实体类我们继续用id、name、author为字段,分别表示书id,书名,作者。
package springbootlearnBasic.Redis;
import java.io.Serializable;
public class BookRedis implements Serializable {
private Integer id;
private String name;
private String author;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
}
④创建一个RedisController,用来给BookReis实体类赋值/取值,并通过StringRedisTemplate和RedisTemplate来操作Redis库。
ops1.set("name","三国演义")表明向Redis中存储一条记录;ops1.get("name")将之读出来。
ops2.set("book1",book1obj)表明向Redis中存储一个对象;(BookRedis) ops2.get("book1")将之读出来。
package springbootlearnBasic.Redis;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class RedisController {
//注入RedisTemplate,可以用来操作对象Object
@Autowired
RedisTemplate redisTemplate;
//注入StringRedisTemplate,其中的key和value都是字符串String
@Autowired
StringRedisTemplate stringRedisTemplate;
@GetMapping(value = "/redis",produces = "application/json;charset=utf-8")
public String redistest(){
//第一条操作字符串:通过opsForValue、opsForZSet、opsForSet等方法完成Redis库的读写
ValueOperations<String,String> ops1 = stringRedisTemplate.opsForValue();
//赋值key>>name,value>>三国演义
ops1.set("name","三国演义");
//取值key>>name
String name =ops1.get("name");
//第二条操作对象:通过opsForValue、opsForZSet、opsForSet等方法完成Redis库的读写
ValueOperations ops2 =redisTemplate.opsForValue();
//创建一个book1obj对象
BookRedis book1obj = new BookRedis();
book1obj.setId(1);
book1obj.setName("皮皮鲁");
book1obj.setAuthor("郑渊洁");
//给对象赋值key>>book1,value>>book1obj对象
ops2.set("book1",book1obj);
//取值key>>book1
BookRedis book1 =(BookRedis) ops2.get("book1");
return ("第一条记录value为:"+name+",第二个对象value为:"+book1.getName()+book1.getAuthor());
}
}
⑤启动项目,在浏览器中输入http://localhost:8080/redis,可以看到返回结果,同时在Redis库中也有了相应的数据。
我们通过Redis管理工具RDM,也可以看到Redis内部库的结构及数据,如下:
Jedis简单使用教程
①我们创建一个JedisController,熟悉一下jedis的使用,Jedis是 Redis官方首选的Java 客户端开发包,是一个非常小和理智的redisjava客户端,灵活且易于使用,我们在做一些轻量级开发需要使用Redis时,可以选择使用Jedis进行简单的各项操作。
这里我们通过一个姓名以及对应分数实例来进行演示:首先通过jedis来存储相应数据到Redis,然后通过jedis来输出成员、分数以及添加分数、条件查找等操作。
Jedis jedis =new Jedis("127.0.0.1",6379)表示测试jedis通过性。
jedis.auth("123456")表示设置密码,此密码和Redis密码一致。
jedis.ping()表示输出pong则jedis连接成功。
jedis.flushDB()表示清空Redis库,此操作需要谨慎。
package springbootlearnBasic.Redis;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import redis.clients.jedis.Jedis;
import java.util.HashMap;
import java.util.Map;
@RestController
public class JedisController {
@GetMapping(value = "/jedis",produces = "text/plain;charset=utf-8")
public String jedistest(){
//创建一个返回结果集
Map<String,Object> returnmap= new HashMap<>();
//测试jedis通过性
Jedis jedis =new Jedis("127.0.0.1",6379);
//jedis需要重新设置密码否则会报错NOAUTH Authentication required
jedis.auth("123456");
//输出pong则jedis连接成功
returnmap.put("jedis是否连接成功",jedis.ping());
//清空Redis数据库,此操作需要谨慎
jedis.flushDB();
//创建一个姓名及对应分数的map对象
Map<String,Double> map =new HashMap<String,Double>();
map.put("Alan",60.0);
map.put("Jack",70.5);
map.put("Tom",83.0);
//过jedis来存储相应数据到Redis,key>>rank
jedis.zadd("rank", map);
//zrange返回所有成员
returnmap.put("返回所有成员",jedis.zrange("rank", 0, -1));
//zrangeWithScores返回带有分数的所有成员,字符串由ASCII码表示
returnmap.put("返回带有分数的所有成员",jedis.zrangeWithScores("rank", 0, -1));
//zincrby增加成员分数并返回
jedis.zincrby("rank", 0.5, "Alan");
returnmap.put("返回Alan添加0.5后的分数",jedis.zscore("rank", "Alan"));
//zrangeByScore返回分数在60到70之间的成员
returnmap.put("返回分数在60到70之间的成员",jedis.zrangeByScore("rank", 60, 71));
return (returnmap.toString());
}
}
②启动项目,在浏览器中输入http://localhost:8080/jedis,可以看到返回结果,同时在Redis库中也有了相应的数据。
我们通过Redis管理工具RDM,可以看到Jedis构建的Redis内部库的结构及数据,如下:
5、总结
①通过本教程我们了解Redis的特点和优势,它是一个NoSQL非关系型数据库,通过Key-Value进行存储和应用。
②我们在Windows平台搭建并启动了单机版Redis,进行了简单的登录、赋值和取值应用。
③我们通过Spring-boot整合Redis,完成了String和Object赋值取值应用。
④我们通过Jedis完成了简单的Redis库操作,它是非常方便易用的。
至此,我们已经完成了Redis基础入门,可以完成一些轻量级的NoSQL应用了,后续还可以继续学习Redis集群整合方案和配置,实现大并发级别的应用。