java生成随机邀请码的几种思路和对应的应用场景

哇好久没写博客了!本来想早早睡觉的,舍友还在噼里啪啦的吃鸡!反正睡不着还是敲代码。在最近这个项目中,涉及一个对课程生成一个邀请码,加入这个课程必须输入邀请码才行。那么这里就涉及到如何涉及一个较短的最好是英文和数字组成的不重复的邀请码!对于这个场景,我给出的解决方案就是随机字符串+课程id就好了,id本身就不会重复,这里这个问题就这样轻松的解决了!
但这里有一个问题,这里在生成这个邀请码的时候,我们需要对数据库进行一次查询,得到id之后才能生成邀请码,这样对数据库的一次查询操作,虽然在这个学校的小型项目看起来不起眼,但是如果在高并发的场景下,这样的效率还是比较低的!
我经过查找资料,一般有以下几种生成不重复的随机码的方法:

1.每次生成一个随机码后查数据库是否有同样的,有则又一次生成直到没有同样(比我上述的方案效率更低,完全不推荐)
2.就是我上述的方案,以数据库表内容的主键id,随机字符串+id组成随机码。(效率较方案一要好一些)
3.专门设计一个采集数据的系统(京东产生订单号的例子),24小时不间断的采集数据生成数据到数据库里,里面的随机码都是保证唯一,需要用的时候就从里面取出!
4.利用算法来解决,比如uuid,sha,RC4等。(这些算法能保证唯一,但是一般长度比较长,在我这个项目下面就不能应用。所以一般这种算法产生的随机码,我用过作为分布式系统下数据库主键id,或者一些激活码,线下邀请码等等之类的)
下面是我这次项目写的生成随机码的代码部分(有个小问题,在课程数足够大的时候,随机码长度会增长= =!)

             //生成邀请码
    if(course.getIsInviteCode().equals("1")){
        //产生激活码前2位随机+课程总数再加一
        int courseNum = courseService.queryAllCourseCount();
        String baseStr = "abcdefghjkmnpqrstuvwxy3456789";
        Random random = new Random();
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < 2; i++) {
            sb.append(baseStr.charAt(random.nextInt(baseStr.length())));
        }
        sb.append(String.valueOf(courseNum+1));
        course.setInviteCode(sb.toString());
    }
已有 2 条评论
  1. 向JAVA大佬低头

    1. 不错不错,来看看。。

添加新评论