使用Redis的INCR、Hsetnx、Hincrby的命令生成序列号
Redis INCR命令
用于由一个递增key的整数值。如果该key不存在,它被设置为0执行操作之前。如果key包含了错误类型的值或包含不能被表示为整数,字符串,则返回错误。该操作被限制为64位带符号整数。
返回值
回复整数,键增量后的值
Redis Hincrby 命令
用于为哈希表中的字段值加上指定增量值。
增量也可以为负数,相当于对指定字段进行减法操作。
如果哈希表的 key 不存在,一个新的哈希表被创建并执行 HINCRBY 命令。
如果指定的字段不存在,那么在执行命令前,字段的值被初始化为 0 。
对一个储存字符串值的字段执行 HINCRBY 命令将造成一个错误。
本操作的值被限制在 64 位(bit)有符号数字表示之内。
Redis Hsetnx 命令
用于为哈希表中不存在的的字段赋值 。
如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。
如果字段已经存在于哈希表中,操作无效。
如果 key 不存在,一个新哈希表被创建并执行 HSETNX 命令。
案例
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CSRedis;
using System.Threading;
private static void NewMethod()
{
var key = "hashName";
for (int i = 0; i < 100; i++)
{
ThreadPool.SetMaxThreads(2000, 1000);
ThreadPool.QueueUserWorkItem(o =>
{
using (var redis = new RedisClient("127.0.0.1"))
{
var result = redis.Incr("2016060222");
/// 先进行判断 这个是签到计数的hash infodemo 是按照时间+机构编码进行处理的
redis.HSetNx(key, "20160622", 0);
redis.HSetNx(key, "201606221001", 0);
redis.HSetNx(key, "2016062210011001K6100000002A1W52", 0);
/// 获取签到个数
var result2 = redis.HIncrBy(key, "20160622", 1);
var result3 = redis.HIncrBy(key, "201606221001", 1);
var result4 = redis.HIncrBy(key, "2016062210011001K6100000002A1W52", 1);
Console.WriteLine(result2);
}
});
}
}
案例使用的Redis操作类库:csredis.dll 3.2.1 版本
使用事务,批量操作 redis.Multi();redis.Exec();
如果想同时对多个key,增加计数,那么使用事务操作。redis.Multi() / redis.Exec()
案例:
/// <summary>
/// 使用redis的事务来计数,防止在操作的过程中,被其他线程乱入
/// </summary>
/// <param name="field0">字段1</param>
/// <param name="field1">字段2</param>
/// <param name="field2">字段3</param>
/// <returns></returns>
public static userindex RankCount(string field0, string field1, string field2)
{
string key = "hashName";
string redisURL = "127.0.0.1";
using (var redis = new RedisClient(redisURL))
{
//事务的开始
redis.Multi();
redis.HSetNx(key, field0, 0);
redis.HSetNx(key, field1, 0);
redis.HSetNx(key, field2, 0);
var result0 = redis.HIncrBy(key, field0, 1);
var result1 = redis.HIncrBy(key, field1, 1);
var result2 = redis.HIncrBy(key, field2, 1);
//事务的结束
var ress = redis.Exec();
var userInfo = new userindex
{
dayIndex = (long)ress[3],//事务中,每执行一条语句,都会给事务数组增加一条数据。
corpIndex = (long)ress[4],
deptIndex = (long)ress[5]
};
return userInfo;
}
}
public class userindex
{
public long dayIndex { get; set; }
public long deptIndex { get; set; }
public long corpIndex { get; set; }
}
使用Redis的INCR、Hsetnx、Hincrby的命令生成序列号的更多相关文章
- redis incr incrby decr decrby命令
incr.incrby.decr.decrby命令的作用和用法 redis中incr.incrby.decr.decrby属于string数据结构,它们是原子性递增或递减操作. incr递增1并返回递 ...
- Redis笔记,安装和常用命令
转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/96.html?1455870708 一.redis简单介绍 redis是N ...
- Python操作redis系列以 哈希(Hash)命令详解(四)
# -*- coding: utf-8 -*- import redis #这个redis不能用,请根据自己的需要修改 r =redis.Redis(host=") 1. Hset 命令用于 ...
- Redis(Windows安装方法与Java调用实例 & 配置文件参数说明 & Java使用Redis所用Jar包 & Redis与Memcached区别 & redis-cli.exe命令及示例)
Windows下Redis的安装使用 0.前言 因为是初次使用,所以是在windows下进行安装和使用,参考了几篇博客,下面整理一下 1.安装Redis 官方网站:http://redis.io/ 官 ...
- 基于Redis的INCR实现一个限流器
模式:计数器 计数器是 Redis 的原子性自增操作可实现的最直观的模式了,它的想法相当简单:每当某个操作发生时,向 Redis 发送一个 INCR 命令. 比如在一个 web 应用程序中,如果想知道 ...
- Redis启动服务和String常用命令
Redis启动服务和String常用命令 1. 启动Redis服务 E:\redis>redis-server.exe redis.windows.conf _._ _.-``__ ''-._ ...
- Redis中的原子操作(2)-redis中使用Lua脚本保证命令原子性
Redis 如何应对并发访问 使用 Lua 脚本 Redis 中如何使用 Lua 脚本 EVAL EVALSHA SCRIPT 命令 SCRIPT LOAD SCRIPT EXISTS SCRIPT ...
- redis之常用Set和ZSet命令
redis五种数据类型:String,Hash,List,Set,ZSet.五种数据类型各有优点,各司其职.最后两种数据类型Set和ZSet基本上是一种,ZSet就是给Set加了个排序而已(相当于加了 ...
- 【漏洞预警】Redis 4.x/5.x 远程命令执行高危漏洞
2019年7月09日,阿里云应急响应中心监测到有安全研究人员披露Redis 4.x/5.x 远程命令执行高危漏洞利用代码工具.针对未授权或弱口令的Redis服务,攻击者通过构造特定请求,成功利用漏洞可 ...
随机推荐
- matlab下二重积分的蒙特卡洛算法
%%monte_carlo_ff.m %被积函数(二重) function ff=monte_carlo_ff(x,y) ff=x*y^2;%函数定义处 end %%monte_carlo.m %蒙特 ...
- sublime 中 pyv8 binary 报错怎么处理?
,sublime text 在安装插件的时候,尤其是Emmet的时候,经常会报一个错误--please wait a bit whilePyV8 binary is being downloaded, ...
- Bubble Cup 8 finals A. Fibonotci (575A)
题意: 定义类循环序列为 长度无限,且除了有限个元素外,均满足s[i] ≡ s[i mod N] (i≥N). 现在有数列F,定义为 F[i] = s[i-2]*F[i-1] + s[i-1]*F[i ...
- css驼峰写法
当style样式与 animate() 方法一起使用时,该属性名称必须是驼峰写法: 您必须使用 paddingLeft 代替 padding-left,marginRight 代替 margin-ri ...
- php、前端开发(网站建设)环境搭建
php集成开发环境wampserver,是一款免费开源的软件,下载地址http://www.wampserver.com,由于是国外的网站,打开速度慢,根据自己的电脑选择32位/64位的系统下载.
- [Python] from scipy import sparse 报 DLL load failed:找不到指定模块错误
依赖vc运行环境.需要安装 vc_redist Py3.5要安装2015版 传送门: https://www.microsoft.com/zh-CN/download/details.aspx?id= ...
- Dom4j解析xml文件
dom4j是一个Java的XML API,类似于jdom,用来读取的XML文件,由于它是将文件解析完存放在内存当中的,所以不适合解析大的XML文件,但就方便性和性能方面,一定程度要优于JDK中Domc ...
- AFNetworking 与 gbk 编码格式后台数据的使用
仅针,后台数据为GBK编码时的AFNetWorking 使用情况: 1. Request failed: unacceptable content-type: text/html soluti ...
- Oracle:试图访问正在使用的事务临时表
处理步骤为 1.找到表ID select * from dba_objects where object_name like 'TPT_RPWORPA1_QRY' 2.通过表ID查找正在使用的事务 s ...
- erlang 虚机CPU 占用高排查
-问题起因 近期线上一组服务中,个别节点服务器CPU使用率很低,只有其他1/4.排除业务不均,曾怀疑是系统top统计错误,从Erlang调度器的利用率调查 找到通过erlang:statistics( ...