目录
初识Redis
认识NoSQL
关联的
非关联的编辑
认识Redis
安装Redis
1.1.安装Redis依赖
1.2.上传安装包并解压
该目录以及默认配置到环境变量,因此可以在任意目录下运行这些命令。其中:
图形化工具下载:Releases · lework/RedisDesktopManager-Windows · GitHub
Redis数据结构介绍
String类型
String类型的常见命令
思考:
Redis没有类似MySQL中的Table的概念,我们该如何区分不同类型的key呢?
例如,需要存储用户、商品信息到redis,有一个用户的id是1,有一个商品id恰好也是1
key的机构
Hash类型
Hash类型常见命令
List类型
List常用命令编辑
思考:
1、如何利用List结构模拟一个栈?
2、如何利用List结构模拟一个队列?
3、如何利用List结构模拟一个阻塞队列?
Set类型
Set常见命令编辑
SortedSet类型
SortedSet常见命令编辑
Jedis连接池
SpringDataRedis
SpringDataRedis的序列化方式方案一:
SpringDataRedis的序列化方式方案二:
StringRedisTemplate序列化
初识Redis
认识NoSQL
关联的
非关联的
认识Redis
安装Redis
大多数企业都是基于Linux服务器来部署项目,而且Redis官方也没有提供Windows版本的安装包。因此课程中我们会基于Linux系统来安装Redis.
此处选择的Linux版本为CentOS 7.
Redis的官方网站地址:https://redis.io/
1.1.安装Redis依赖
Redis是基于C语言编写的,因此首先需要安装Redis所需要的gcc依赖:
yum install -y gcc tcl
1.2.上传安装包并解压
然后将提供的Redis安装包上传到虚拟机的任意目录:
例如,我放到了/usr/local/src 目录:(如果上传不了就切换root连接)
解压缩:
tar -xzf redis-6.2.6.tar.gz
进入redis目录:
cd redis-6.2.6
运行编译命令:
make && make install
如果没有出错,应该就安装成功了。
默认安装地方
该目录以及默认配置到环境变量,因此可以在任意目录下运行这些命令。其中:
-
redis-cli:是redis提供的命令行客户端
-
redis-server:是redis的服务端启动脚本
-
redis-sentinel:是redis的哨兵启动脚本
图形化工具下载:Releases · lework/RedisDesktopManager-Windows · GitHub
Redis数据结构介绍
String类型
String类型的常见命令
思考:
Redis没有类似MySQL中的Table的概念,我们该如何区分不同类型的key呢?
例如,需要存储用户、商品信息到redis,有一个用户的id是1,有一个商品id恰好也是1
key的机构
Hash类型
Hash类型常见命令
List类型
List常用命令
思考:
1、如何利用List结构模拟一个栈?
入口和出口在同一边
2、如何利用List结构模拟一个队列?
入口和出口在不同边
3、如何利用List结构模拟一个阻塞队列?
入口和出口在不同边
出队时采用BLPOP或BRPOP
Set类型
Set常见命令
SortedSet类型
SortedSet常见命令
Redis的Java客户端
1、引入依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.7.0</version>
</dependency>
2、建立连接
@BeforeEach
void setUp(){
// 1、建立连接
jedis = new Jedis("虚拟机地址或者localhost", 6379);
// 2、设置密码
jedis.auth("密码");
// 3、选择库
jedis.select(0);
}
3、测试Steing
@Test
void testString(){
// 存入数据
String result = jedis.set("name", "虎哥");
System.out.println("result="+result);
// 获取数据
String name = jedis.get("name");
System.out.println("name = "+name);
}
4、释放资源
@AfterEach
void tearDown(){
if ( jedis!=null ){
jedis.close();
}
}
Jedis连接池
public class JedisConnectionFactory {
private static final JedisPool jedispPool;
static {
//配置连接词
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxTotal(8);
poolConfig.setMaxIdle(8);
poolConfig.setMinIdle(0);
poolConfig.setMaxWaitMillis(1000);
//创建连接池对象
jedispPool = new JedisPool(poolConfig,
"虚拟机或者localhost",6379,1000,"密码");
}
public static Jedis getJedis(){
return jedispPool.getResource();
}
}
SpringDataRedis
1、引入依赖
<!-- redis依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--连接池依赖-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
2、配置yml文件
spring:
redis:
host: 虚拟机或者localhost
port: 6379
password:密码
lettuce:
pool:
max-active: 8
max-idle: 8
min-idle: 0
max-wait: 100ms
3、注入代码
package com.heima;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
@SpringBootTest
class RedisDemoApplicationTests {
@Autowired
private RedisTemplate redisTemplate;
@Test
void contextLoads() {
//写入一条string数据
redisTemplate.opsForValue().set("name","虎哥");
//获取string数据
Object name = redisTemplate.opsForValue().get("name");
System.out.println(name);
}
}
SpringDataRedis的序列化方式方案一:
引入依赖
<!-- JACKSON依赖-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory connectionFactory){
//创建RedisTemplate对象
RedisTemplate<String, Object> template = new RedisTemplate<>();
//设置连接工厂
template.setConnectionFactory(connectionFactory);
//创建JSON序列化工具
GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
//设置key的序列化
template.setKeySerializer(RedisSerializer.string());
template.setHashKeySerializer(RedisSerializer.string());
//设置Value的序列化
template.setValueSerializer(jsonRedisSerializer);
template.setHashValueSerializer(jsonRedisSerializer);
//返回
return template;
}
}
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private String name;
private Integer age;
}
package com.heima;
import com.heima.redis.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
@SpringBootTest
class RedisDemoApplicationTests {
@Autowired
private RedisTemplate<String,Object> redisTemplate;
@Test
void contextLoads() {
//写入一条string数据
redisTemplate.opsForValue().set("name","虎哥");
//获取string数据
Object name = redisTemplate.opsForValue().get("name");
System.out.println(name);
}
@Test
void testSaveUser(){
// 写入数据
redisTemplate.opsForValue().set("user:100",new User("虎哥",31));
// 获取数据
User o = (User)redisTemplate.opsForValue().get("user:100");
System.out.println(" o = "+o);
}
}
SpringDataRedis的序列化方式方案二:
StringRedisTemplate序列化
package com.heima;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.heima.redis.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
@SpringBootTest
class RedisStringTests {
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Test
void contextLoads() {
//写入一条string数据
stringRedisTemplate.opsForValue().set("name","虎哥");
//获取string数据
Object name = stringRedisTemplate.opsForValue().get("name");
System.out.println(name);
}
private static final ObjectMapper mapper = new ObjectMapper();
@Test
void testSaveUser() throws JsonProcessingException {
//创建对象
User user = new User("虎哥", 21);
// 手动序列化
String json = mapper.writeValueAsString(user);
// 导入数据
stringRedisTemplate.opsForValue().set("user:200",json);
// 获取数据
String jsonUser = stringRedisTemplate.opsForValue().get("user:200");
// 手动反序列化
User user1 = mapper.readValue(jsonUser, User.class);
System.out.println("user1 = "+user1);
}
}