✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。
个人主页:Java Fans的博客
个人信条:不迁怒,不贰过。小知识,大智慧。
当前专栏:SpringBoot 框架从入门到精通
✨特色专栏:国学周更-心性养成之路
本文内容:SpringBoot 项目整合 Redis 教程详解

文章目录

    • Redis 的优势
    • Redis 安装
    • Redis 数据类型
      • 1.String(字符串)
      • 2.Hash(哈希)
      • 3.List(列表)
      • 4.Set(集合)
      • 5.ZSet(sorted set:有序集合)
    • SpringBoot 操作 Redis
    • SpringBoot 配置 Redis
    • RedisTemplate 及其相关方法
      • 1.RedisTemplate 介绍
      • 2.Redis 5种数据结构操作
    • Redis 业务实践

Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库.

Redis 与其他 key – value 缓存产品有以下三个特点:

  • Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
  • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
  • Redis支持数据的备份,即master-slave模式的数据备份

Redis 的优势

  • 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s
  • 丰富的数据类型 – Redis支持二进制案例的 String, List, Hash, Set 及 zset数据类型操作。
  • 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
  • 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性
  • Redis 是单线程的,6.0版本开始支持开启多线程。

Redis 安装

下载地址: https://github.com/tporadowski/redis/releases。

解压下载后的压缩文件,解压后文件列表如下:

使用cmd窗口打开Redis

redis-server.exe   redis.windows.conf   #加载配置文件启动 

注:启动之后,不要关闭窗口,关闭窗口服务停止!

安装Redis数据库客户端

库相关指令:

flushdb  清空当前库flushall  清空所有库select   1    切换库

key的相关指令

指令作用语法
del删除一个或多个keydel keyname
exists判断一个或多个key是否存在,多个key时有一个存在则就会返回1exists keyname
expire设置key的生存时间 单位 :秒expire keyname seconds
keys查询所有匹配模式的key ?匹配一个字符 *匹配0-n个字符 [] 满足其中的一个key * key h” /> }}

Redis工具类的封装

/** * Redis 工具类 * @author mosin * date 2021/11/30 * @version 1.0 */@Componentpublic final class RedisUtil {    private RedisUtil(){};    @Autowired    private RedisTemplate<String,String> redisTemplate;    //设置值    public void  setValue(String key,String value){        redisTemplate.opsForValue().set(key, value);    }    // 设置值 同时设置有效时间    public void setValue(String key, String value, Long timeOut, TimeUnit timeUnit){        redisTemplate.opsForValue().setIfAbsent(key, value, timeOut, timeUnit);    }    //设置值 没有则设置 有则不设置    public void  setNx(String key,String value){        redisTemplate.opsForValue().setIfAbsent(key, value);    }    //设置值 没有则设置 同时设置有效时间 有则不设置    public void  setNx(String key,String value,long timeOut,TimeUnit timeUnit){        redisTemplate.opsForValue().setIfAbsent(key, value,timeOut,timeUnit);    }    //删除值    public boolean del(String key){        return redisTemplate.delete(key);    }         //获取值    public String getValue(String key){        return  redisTemplate.opsForValue().get(key);    }}

Redis 业务实践

redis 存储 token,实现非法请求拦截

1.编写拦截器

@Componentpublic class AdminInterceptor implements HandlerInterceptor {    @Autowired    private RedisUtil redisUtil;    @Override    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {        System.out.println("拦截器以拦截请求");        //从请求头中获取token  验证用户是否登录        String token = request.getHeader("token");        System.out.println(token);        String tokenValue = redisUtil.getValue(token);        System.out.println("tokenValue = " + tokenValue);        if(tokenValue!=null){ //用户已登录 放行请求            return  true;        }else{//重定向到登录页面            response.sendRedirect(request.getContextPath()+"/login.jsp");            return false;        }    }}

2.配置拦截器

@Configurationpublic class LoginConfig implements WebMvcConfigurer {    @Autowired    private AdminInterceptor adminInterceptor;    @Override    public void addInterceptors(InterceptorRegistry registry) {        InterceptorRegistration registration = registry.addInterceptor(adminInterceptor);        registration.addPathPatterns("/**");        registration.excludePathPatterns("/user/login","/user/register","/login.jsp");    }}

3.编写统一返回数据格式类

@Data@AllArgsConstructor@NoArgsConstructor@Builderpublic class JsonResult<T> {    private Integer code;    private String msg;    private Long count;    private T data;}

4.编写控制器

@Controller@RequestMapping("/user")public class UserController {    @Autowired    private UserService userService;    @Autowired    private RedisUtil redisUtil;    @ResponseBody    @RequestMapping("/login")    public Object login(User user) throws JsonProcessingException {        User usr = User.builder().id(1).name("admin").password("123456").build();        //获取token  放入redis        String token = UUID.randomUUID().toString().replace("-", "");        //将user 转为json格式放入 redis        ObjectMapper objectMapper = new ObjectMapper();        String s1 = objectMapper.writeValueAsString(usr);        //将 token 和用户信息存入 redis        redisUtil.setValue(token, s1, 2L, TimeUnit.MINUTES);        //将token 存入map集合返回        HashMap<String, String> map = new HashMap<>();        map.put("token", token);        return map;    }    @ResponseBody    @RequestMapping("/register")    public Object register(User user){        HashMap<String, String> map = new HashMap<>();        map.put("msg", "ok");        return map;    }    @ResponseBody    @RequestMapping("/add")    public Object add(User user){        HashMap<String, String> map = new HashMap<>();        map.put("msg", "ok");        return map;    }}

5.编写业务类和Mapper接口

6.使用postman接口测试工具测试接口


  码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识点击关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。

Copyright © maxssl.com 版权所有 浙ICP备2022011180号