Java开发中的使用redis缓存提升查询效率

枚举类

public enum AppKey {
    /**
     * Redis Key  约定
     */
    USER_SESSION("USER"),
    SYS_MENU("MENU"),
    ALL_SYS_MENU("ALL.MENU"),
    ROLE_MENU("ROLE.MENU"),
    ROLE_PERMIT("ROLE.PERMIT"),
    IM_USER_SIG("IM.USER.SIG"),
    WEB_SITE_INFO("SITE.INFO"),
    TREE_MENU("TREE.MENU");
    private String key;

    AppKey(String key) {
        this.key = key;
    }

    public String getKey(String prefix) {
        return String.format(
                "%s.%s",
                prefix,
                key
                            );
    }
}
@Resource
private RedisTemplate<String, List<SysMenu>> sysMenuRedisTemplate;
@Resource
private RedisTemplate<String, List<TreeMenu>> treeMenuRedisTemplate;
@Resource
private RedisTemplate<String, List<SysRolePermit>> rolePermitTemplate;

查询

public List<SysMenu> allMenus()
    {
      //获取缓存key
        String key = AppKey.ALL_SYS_MENU.getKey(appProperty.getPrefixKey());
        // 先 到缓存中 查
        List<SysMenu> sysMenuList = sysMenuRedisTemplate.opsForValue().get(key);
        if (sysMenuList == null || sysMenuList.size() == 0)
        {
        //再查  数据库
            sysMenuList = sysMenuDao.selectAllMenu();
         //更新缓存
            sysMenuRedisTemplate.opsForValue().set(
                    key,
                    sysMenuList
                                                  );
        }
        return sysMenuList;
    }

修改更新

  /**
     * 存储菜单修改
     *
     * @param sysMenu
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    public Integer saveMenu(SysMenu sysMenu)
    {
    	//获取缓存key
        String key = AppKey.SYS_MENU.getKey(appProperty.getPrefixKey());
        sysMenuRedisTemplate.delete(key);
        key = AppKey.TREE_MENU.getKey(appProperty.getPrefixKey());
        treeMenuRedisTemplate.delete(key);
        key = AppKey.ALL_SYS_MENU.getKey(appProperty.getPrefixKey());
        //删除所有相关缓存
        sysMenuRedisTemplate.delete(key);
        return sysMenuDao.insertSelective(sysMenu);
    }
/**
 * 启用菜单下所有API接口权限
 *
 * @param menuId
 * @param roleId
 * @return
 * @
 */
@Transactional(rollbackFor = Exception.class)
public Integer enableAll(Integer menuId, Integer roleId)
{
    String key = AppKey.ROLE_MENU.getKey(appProperty.getPrefixKey());
    //String.format( "%s.%d", key,roleId )); 自主约定的主键规则
    sysMenuRedisTemplate.delete(String.format(
            "%s.%d",
            key,
            roleId
                                             ));
    key = AppKey.ROLE_PERMIT.getKey(appProperty.getPrefixKey());
    rolePermitTemplate.delete(String.format(
            "%s.%d",
            key,
            roleId
                                           ));
    List<SysMenu> sysMenuList = this.allMenus();
    for (SysMenu sysMenu : sysMenuList)
    {
        if (sysMenu.getSysMenuId().equals(menuId))
        {
            for (SysApi sysApi : sysMenu.getSysApiList())
            {
                SysRolePermit sysRolePermit = new SysRolePermit();
                sysRolePermit.setSysApiId(sysApi.getSysApiId());
                sysRolePermit.setSysMenuId(sysApi.getSysMenuId());
                sysRolePermit.setSysRolePermitStatus(1);
                sysRolePermit.setSysRoleId(roleId);
                sysRolePermitDao.insertSelective(sysRolePermit);
            }
        }
    }
    return 1;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值