首先大家要先了解redis
redis的基础知识
1、redis默认有16个数据库,可以在我们的redis config文件中查找
我们可以通过select index命令来切换数据库
我们登陆redis-cli 客户端 执行 select 1 命令就会切换到这个数据库,默认是使用第一个数据库 下标为0
在相应的数据库下大家可以执行 get set命令来设置 和获取值
keys *
flushdb
flushall
2、reids的默认端口号为什么是6379,这个和一个女明星有关
3、redis 是单线程的
redis为什么读写很快? 官方表示 redis是基于内存操作的,cpu不是redis的性能瓶颈,redis的瓶颈是根据机器的内存和网络贷款来决定的。既然可以使用单线程实现就没必要使用多线程。 redis使用c写的,官方提供的数据为100000+的QPS
4、使用了单线程为什么还这么快呢?
首先大家要了解一下多线程的操作,多线程cpu上下文切换是很耗性能的。所以多线程不一定比单线程效率高。
而redis是将所有数据都放在内存中的,多线程操作由于cpu上下文切换会耗时,对于内存系统来说,如果没有上下文切换效率就是最高的。 所以说 使用单线程去操作效率就是最高的。
多次读写都是在一个cpu上完成的。
linux安装redis
这个过程就省略了,大家按着教程安装就行
如果大家想设置密码的话可以在配置文件中修改密码,找到requirepas 将注释打开,后面加上密码就行
在修改配置 后台运行,将no改为yes就行
切换到bin目录下 启动redis
redis-server redisConfig/redisConfig
我是在阿里云ECS服务器上装的redis 所以用咱们的可视化工具redisMananger链接的时候需要将ECS服务器的防火墙打开才能链接,在安全组中设置
点击确定就能链接了。
然后看一下spring boot中如何操作
在dao中创建redis 操作工具类
内容如下:
package com.dao.redisUtils;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.concurrent.TimeUnit;
/**
* @Auther: Xu
* @Date: 2021/4/14 - 04 - 14 - 10:55
* @Description: com.dao.redisUtils
* @version: 1.0
*/
@Component
public class RedisUtils {
@Resource
private RedisTemplate<String,String> redisTemplate;
/**
* 删除redis数据
* @param key
* @return
*/
public Boolean delData(String key) throws Exception{
Boolean flag = false;
try{
redisTemplate.delete(key);
flag = true;
}catch (Exception e){
}
return flag;
}
/**
* @description 写入键值对
* @param key
* @param value
* @return
*/
public Boolean setData(String key,String value) throws Exception{
Boolean flag = false;
try{
redisTemplate.opsForValue().set(key,value);
// 这里指的是1小时后失效
redisTemplate.expire(key, 1, TimeUnit.HOURS);
flag = true;
}catch (Exception e){
e.printStackTrace();
}
return flag;
}
/**
* 获取字符串
* @param key
* @return
*/
public String getStringData(String key){
String value = redisTemplate.opsForValue().get(key);
return value;
}
}
然后在需要使用redis的地方
@RestController
public class ClassTypeTools {
@Autowired
private ClassTypeService classTypeService;
@Resource
private RedisUtils redisUtils;
/**
* 获取分类列表
* @return
*/
@GetMapping(value = "/getClassType")
public RespData getClassType() throws Exception{
RespData respData = new RespData(RespCode.SUCCESS);
//测试写入redis
Boolean flag = redisUtils.setData("name","写入redis");
if(flag){
System.out.println("写入成功");
}else{
System.out.println("写入失败");
}
String name = redisUtils.getStringData("name");
System.out.println("取出redis中的name"+name);
return respData;
}
}
这样就实现了redis的读写。