一:非关系型数据库
二:Redis支持的数据类型
- 字符串类型 string(常用:json/xml)(缓存)
- 散列类型 hash(key–value)map
- 列表类型 list
- 集合类型 set
- 有序集合类型 sortedset(排行榜)
三:Redis应用场景
1、缓存(数据查询(高并发以及长时间固定不变的数据),端链接,新闻内容,商品内容等等);–使用最多
2、聊天室的在线好友列表;
3、任务队列;(秒杀,抢购,12306等等)
4、应用排行榜(微波热搜);
5、网站访问统计;
6、数据过期处理(发送验证码);
7、分布式锁;
四:window版Redis的安装与使用
1.window版Redis下载官网
2.window版Redis的目录结构
3.window版的Redis是免安装的,将压缩包解压完成即可使用。
4.window版Redis的启动与关闭(服务端)
①:启动:双击redis-server.exe
②:关闭:Ctrl+C 或者 将服务窗口关闭
5.连接Redis服务(客户端)
①:双击redis-cli.exe文件–命令行工具
②:图形化界面工具
6.图形化软件安装(客户端)–后续使用图形化界面操作
①:名称
②:IP
③:端口号
五:Redis的数据结构
1.Redis是一种高级的Key-Value类型的存储系统,其中key值是字符串类型,value值支持5种常用的数据类型。
六:不同数据类型(增删查命令)
七:通用命令的了解
八:Jedis的基本使用–java语言的客户端
1.jedis是官方首选的java客户端开发包(等同于Redis desktop manager图形化界面客户端–操作命令界面)
2.jedis的增删查方法使用
3.java代码demo实现
九:jedis连接池的了解
1.Jedis实例:
public class StudentService {
StudentDao studentDao = new StudentDao();
/**
* 查询所有学员信息
* @return
*/
public String queryAllStudent() {
//先从redis中获取
Jedis jedis = JedisUtil.getJedis();
long redisBegin = System.currentTimeMillis();
String stusData = jedis.get("stusData");
if(null!=stusData){
long redisEnd = System.currentTimeMillis();
System.out.println("从redis中查询耗时:"+(redisEnd-redisBegin));
}
//从数据库中查询
if (null == stusData) {
long begin = System.currentTimeMillis();
List<Student> studentList = studentDao.queryAll();
long end = System.currentTimeMillis();
System.out.println("从数据库中查询耗时:"+(end-begin));
//将数据转化成json字符串
stusData = JSON.toJSONString(studentList);
//将数据存到redis中
jedis.set("stusData", stusData);
}
//释放资源
jedis.close();
return stusData;
}
}
十:Spring Data Redis(spring封装的Redis)–以后用这个比较方便相对于Jedis–重要
1.Spring Data 为 Redis 提供了一个工具类:RedisTemplate
2.它的用法3步骤:
①:引入依赖
②:yml或者properties中配置配置参数(ip,端口,连接池参数…)
③:注入RedisTemplate对象,以及对象调用存值和取值的方法
3.RedisTemplate里面封装了对于Redis的五种数据结构的各种操作
-
redisTemplate.opsForValue() :操作字符串
-
redisTemplate.opsForHash() :操作hash
-
redisTemplate.opsForList():操作list
-
redisTemplate.opsForSet():操作set
-
redisTemplate.opsForZSet():操作zset
实例:
public void sendCode(String phone) {
// 验证手机号格式
if (!RegexUtils.isPhone(phone)) {
throw new LyException(ExceptionEnum.INVALID_PHONE_NUMBER);
}
// 生成验证码
String code = RandomStringUtils.randomNumeric(6);
// 保存验证码到redis
redisTemplate.opsForValue().set(KEY_PREFIX + phone, code, 1, TimeUnit.MINUTES);
// 发送RabbitMQ消息到ly-sms
Map<String, String> msg = new HashMap<>();
msg.put("phone", phone);
msg.put("code", code);
amqpTemplate.convertAndSend(SMS_EXCHANGE_NAME, VERIFY_CODE_KEY, msg);
}