网站建设合同下载,食品包装设计方案,android 登录wordpress,凡客t恤#x1f9d1;#x1f4bb;作者名称#xff1a;DaenCode #x1f3a4;作者简介#xff1a;啥技术都喜欢捣鼓捣鼓#xff0c;喜欢分享技术、经验、生活。 #x1f60e;人生感悟#xff1a;尝尽人生百味#xff0c;方知世间冷暖。 #x1f4d6;所属专栏#xff1a;Re… 作者名称DaenCode 作者简介啥技术都喜欢捣鼓捣鼓喜欢分享技术、经验、生活。 人生感悟尝尽人生百味方知世间冷暖。 所属专栏Redis从头学 文章目录 前言String数据类型分析String类型实战应用场景验证码存储功能场景描述测试效果场景代码 文章浏览量、点赞统计存储JSON格式数据 写在最后 前言 之前的篇章对Redis已经做出了具体介绍并且对其命令的使用也做出了相应的案例。本文就结合String数据类型结构的特性一起探讨其实战中的应用场景。 String数据类型分析
1.底层实现分析其基于SDS数据结构实现。SDS作为一种动态字符串不仅保存了字符串的值还保存了字符串的长度信息这样可以快速获取字符串的长度不用重新计算。 2.空间效率分析Redis的String类型以字节数数组形式存在采用了一些优化策略节省空间。当一个字符串长度较小redis会自动调整SDS的空间大小减少内存浪费。 3.存储位置分析Redis将值存储在内存中读写效率搞笑。此外还提高了大量的基础命令以及批量操作命令提高了数据处理效率。 4.key过期策略通过设置key的过期时间来节省冗余数据造成的空间浪费。
String类型实战应用场景 通过上述对String类型的分析可以结合实际需求选择适合String类型结构的场景比如使用String类型实现验证码存储功能、文章浏览量统计功能、JSON格式热点数据功能等等。 验证码存储功能
场景描述
在用户注册功能中要为用户生成和验证验证码并设置相应的过期时间。此例子为简单演示功能具体生产场景中比这个要复杂很多旨在让大家感受String数据类型在redis中的应用场景。
测试效果
测试描述首先通过获取验证码接口获取验证码之后通过注册接口将用户名、密码、以及输入的验证码输入来验证注册功能。 生成验证码 redis存储查看 进行注册
场景代码
场景:
用户在前台输入用户名、密码点击获取验证码按钮获取验证码(经过以下代码中的/captcha接口)captcha接口中生成验证码并存储到redis中60秒过期时间。用户根据生成的验证码以及输入的用户名、密码进行注册验证验证码是否与redis中获取的一致。若一致再将注册的用户信息存入到数据库否则注册失败。 具体的代码解释可以看相应的代码注释。 RestController
RequestMapping(/api/v1/cap)
public class TestCodeController {Autowiredprivate StringRedisTemplate stringRedisTemplate;PostMapping(/register)public JsonData registerUser(RequestBody UserLogin userLogin) {// 验证验证码是否正确if (validateCaptcha(userLogin.getUsername(),userLogin.getCaptcha())) {//保存到数据库这里就不写了。return JsonData.buildSuccess(注册成功);}return JsonData.buildError(注册失败);}GetMapping(/captcha)public JsonData getCaptcha(String userName) throws IOException {// 生成随机四位0-9的验证码String captcha generateRandomCaptcha();// 将验证码保存在缓存中用于后续验证。key的名称使用register拼接当前用户名String keyregistry:userName;stringRedisTemplate.opsForValue().set(key,captcha,60, TimeUnit.SECONDS);return JsonData.buildSuccess(captcha);}//生成随机数private String generateRandomCaptcha() {Random random new Random();StringBuilder captcha new StringBuilder();for (int i 0; i 4; i) {captcha.append(random.nextInt(10));}return captcha.toString();}private boolean validateCaptcha(String userName,String code) {//通过当前用户名相应的key来获取存储到redis中的code。来进行校验验证码。String codeUserNamestringRedisTemplate.opsForValue().get(registry:userName);if (code.equals(codeUserName)){return true;}return false;}
}文章浏览量、点赞统计
这里由于篇幅原因给出了简单的浏览量、点赞量统计的简单逻辑代码。主要实现是通过其increment这个API实现其key对应的值进行自增1取消点赞则自减1。
//文章浏览量统计public JsonData browCount(int userId,int articleId){//browCountLong browCount0L;browCountstringRedisTemplate.opsForValue().increment(articleId:userId);return JsonData.buildSuccess(browCount);}//点赞量。public JsonData likeCount(int userId,int articleId){//likeCount可以通过文章的getter方法获取当前文章数量Long likeCount0L;likeCountstringRedisTemplate.opsForValue().increment(articleId:userId);return JsonData.buildSuccess(likeCount);}存储JSON格式数据
通过Jackson将数据库查询到的对象转为json格式并存储到redis中。
//存储json格式数据public JsonData detail() throws JsonProcessingException {//假设数据是从数据库查询而来将其存入到redis中User usernew User(1,username,123456);ObjectMapper objectMappernew ObjectMapper();String userJsonobjectMapper.writeValueAsString(user);stringRedisTemplate.opsForValue().set(user.getId():userInfo,userJson);return JsonData.buildSuccess();}写在最后
有关于String数据类型实战场景到此就结束了。功能演示代码的逻辑简单目的是理解String数据类型的应用实际场景的逻辑根据具体需求而定。感谢大家的阅读希望大家在评论区对此部分内容散发讨论便于学到更多的知识。