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. java 写文件的三种方法比较
  2. Python 技术篇-操作oracle数据库执行SQL语句报错,提示ORA-00911: 无效字符解决方法
  3. 【树莓派】首发树莓派4原型机接口参数曝光
  4. JS特效 -- 网页图片飞起来
  5. android纵向列表菜单栏实现,RecyclerView实现常见的列表菜单
  6. 编程到底难在哪里? 从一个美国实习生的故事说起
  7. 在JUnit中超越核心Hamcrest
  8. pb 怎么判断是 小数_考试90分以上的孩子是怎么学数学的?听听老师怎么说?
  9. SQL查询得到(按编号分组的日期最大的记录)
  10. STL札记2(序列容器vector、list、deque)
  11. 解决window.open被拦截问题
  12. redis未授权反弹shell
  13. java array
  14. SQL Server 2014 虚拟机的自动备份 (Resource Manager)
  15. 中国省市JSON列表
  16. iOS 获取 appid
  17. P3373 【模板】线段树1和P3373 【模板】线段树 2
  18. 笔记本电脑维修90个精选实例
  19. 二十世纪最伟大的十大算法
  20. PSINS源码阅读—test_SINS_trj

热门文章

  1. 大富网络、拓尔思、恒信东方、金马游乐……上市公司如何布局元宇宙?丨2022元宇宙云峰会...
  2. 中文路径刻录Linux总是损坏,linux下刻录光盘所发生的问题及解决办法
  3. JSON压缩:JSONMinify
  4. 如何将iTunes DRM-ed M4P转换为MP3?
  5. c3p0的基本使用方法
  6. PPPOE拨号之七:华为防火墙 USG PPPoE拨号配置【针对Client+NAT工作常用方式与服务器】
  7. 网络安全 中间人攻击-ARP欺骗 工具:Cain
  8. ASM Disk Discovery 最佳实践
  9. AAL模板及脑区功能介绍
  10. tigerGraph 实践