redis API介绍
//向redis里存入数据和设置缓存时间
stringRedisTemplate.opsForValue().set("baike", "100", 60 * 10, TimeUnit.SECONDS);
//val做-1操作
stringRedisTemplate.boundValueOps("baike").increment(-1);
//根据key获取缓存中的val
stringRedisTemplate.opsForValue().get("baike")
//val +1
stringRedisTemplate.boundValueOps("baike").increment(1);
//根据key获取过期时间
stringRedisTemplate.getExpire("baike");
//根据key获取过期时间并换算成指定单位
stringRedisTemplate.getExpire("baike",TimeUnit.SECONDS);
//根据key删除缓存
stringRedisTemplate.delete("baike");
//检查key是否存在,返回boolean值
stringRedisTemplate.hasKey("baike");
//向指定key中存放set集合
stringRedisTemplate.opsForSet().add("baike", "1","2","3");
//设置过期时间
stringRedisTemplate.expire("baike",1000 , TimeUnit.MILLISECONDS);
//根据key查看集合中是否存在指定数据
stringRedisTemplate.opsForSet().isMember("baike", "1");
//根据key获取set集合
stringRedisTemplate.opsForSet().members("baike");
//验证有效时间
Long expire = redisTemplate.boundHashOps("baike").getExpire();
System.out.println("redis有效时间:"+expire+"S");
场景:登录接口登录3次后不让其再次去数据库中查询数据,直接返回友好提示,待5分钟后再试
代码实现
@Autowired
private JdbcTemplate jdbcTemplate;
@Autowired
private StringRedisTemplate redisTemplate;
// 验证用户信息
public Object checkUser(String username, String password) {
// 查询登录的错误次数
String value0 = redisTemplate.opsForValue().get(username);
try {
if (value0 != null && Integer.valueOf(value0) > 2) {
// 登录错误次数超过3次后,直接返回错误提示,不走数据库。防止人为错误5分钟key值过期
redisTemplate.opsForValue().set(username, "3", 60 * 5, TimeUnit.SECONDS);
return new RRException(RongRunErrorCodeEnum.LANDED_THREE_ERROR).getCodeMsg();
}
long i = 0;
String sql2 = "select * from user_info where username= ? and password =? ";
String sql3 = "select count(id) as num from user_info where username=? and password=?";
System.err.println("sql3:" + sql3);
List
异常枚举类
package com.cennavi.vehicle_networking_data.utils;
import java.util.HashMap;
import com.alibaba.fastjson.JSONObject;
/**
* @Description: 错误枚举类
* @Param:
* @return:
* @Author: ywj
* @Date: 2019/5/21 0021
*/
public enum RongRunErrorCodeEnum {
/**
* 成功状态码
*/
SUCCESS(0, "成功"),
/**
* 参数为空
*/
PARAM_EMPTY(1, "参数为空"),
/**
* 获取openid为空
*/
OPENID_IS_EMPTY(2, "获取openid为空"),
/**
* 登录失败
*/
LOGIN_FAILED(3, "登录失败"),
/**
* openid未绑定
*/
OPENID_NOT_BIND(4, "openid未绑定"),
/**
* 密码错误
*/
WRONG_PASSWORD(5, "密码错误"),
/**
* 账号不存在
*/
ACCOUNT_NOT_EXIST(6, "帐号不存在"),
/**
* 用户在该系统没有权限
*/
ACCOUN_NO_AUTHORITY(7, "用户在该系统没有权限"),
/**
* base64编码为空
*/
BASE64_IS_EMPTY(8, "base64编码为空"),
/**
* 图片识别类型为空
*/
RECOGNITION_TYPE_EMPTY(9, "图片识别类型为空"),
/**
* 调用接口失败
*/
CALL_INT_FAIL(10, "调用接口失败"),
/**
* 获取权限信息失败
*/
GET_QX_FAIL(11, "获取权限信息失败"),
/**
* 获取信息不存在
*/
PARAM_NOT_EXIST(12, "获取信息不存在"),
/**
* 文件类型异常
*/
FILE_TYPE_ERROT(13, "不是我们想要的文件类型,请按要求重新上传"),
/**
* 包含数据删除异常
*/
CARGROUP_CONTAINS_ERROT(14, "该车组下包含有车辆无法删除"),
/**
*车组 重名异常
*/
CARGROUP_DUPLICATE_NAME(14, "该名称业务组下已存在"),
/**
* 新增绑定异常
*/
VEHICLE_ADD_ERROR(15, "新增成功,该车未绑定无法进行激活操作"),
/**
* 新增绑定异常
*/
VEHICLE_UPDATE_ERROR(16, "修改成功,该车未绑定无法进行激活操作"),
/**
* 新增绑定异常
*/
VEHICLE_ACTIVATION_ERROR(17, "操作失败,含有未绑定的车辆无法激活"),
/**
* 车辆信息重名异常
*/
VEHICLE_DUPLICATE_NAME(18, "该车已存在"),
/**
*车组 重名异常
*/
FENCE_DUPLICATE_NAME(19, "相同业务组下该名称已存在"),
/**
*登陆3次错误
*/
LANDED_THREE_ERROR(20, "您已经登陆错误超过三次,请5分钟后再次登陆谢谢"),
/**
* 系统异常
*/
SYSTEM_ERROR(500, "系统异常");
/**
* 状态码
*/
private Integer code;
/**
* 异常信息
*/
private String msg;
/**
* 异常枚举信息
*
* @param code 状态码
* @param msg 信息
*/
RongRunErrorCodeEnum(Integer code, String msg) {
this.code = code;
this.msg = msg;
}
/**
* 获取状态码
*
* @return
*/
public Integer getCode() {
return code;
}
/**
* 获取信息
*
* @return
*/
public String getMsg() {
return msg;
}
/**
*重写toString方法在控制台显示自定义异常信息
* @return
*/
@Override
public String toString() {
String str="[errorCode:"+this.code+" errorMsg:"+this.msg+"]";
return str;
}
}