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; }
}