サイドバーの壁紙
博主头像
tin博主等级

子の曰わく、我れ三人行なえば必ず我が師を得(う)。其の善き者を択びてこれに従う。其の善からざる者にしてこれを改む。

  • 累積執筆 74 記事
  • 累計作成 32 タグ
  • 累計受入 2 コメント

目 次CONTENT

記事目次

UserService.java-\docker_boot\src\main\java\com\cjh\docker\service

tin
tin
2023-03-17 / 0 コメント / 53 ビュー / 376 文字

UserService.java

package com.cjh.docker.service;

import com.cjh.docker.entities.User;
import com.cjh.docker.mapper.UserMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

/**
 * @projectName: docker_boot
 * @package: com.cjh.docker.service
 * @className: UserService
 * @author: tinkouka
 * @date: 2023/2/7 22:48
 * @version: 1.0
 */
@Service
@Slf4j
public class UserService {

    public static final String CACHE_KEY_USER = "user:";

    @Resource
    private UserMapper userMapper;
    @Resource
    private RedisTemplate redisTemplate;

    /**
     * addUser
     * @param user
     */
    public void addUser(User user)
    {
        //1 正常にmysqlにデータを追加
        int i = userMapper.insertSelective(user);

        if(i > 0)
        {
            //2 追加したデータを再検索
            user = userMapper.selectByPrimaryKey(user.getId());
            //3 検索したデータをredisに保存、MySQLとの一貫性を保つ。
            String key = CACHE_KEY_USER+user.getId();
            redisTemplate.opsForValue().set(key,user);
        }
    }

    /**
     * findUserById
     * @param id
     * @return
     */
    public User findUserById(Integer id)
    {
        User user = null;
        String key = CACHE_KEY_USER+id;

        //1 まずredisからデータを検索、ある場合はその結果を返す。ない場合は更にMySQLから検索
        user = (User) redisTemplate.opsForValue().get(key);

        if(user == null)
        {
            //2 redisから見つからない場合、更にMySQLから検索
            user = userMapper.selectByPrimaryKey(id);
            if(user == null)
            {
                //3.1 redis+mysql ともにデータない場合、nullのユーザをそのまま返す
                return user;
            }else{
                //3.2 MySQLから見つかった場合、データをredisに保存
                redisTemplate.opsForValue().set(key,user);
            }
        }
        return user;
    }

    public void deleteUser(Integer id) {
        User user = null;
        user = userMapper.selectByPrimaryKey(id);
        if(user != null){
            userMapper.deleteByPrimaryKey(id);
            redisTemplate.delete(id);
        }
    }

    public void updateUser(User user) {
        if(user != null){
            userMapper.updateByPrimaryKey(user);
            // 更新する際はredis中のデータも合わせて更新
            redisTemplate.opsForValue().set(CACHE_KEY_USER+user.getId(),user);
        }

    }

}