Redis生成Id主键的工具
public class PrimaryKeyGenerator
{
private static readonly NedisClient client = new NedisClient(GetRedisConfig()); /// <summary>
/// 获取当前Redis配置实例
/// </summary>
/// <returns></returns>
private static RedisConfiguration GetRedisConfig()
{
string strRedisConfiguration = getRedisConfiguration();
RedisConfiguration redisConfig = JsonConvert.DeserializeObject<RedisConfiguration>(strRedisConfiguration);
return redisConfig;
} /// <summary>
/// 获取RedisConfiguration配置字符串
/// </summary>
/// <returns></returns>
private static string getRedisConfiguration()
{
return "{\"MasterNumber\":1,\"Sentinel\":\"192.168.47.131:26379,192.168.47.140:26379,192.168.47.140:26380,192.168.47.139:26379\",\"SentinelConnectTimeout\":1000,\"ReadWriteSeparate\":true,\"MasterName\":\"masterredis131\",\"DbNumber\":2,\"PoolSizeMultiplier\":0,\"PoolTimeOutSeconds\":0}";
//using (var client = new ConsulClient())
//{
// var kvPair = client.KV.Get("redis/cluster/default/RedisConfig").Result; // if (kvPair.Response != null && kvPair.Response.Value != null)
// {
// return Encoding.UTF8.GetString(kvPair.Response.Value, 0, kvPair.Response.Value.Length);
// } // return string.Empty;
//}
} /// <summary>
/// 计算主键时的增量
/// </summary>
private uint increment = 1; /// <summary>
/// 业务IdKey
/// </summary>
private string busnessIdKey = string.Empty; /// <summary>
/// 使用业务ID的key,ID增量初始化
/// </summary>
/// <param name="BusnessIdKey">业务IdKey</param>
/// <param name="Increment">id增量</param>
public PrimaryKeyGenerator(string BusnessIdKey, uint Increment)
{
increment = Increment;
busnessIdKey = BusnessIdKey;
} /// <summary>
/// 获取下一个主键ID
/// </summary>
/// <returns></returns>
public Int64 GetNextID()
{
return client.Increment(busnessIdKey, increment);
}
}
测试代码:
class Program
{
static void Main(string[] args)
{
//设work IOCP min值
ThreadPool.SetMinThreads(300, 200); #region Id生成工具测试 //单线程测试
//GeneratorIDTest();
//多线程测试
for (int i = 0; i < 1000; i++)
{
ThreadStart num = new ThreadStart(GeneratorIDTest);
Thread numThread = new Thread(num);
numThread.Start();
}
#endregion Console.WriteLine("开始" + ids.Count()+ "mainID:" + Thread.CurrentThread.ManagedThreadId.ToString());
Thread.Sleep(30000);
Console.WriteLine("结束未去重:"+ids.Count()+"去重:"+ ids.Distinct().Count());
Console.WriteLine("结束未去重:" + safeIds.Count() + "去重:" + safeIds.Distinct().Count());
//Console.WriteLine("结束未去重:" + safeIds2.Count() + "去重:" + safeIds2.Distinct().Count()); Console.ReadKey();
} static List<long> ids = new List<long>();
//https://blog.csdn.net/liunianqingshi/article/details/79025818
static ConcurrentQueue<long> safeIds = new ConcurrentQueue<long>();
static Queue<long> safeIds2 = new Queue<long>(); private static void GeneratorIdTest()
{
var primaryKey = new PrimaryKeyGenerator("blog_id", 1);
for (int i = 0; i < 50; i++)
{
var id = primaryKey.GetNextID();
ids.Add(id);
safeIds.Enqueue(id);
//safeIds2.Enqueue(id);//System.ArgumentException:“目标数组的长度不够。请检查 destIndex 和长度以及数组的下限。”
Console.WriteLine("线程ID"+Thread.CurrentThread.ManagedThreadId.ToString() +":"+id);
}
}
}
Redis生成Id主键的工具的更多相关文章
- Hibernate学习笔记(三)Hibernate生成表单ID主键生成策略
一. Xml方式 <id>标签必须配置在<class>标签内第一个位置.由一个字段构成主键,如果是复杂主键<composite-id>标签 被映射的类必须定义对应数 ...
- Hibernate的ID主键生成策略
ID生成策略(一) 通过XML配置实现ID自己主动生成(測试uuid和native) 之前我们讲了除了通过注解的方式来创建一个持久化bean外.也能够在须要持久化的bean的包路径下创建一个与bean ...
- 分布式中的分库分表之后,ID 主键如何处理?
面试题 分库分表之后,id 主键如何处理?(唯一性,排序等) 面试官心理分析 其实这是分库分表之后你必然要面对的一个问题,就是 id 咋生成?因为要是分成多个表之后,每个表都是从 1 开始累加,那肯定 ...
- 面试官:分库分表之后,id 主键如何处理?
面试题 分库分表之后,id 主键如何处理? 面试官心理分析 其实这是分库分表之后你必然要面对的一个问题,就是 id 咋生成?因为要是分成多个表之后,每个表都是从 1 开始累加,那肯定不对啊,需要一个全 ...
- 深入理解Redis中的主键失效及其实现机制
参考:http://blog.sina.com.cn/s/articlelist_1221155353_0_1.html 作为一种定期清理无效数据的重要机制,主键失效存在于大多数缓存系统中,Reids ...
- JDBC学习笔记(6)——获取自动生成的主键值&处理Blob&数据库事务处理
获取数据库自动生成的主键 [孤立的技术是没有价值的],我们这里只是为了了解具体的实现步骤:我们在插入数据的时候,经常会需要获取我们插入的这一行数据对应的主键值. 具体的代码实现: /** * 获取数据 ...
- javaweb学习总结(三十七)——获得MySQL数据库自动生成的主键
测试脚本如下: 1 create table test1 2 ( 3 id int primary key auto_increment, 4 name varchar(20) 5 ); 测试代码: ...
- 【转】JDBC学习笔记(6)——获取自动生成的主键值&处理Blob&数据库事务处理
转自:http://www.cnblogs.com/ysw-go/ 获取数据库自动生成的主键 我们这里只是为了了解具体的实现步骤:我们在插入数据的时候,经常会需要获取我们插入的这一行数据对应的主键值. ...
- javaweb(三十七)——获得MySQL数据库自动生成的主键
测试脚本如下: 1 create table test1 2 ( 3 id int primary key auto_increment, 4 name varchar(20) 5 ); 测试代码: ...
随机推荐
- cocos2d-x解决中文乱码问题的几种办法
昨天改写cocos2d-x的例程,想在其基础上加上一个计分系统.没有分数实在让人没有玩下去的动力! 我在主场景上加上了一个CCLabelTTF,用于显示分数. 但是意外的发现,当内容含有中文时,CCL ...
- Spring 是如何解决并发访问的线程安全性问题的
springmvc的controller是singleton的(非线程安全的),这也许就是他和struts2的区别吧!和Struts一样,Spring的Controller默认是Singleton的, ...
- Ubuntu 12.04下jdk的安装与配置
由于要开始在linux下学习jsp的开发,所以就准备自己动手配置一下jdk和tomcat jdk 下载地址: http://www.oracle.com/technetwork/java/javase ...
- PHP 友好的dump
/** * 浏览器友好的变量输出 * @param mixed $var 变量 * @param boolean $echo 是否输出 默认为True 如果为false 则返回输出字符串 * @par ...
- 在N个元素的数组中获取K个元素的所有组合问题
可以写循环,也可以用模块. 百度许久找到一个博客 http://blog.sina.com.cn/s/blog_4a0824490101f1kc.html 详细介绍了Algorithm::Combin ...
- SQL2005 全文检索超时的解决方案
如果没有 Internet 连接的服务器上运行的 SQL Server 2005 实例中运行全文查询时,您可能会遇到 45 秒钟的延迟 详细的解释请查看http://support.microsoft ...
- Hadoop日志分析工具——White Elephant
White Elephant 是一个Hadoop日志收集器和展示器,它提供了用户角度的Hadoop集群可视化.White Elephant 是全球最大的职业社交网站Linkedin开发的一套分析Had ...
- CodeIgniter(3.1.4)框架中-使用多个公共控制器
项目目录结构: 在core/MY_Controller.php文件下: <?php /** * Class MY_Controller * 自定义控制器 */ class MY_Controll ...
- jquery实现简单瀑布流代码
测试环境:ie8 ff13.0.1 chrome22 可以将分页获取的内容依次填入四个div中,瀑布流的分页可以以多页(比如5页)为单位二次分页,这样可以减少后台算法的复杂度 <!DOCTYP ...
- div 点击展开
<script type="text/javascript" src="http://libs.baidu.com/jquery/2.1.1/jquery.min. ...