基于redis实现的投票系统

基于某个活动实现简易的投票系统:

        1、定义一个活动

        2、基于活动开始投票

        3、同一个人只能投一次票

        4、获取投票总数和人数

实现业务代码如下:

1、定义活动和用户id

String activityId = "10001";
String userId1 = "201";
String userId2 = "202";

2、执行投票规则,K为活动id,值为用户id,将具体数据存储到redis的set集合中--由doVote方法实现

 boolean flag = doVote(activityId,userId1);

System.out.println(flag);

这里flag表示投票是否成功,第一投票则为true,第二次投票代表取消,值为false

 执行dovote方法,先获取jedis连接,然后通过jedis.sismember()方法,判断集合是否含有当前用户

   1、检查是否投过票
        Jedis jedis = JedisDataSource.getConnection();
        Boolean flag = jedis.sismember(activityId, userId);//返回值为Boolean类型

//        2、基于检查结果,执行投票或取消投票
        if (flag){
            jedis.srem(activityId, userId);
            return false;
        }
        jedis.sadd(activityId, userId);
        return true;
    }

 查看投票总数,使用的是.scard这个方法,scard这个是获取集合中的个数的意思。

private static Long doCount(String activityId) {
    Jedis jedis = JedisDataSource.getConnection();
    Long scard = jedis.scard(activityId);
    jedis.close();
    return scard;
}

 获取投票的用户,使用的是jedis中的smembers----获取集合中的成员。

private static Set<String> doGetUsers(String activityId) {
    Jedis jedis = JedisDataSource.getConnection();
    Set<String> users = jedis.smembers(activityId);
    jedis.close();
    return users;
}
package com.jt.redis;

import com.jt.JedisDataSource;
import redis.clients.jedis.Jedis;

import java.util.Set;

//基于某个活动实现的简易投票系统
//1、定义一个活动
//2、基于活动开始投票
//3、同一个人只能投一次票,
//4、可以获取投票总数以及人数
public class VoteDemo01 {
    public static void main(String[] args) {
//        1、定义活动,用户id---登录用户
        String activityId = "10001";
        String userId1 = "201";
        String userId2 = "202";
//        2、执行投票规则,key为活动id,值为用户id,将具体数据存储的redis的set集合
       boolean flag =  doVote(activityId,userId1);
        System.out.println(flag);
//        3、获取投票总数
       Long count =  doCount(activityId);
        System.out.println(count);
//        4、获取并输出那些人参与了投票
       Set<String> users =  doGetUsers(activityId);
        System.out.println(users);
    }

    private static Set<String> doGetUsers(String activityId) {
        Jedis jedis = JedisDataSource.getConnection();
        Set<String> users = jedis.smembers(activityId);
        jedis.close();
        return users;
    }

    private static Long doCount(String activityId) {
        Jedis jedis = JedisDataSource.getConnection();
        Long scard = jedis.scard(activityId);
        jedis.close();
        return scard;
    }

    private static boolean doVote(String activityId, String userId) {
//        1、检查是否投过票
        Jedis jedis = JedisDataSource.getConnection();
        Boolean flag = jedis.sismember(activityId, userId);
//        2、基于检查结果,执行投票或取消投票
        if (flag){
            jedis.srem(activityId, userId);
            return false;
        }
        jedis.sadd(activityId, userId);
        return true;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值