美文网首页
分析开源代码之redis

分析开源代码之redis

作者: 只不过33 | 来源:发表于2020-05-24 13:24 被阅读0次

分析一下别人写的开源代码吧

开源代码的地址:https://gitee.com/yidao620/springboot-bucket?_from=gitee_search

package com.xncoding.pos.service;

import com.xncoding.pos.dao.entity.User;

import com.xncoding.pos.dao.repository.UserMapper;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.data.redis.core.RedisTemplate;

import org.springframework.data.redis.core.ValueOperations;

import org.springframework.stereotype.Service;

import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;

import java.util.concurrent.TimeUnit;

@Service

@Transactional

public class UserService {

    private Logger logger = LoggerFactory.getLogger(this.getClass());

    @Resource

    private UserMapper userMapper;

    @Resource

    private RedisTemplate<String, User> redisTemplate;

    /**

    * 创建用户

    * 不会对缓存做任何操作

    */

    public void createUser(User user) {

        logger.info("创建用户start...");

        userMapper.insert(user);

    }

    /**

    * 获取用户信息

    * 如果缓存存在,从缓存中获取城市信息

    * 如果缓存不存在,从 DB 中获取城市信息,然后插入缓存

    *

    * @param id 用户ID

    * @return 用户

    */

    public User getById(int id) {

        logger.info("获取用户start...");

        // 从缓存中获取用户信息

        String key = "user_" + id;

        ValueOperations<String, User> operations = redisTemplate.opsForValue();

        // 缓存存在

        boolean hasKey = redisTemplate.hasKey(key);

        if (hasKey) {

            User user = operations.get(key);

            logger.info("从缓存中获取了用户 id = " + id);

            return user;

        }

        // 缓存不存在,从 DB 中获取

        User user = userMapper.selectById(id);

        // 插入缓存

        operations.set(key, user, 10, TimeUnit.SECONDS);

        return user;

    }

    /**

    * 更新用户

    * 如果缓存存在,删除

    * 如果缓存不存在,不操作

    *

    * @param user 用户

    */

    public void updateUser(User user) {

        logger.info("更新用户start...");

        userMapper.updateById(user);

        int userId = user.getId();

        // 缓存存在,删除缓存

        String key = "user_" + userId;

        boolean hasKey = redisTemplate.hasKey(key);

        if (hasKey) {

            redisTemplate.delete(key);

            logger.info("更新用户时候,从缓存中删除用户 >> " + userId);

        }

    }

    /**

    * 删除用户

    * 如果缓存中存在,删除

    */

    public void deleteById(int id) {

        logger.info("删除用户start...");

        userMapper.deleteById(id);

        // 缓存存在,删除缓存

        String key = "user_" + id;

        boolean hasKey = redisTemplate.hasKey(key);

        if (hasKey) {

            redisTemplate.delete(key);

            logger.info("更新用户时候,从缓存中删除用户 >> " + id);

        }

    }

}

用作者的话进行总结:

    * 创建用户

    * 不会对缓存做任何操作

   

    * 获取用户信息

    * 如果缓存存在,从缓存中获取城市信息

    * 如果缓存不存在,从 DB 中获取城市信息,然后插入缓存

   

    * 更新用户

    * 如果缓存存在,删除

    * 如果缓存不存在,不操作

   

    * 删除用户

    * 如果缓存中存在,删除

    在这段程序中出现了@Service这样的注解。说实话我已经忍它很久了。又是标签。。。让我想起了xml以及html。

      所以对于标签来说,重要的是标签所代表的意思。类似于一个单词的说明。或者用以前教我的一位老师的话来说,这是属于“所见即所得”的东西。

      又是一次考察英文的时候。spring总是喜欢时不时地考察别人的英文。。。发明spring的人一定是个典型的西方人。记忆中是澳大利亚人。。。

       所以当需要的时候可以像查字典一样去查阅 也是可以的。比如参考博文:https://www.cnblogs.com/zq-ding/p/11535728.html

       编程中可以像查字典解决问题的场景还有:java中的类。html和xml中的标签。

正是因为“字”太多。所以总是离不开查阅“字典”。

       再罗列一下吧:

       java中的类

       html中的标签

      xml中的标签

      js中常用的语句

      jquery中常用的语句

      mysql中常用的语句

      orcal中的常用语句

      mongodb中的常用语句

      各种“保姆”的注解

       常用前端框架的常用语句

       常用的linux语句

       常用的maven语句(可选)

       。。。。。。

      可见各种标签、语句充斥着编程的世界。怪不得有人说“我们不生产代码,我们只做代码的搬运工”这句话呢,先不考虑这句话是不是有道理,但是我觉得适当地总结这些常用的东西,或许真的能够提高效率。当然这是个很难说的问题。。。

相关文章

网友评论

      本文标题:分析开源代码之redis

      本文链接:https://www.haomeiwen.com/subject/gsgdahtx.html