vote-springboot-redis
基本功能:
登录才能投票
一个账号只能投票一次
页面显示候选人票数由高到低
大致思路:
登录才能投票 : String类型 key名=账号,value=密码 通过key获取value 不相等 密码错误,获取的为空,证明账号不存在
一个用户只能投票一次 : 投票成功把账号添加到set里,添加失败证明投过票
页面显示候选人票数由高到低 : 把候选人id和票数 放入zset里,存放LinkedHashMap有序map里
//候选人对象使用hash存的,
//由于页面显示需要票数高的在前面所以,把候选人的id和票数存到了zset里
//账号密码用string 存的
dao层实现类
redisDaoImpl
//都是重写的7个方法,接口没写位置不够
@Autowired
private StringRedisTemplate redisTemplate //当做对redis数据库进行操作的对象
//批量添加数据 windows的cmd 没办法储存中文所以需要用test添加一些候选人
@Override
public void hashMultiSet(String key,Map<String,String>map){
redisTemplate.opsForHash().putAll(key,map); //.forHash对hash类型的操作
}
//通过key获取候选人的属性 对应指令:hgetall key
@Override
public Map<Object, Object> hashGetAll(String key) {
return redisTemplate.opsForHash().entries(key);
}
//往redis里存账号和密码 在test里调用方法储存,也可以敲指令来完成这步
//对应指令:set key value
@Override
public void setString(String key,String value) {
//forValue对string的操作,key账号,value密码
redisTemplate.opsForValue().set(key,value);
}
//通过账号获取密码 对应指令: get key
@Override
public String getString(String key) {
return redisTemplate.opsForValue().get(key);
}
//把账号放入set集合里 用于排重
//投票以后放入成功=投票成功, 放不进去等于投过票了
public Integer setAdd(String key, String value); //账号是value key是集合名字
//给zset集合里的候选人id字段加1 对应指令: zincrby set score value
@Override
public Integer zsetIncrby(String key, String value, Integer score) {
//zset集合 里面放的候选人id 和 票数
//当集合不存在会自动创建集合和字段
//score参数为Integer,方法参数需要Double,Integer会自动转换成Double
//方法返回的参数为Double,需要.intValue方法转换成Integer
return redisTemplate.opsForZSet().incrementScore(key,value,score).intValue()