使用Redis的INCR、Hsetnx、Hincrby的命令生成序列号

时间:2021-12-16 13:32:18

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的命令生成序列号的更多相关文章

  1. redis incr incrby decr decrby命令

    incr.incrby.decr.decrby命令的作用和用法 redis中incr.incrby.decr.decrby属于string数据结构,它们是原子性递增或递减操作. incr递增1并返回递 ...

  2. Redis笔记,安装和常用命令

    转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/96.html?1455870708 一.redis简单介绍 redis是N ...

  3. Python操作redis系列以 哈希&lpar;Hash&rpar;命令详解(四)

    # -*- coding: utf-8 -*- import redis #这个redis不能用,请根据自己的需要修改 r =redis.Redis(host=") 1. Hset 命令用于 ...

  4. Redis&lpar;Windows安装方法与Java调用实例 &amp&semi; 配置文件参数说明 &amp&semi; Java使用Redis所用Jar包 &amp&semi; Redis与Memcached区别 &amp&semi; redis-cli&period;exe命令及示例&rpar;

    Windows下Redis的安装使用 0.前言 因为是初次使用,所以是在windows下进行安装和使用,参考了几篇博客,下面整理一下 1.安装Redis 官方网站:http://redis.io/ 官 ...

  5. 基于Redis的INCR实现一个限流器

    模式:计数器 计数器是 Redis 的原子性自增操作可实现的最直观的模式了,它的想法相当简单:每当某个操作发生时,向 Redis 发送一个 INCR 命令. 比如在一个 web 应用程序中,如果想知道 ...

  6. Redis启动服务和String常用命令

    Redis启动服务和String常用命令 1. 启动Redis服务 E:\redis>redis-server.exe redis.windows.conf _._ _.-``__ ''-._ ...

  7. redis之常用Set和ZSet命令

    redis五种数据类型:String,Hash,List,Set,ZSet.五种数据类型各有优点,各司其职.最后两种数据类型Set和ZSet基本上是一种,ZSet就是给Set加了个排序而已(相当于加了 ...

  8. 【漏洞预警】Redis 4&period;x&sol;5&period;x 远程命令执行高危漏洞

    2019年7月09日,阿里云应急响应中心监测到有安全研究人员披露Redis 4.x/5.x 远程命令执行高危漏洞利用代码工具.针对未授权或弱口令的Redis服务,攻击者通过构造特定请求,成功利用漏洞可 ...

  9. redis 学习(二)-- 通用命令

    redis 学习(二)-- 通用命令 1. keys pattern 含义:查找所有符合给定模式(pattern)的key 命令 含义 keys * 遍历所有 key keys he[h-l]* 遍历 ...

随机推荐

  1. Caliburn&period;Micro学习笔记&lpar;四&rpar;----IHandle&lt&semi;T&gt&semi;实现多语言功能

    Caliburn.Micro学习笔记目录 说一下IHandle<T>实现多语言功能 因为Caliburn.Micro是基于MvvM的UI与codebehind分离, binding可以是双 ...

  2. checkbox属性checked&equals;&quot&semi;checked&quot&semi;已有,但却不显示打勾的解决办法

    2014-02-05 BIWEB开发技巧 9919 在做权限管理的时候,做了一个功能,就是当勾选栏目,把所有的权限全勾上.刚开始使用了如下代码: function check(id,check) { ...

  3. 使用Rsync进行文件的同步与备份

    Rsync是Linux下非常不错的文件同步备份工具,安全性高.备份迅速.支持增量备,功能强大且高效. 服务端配置 Rsync服务的配置文件/etc/rsyncd.conf,示例配置(带用户名密码配置) ...

  4. 获取微信openID 的步骤

    获取微信openid的步骤:1.进入-->判断openID是否为空: 空-->$url=urlencode("http://xxx/xxx.php");//回调链接 $ ...

  5. 33&period;Android之Fragment学习

    Fragment Android是在Android 3.0 (API level 11)开始引入Fragment的. 可以把Fragment想成Activity中的模块,这个模块有自己的布局,有自己的 ...

  6. Chrysler -- CCD &lpar;Chrysler Collision Detection&rpar; Data Bus

    http://articles.mopar1973man.com/general-cummins/34-engine-system/81-ccd-data-bus CCD (Chrysler Coll ...

  7. 关于去除Dialog的黑色背景框

    Dialog有两种形式的,一个是Dialog及其子类,还有一种是Activity的Dialog显示方式. 不管怎样,在自定义Dialog的时候,如果不做一些处理,都会出现黑色背景边框,这个问题动不动就 ...

  8. swift 与 OC 混合编程

    原文地址:http://www.cocoachina.com/swift/20150608/12025.html 一.解决问题 Swift项目需要使用封装好的Objective-c组件.第三方类库,苹 ...

  9. shiroWeb项目-授权&lpar;十一&rpar;

    使用PermissionsAuthorizationFilter 在applicationContext-shiro.xml中配置url所对应的权限. 测试流程: 1.在applicationCont ...

  10. 进程理论 阻塞非阻塞 同步异步 I&sol;O操作

    1.什么是进程 进程指的是一个正在运行的程序,进程是用来描述程序执行过程的虚拟概念 进程的概念起源于操作系统,进程是操作系统最核心的概念,操作系统其它所有的概念都是围绕进程来的 2.操作系统 操作系统 ...