RandomService.java
package org.example.testjedis;import java.util.Random;public class RandomService {private static final Random r = new Random();/*** 随机一个start-end的值** @param start* @param end* @return*/public static int rand(int start, int end) {return Math.abs(r.nextInt()) % (end - start + 1) + start;}
}

RoomIdService.java

package org.example.testjedis;import redis.clients.jedis.Jedis;public class RoomIdService {private static final int beganRoomId = 111111;private static final int endRoomId = 999999;private static final String ROOM_ID_KEY = "roomid";/*** 随机1个6位的房间号** @return*/public static int getRoomId() {int roomId = -1;long ret = 0;int count = 0;while (ret == 0) {roomId = RandomService.rand(beganRoomId, endRoomId);try (Jedis jedis = new Jedis()) {ret = jedis.hsetnx(ROOM_ID_KEY, String.valueOf(roomId), "1");}// 没找到,则说明房间号紧缺,创建房间号失败. 基本不会发生这样的情况if (ret == 0) {if (++count > 1000) {roomId = -1;break;}}}return roomId;}/*** 房间结束,删除过期的房间号** @param roomId* @return 0:失败 1:成功*/public static boolean delRoomId(int roomId) {long del = 0;try (Jedis jedis = new Jedis()) {del = jedis.hdel(ROOM_ID_KEY, String.valueOf(roomId));}return del == 1;}/*** 清理所有的房间号*/public static void clearAllRoomId() {System.out.println("开始清理房间号...");try (Jedis jedis = new Jedis()) {jedis.del(ROOM_ID_KEY);}System.out.println("清理房间号结束...");}/*** 已经使用的房间号数量** @return*/public static int getUsedRoomIdSize() {long len = 0;try (Jedis jedis = new Jedis()) {len = jedis.hlen(ROOM_ID_KEY);}return (int) len;}
}

Main.java

package org.example.testjedis;import java.util.HashSet;
import java.util.Set;public class Main {public static void main(String[] args) {RoomIdService.clearAllRoomId();Set<Integer> roomIdSet = new HashSet<>();for (int i = 0; i < 88; i++) {int roomId = RoomIdService.getRoomId();if (roomId > 0) {roomIdSet.add(roomId);} else {System.err.println("创建房间失败");}}System.out.println(roomIdSet);System.out.println(roomIdSet.size());System.out.println(RoomIdService.getUsedRoomIdSize());}
}/*
开始清理房间号...
清理房间号结束...
[706314, 585993, 789134, 570506, 851599, 283777, 226571, 696449, 172813, 245522, 189715, 424727, 370838, 979989, 466714, 237603, 992559, 789930, 295458, 363565, 194985, 621346, 893728, 692903, 880160, 918305, 365617, 986551, 859569, 200383, 321081, 433848, 447416, 669620, 854477, 592969, 280389, 179008, 952265, 371138, 525248, 161354, 995398, 426956, 646851, 803911, 407373, 322639, 895425, 147790, 716358, 739782, 197453, 270539, 425045, 138838, 499411, 239706, 509405, 810838, 963794, 912620, 739306, 853996, 354918, 375009, 384352, 303969, 541805, 294764, 947812, 269419, 949089, 783995, 896509, 758779, 138864, 263415, 508275, 179446, 676222, 147450, 555120, 630129, 529139, 145273, 927731, 586486]
88
88*/

总结:对于全球同服这种,房间号统一管理用redis则非常方便

【hash使用场景之房间号创建】相关推荐

  1. KBEngine 房间示例创建脚本调用解读

    首先放个房间示例的资源路径https://github.com/u3dkbe/kbengine_unity3d_balls 这个例子很简单,客户端点击登录按钮后即进入场景,同时生成大量NPC.鼠标点击 ...

  2. Redis数据结构Hash应用场景-存储商品、购物车、淘宝短链接、分布式Session、用户注册、发微博功能

    Hash应用场景 Hash Hash应用场景 redis存储java对象常用String,那为什么还要用hash来存储? SpringBoot+redis+hash存储商品数据 短链接 场景1:淘宝短 ...

  3. 绝地求生刺激战场自定义服务器,绝地求生刺激战场自定义房间怎么创建 自定义房间创建方法...

    腾讯光子&PUBG联合出品,正版<绝地求生>手游!百人空投,荒岛求生!虚幻4引擎研发,次世代完美画质,重现端游视听感受:8000Mx8000M正版... 类型:飞行射击 大小:11 ...

  4. php创建菜单_php实现微信公众号创建自定义菜单功能的实例代码

    目的 创建自定义菜单,实现菜单事件. 首先获取Access_Token 接口: 我用的是测试号,修改APPID和APPSECRET,然后浏览器访问上面这个Url即可生成Access_Token 然后配 ...

  5. eclipse写java实现端口_使用eclipse(windows)在java中使用IPv6地址和端口号创建套接字...

    当我尝试使用IPv4地址创建套接字时,它很成功,但是当我尝试使用IPv6地址和端口号创建套接字时,它会引发异常: java.net.SocketException: Network is unreac ...

  6. 基于当前分支的某一个commit号创建分支

    基于当前分支的某一个commit号创建分支 git checkout -b dev2 <branch id>

  7. 微信公众号创建菜单报错40016

    微信公众号创建菜单报错40016 今天帮连锁处理公众号链接的时候,我通过接口将连锁的公众号菜单链接返回回来,然后处理一个跳转链接,本来想着是手到擒来的事,没想到突然给我抛出一个错误,打了我一个措手不及 ...

  8. 爬取斗鱼房间号信息-计算在线观看总人数

    早就对斗鱼等直播平台的观看人数好奇,今天进来爬取以下斗鱼到底有多少人观看,目前是新冠状病毒时期,看直播的人数应该不会太少,也希望各位保护好自己和自己的家人,祝身体健康.话不多说直接上过程: 第一步构想 ...

  9. 【Insights直播】华为帐号服务,打造全场景安全帐号体系

    在App运营过程中,如何保持用户增长和提升用户体验始终是开发者关注的问题,而作为用户使用体验感知的第一环节--帐号注册登录环节是不可忽视,且有很大提升空间的.如何提升帐号的注册登录体验?如何保证用户在 ...

最新文章

  1. 【最强ResNet改进系列】Res2Net:一种新的多尺度网络结构,性能提升显著
  2. ASP.NET 获取上一个页面的Url链接
  3. 祝「杭州程序媛」母亲节快乐!
  4. 移动app测试之怎么避免bug漏测
  5. streamsets 集成 minio s3测试
  6. Linux下查看进程对应的命令绝对路径
  7. 华为p6电信版 android 4.5,华为P6电信版系统应用apk补全教程 完整EMUI
  8. scsi协议_存储协议有哪些类型?常见存储协议分析
  9. linux c设置系统时间函数,Linux C 中获取local日期和时间 time()localtime()函数
  10. php 跨域请求 header 头
  11. EPSON爱普生系列打印机清洗更换墨盒方法
  12. 北京地标《信息化项目软件开发费用测算规范》完成公开征求意见
  13. centos无法开机 图形界面崩溃卡在start dynamic system tuning daemo以及Started Virtualization daemon...ices..shutdown
  14. ios怎么打开c语言文件操作函数,C++ ofstream和ifstream详细用法以及C语言的file用法...
  15. 显示器html看电视声音,使用显示器的内置音响播放声音需要满足以下两种条件...
  16. C++11 std::make_shared 与 std::shared_ptr双剑合璧
  17. Exchange2010批量删除邮件
  18. H.265/HEVC 简述 第二课(数字视频格式)
  19. PPT!智能工厂总体规划及实施指南
  20. 博达路由器常见功能教学1

热门文章

  1. ALIAS_TO_ENTITY_MAP 封装成对象
  2. 述职报告不会写?看这篇!
  3. 部门名称部门结构叠用_部门名称简写
  4. 双目是个词吗_什么双目的四字词语
  5. SOLIDWORKS: Mold Design SOLIDWORKS:模具设计 Lynda课程中文字幕
  6. matlab 箱图 保存,[转载]Matlab图保存方法
  7. 如何配置Linux系统的IP地址?
  8. Nginx搭文件服务器,使用nginx搭建文件服务器
  9. unity文字逐个出现实现文字打印机效果
  10. wordpress创建_如何在WordPress中轻松创建优惠券网站