All Projects → 2881099 → Csredis

2881099 / Csredis

Licence: mit
.NET Core or .NET Framework 4.0+ client for Redis and Redis Sentinel (2.8) and Cluster. Includes both synchronous and asynchronous clients.

Programming Languages

C#
18002 projects

Projects that are alternatives of or similar to Csredis

Ioredis
🚀 A robust, performance-focused, and full-featured Redis client for Node.js.
Stars: ✭ 9,754 (+469.08%)
Mutual labels:  redis, redis-client, redis-cluster
Xredis
Redis C++ client, support the data slice storage, support redis cluster, thread-safe,multi-platform,connection pool, read/write separation.
Stars: ✭ 285 (-83.37%)
Mutual labels:  redis, redis-client, redis-cluster
Camellia
camellia framework by netease-im. provider: 1) redis-client; 2) redis-proxy(redis-sentinel/redis-cluster); 3) hbase-client; 4) others
Stars: ✭ 146 (-91.48%)
Mutual labels:  redis, redis-client, redis-cluster
Redis
Type-safe Redis client for Golang
Stars: ✭ 13,117 (+665.29%)
Mutual labels:  redis, redis-client, redis-cluster
Php Redis Client
RedisClient is a fast, fully-functional and user-friendly client for Redis, optimized for performance. RedisClient supports the latest versions of Redis starting from 2.6 to 6.0
Stars: ✭ 112 (-93.47%)
Mutual labels:  redis, redis-client, redis-cluster
Cachingframework.redis
Distributed caching based on StackExchange.Redis and Redis. Includes support for tagging and is cluster-compatible.
Stars: ✭ 209 (-87.81%)
Mutual labels:  redis, redis-client, redis-cluster
Redisson
Redisson - Redis Java client with features of In-Memory Data Grid. Over 50 Redis based Java objects and services: Set, Multimap, SortedSet, Map, List, Queue, Deque, Semaphore, Lock, AtomicLong, Map Reduce, Publish / Subscribe, Bloom filter, Spring Cache, Tomcat, Scheduler, JCache API, Hibernate, MyBatis, RPC, local cache ...
Stars: ✭ 17,972 (+948.54%)
Mutual labels:  redis, redis-client, redis-cluster
Fastoredis
FastoRedis is a crossplatform Redis GUI management tool.
Stars: ✭ 316 (-81.56%)
Mutual labels:  redis, redis-client, redis-cluster
Redis Plus Plus
Redis client written in C++
Stars: ✭ 428 (-75.03%)
Mutual labels:  redis, redis-client, redis-cluster
Lettuce Core
Advanced Java Redis client for thread-safe sync, async, and reactive usage. Supports Cluster, Sentinel, Pipelining, and codecs.
Stars: ✭ 4,319 (+151.98%)
Mutual labels:  redis, redis-client, redis-cluster
Redis Game Transaction
在大型游戏中经常使用分布式,分布式中因为游戏逻辑会经常游戏事务,借助redis特性我们可以实现分布式锁和分布式事务。很多redis集群不支持redis的事务特性。 这个框架用来解决分布式服务器下redis集群事务失效的情况下,基于分布式锁完成分布式事务。支持独占锁,共享锁,读写锁,并且支持事务提交失败情况下的回滚操作,让开发者可以有更多时间侧重游戏逻辑.
Stars: ✭ 124 (-92.77%)
Mutual labels:  redis, redis-client, redis-cluster
Quick redis blog
QuickRedis is a free forever Redis Desktop manager. It supports direct connection, sentinel, and cluster mode, supports multiple languages, supports hundreds of millions of keys, and has an amazing UI. Supports both Windows, Mac OS X and Linux platform.
Stars: ✭ 594 (-65.34%)
Mutual labels:  redis, redis-client, redis-cluster
Redis Py Cluster
Python cluster client for the official redis cluster. Redis 3.0+.
Stars: ✭ 934 (-45.51%)
Mutual labels:  redis, redis-client, redis-cluster
Micropython Stm Lib
A collection of modules and examples for MicroPython running on an STM32F4DISCOVERY board
Stars: ✭ 64 (-96.27%)
Mutual labels:  redis, redis-client
Goredis
redis client for golang
Stars: ✭ 59 (-96.56%)
Mutual labels:  redis, redis-client
Redisworks
Pythonic Redis Client
Stars: ✭ 78 (-95.45%)
Mutual labels:  redis, redis-client
Flycache
一致性哈希的redis分片存储 (Redis sharding by consistent-hashing)
Stars: ✭ 59 (-96.56%)
Mutual labels:  redis, redis-cluster
Phpredis
A PHP extension for Redis
Stars: ✭ 9,203 (+436.93%)
Mutual labels:  redis, redis-cluster
Redli
Redli - A humane alternative to the Redis-cli and TLS
Stars: ✭ 126 (-92.65%)
Mutual labels:  redis, redis-client
Redis Cui
Simple, visual command line tool for redis
Stars: ✭ 101 (-94.11%)
Mutual labels:  redis, redis-client

Features

  • CSRedisClient and RedisHelper Keep all method names consistent with redis-cli

  • Support geo type commands (redis-server 3.2 or above is required)

  • Support Redis Cluster redis-trib.rb

  • Support Redis Sentinel and master-slave

  • Supports stream type commands (requires redis-server 5.0 and above)

Package Name NuGet Downloads
CSRedisCore nuget stats
Caching.CSRedis nuget stats IDistributedCache

dotnet add package CSRedisCore

Single machine redis

var csredis = new CSRedis.CSRedisClient("127.0.0.1:6379,password=123,defaultDatabase=13,prefix=my_");
Parameter Default Explain
password <Empty> Redis server password
defaultDatabase 0 Redis server database
asyncPipeline false The asynchronous method automatically uses pipeline, and the 10W concurrent time is 450ms (welcome to feedback)
poolsize 50 Connection pool size
idleTimeout 20000 Idle time of elements in the connection pool (MS), suitable for connecting to remote redis server
connectTimeout 5000 Connection timeout (MS)
syncTimeout 10000 Send / receive timeout (MS)
preheat 5 Preheat connections, receive values such as preheat = 5 preheat 5 connections
autoDispose true Follow system exit event to release automatically
ssl false Enable encrypted transmission
testcluster true 是否尝试集群模式,阿里云、腾讯云集群需要设置此选项为 false
tryit 0 Execution error, retry attempts
name <Empty> Connection name, use client list command to view
prefix <Empty> key前辍,所有方法都会附带此前辍,csredis.Set(prefix + "key", 111);

IPv6: [fe80::b164:55b3:4b4f:7ce6%15]:6379

Redis Sentinel

var csredis = new CSRedis.CSRedisClient("mymaster,password=123,prefix=my_", 
  new [] { "192.169.1.10:26379", "192.169.1.11:26379", "192.169.1.12:26379" });

Read only: new CSRedisClient("mymaster,password=123", new [] { Sentinels }, false)

Redis Cluster

假设你已经配置好 redis-trib 集群,定义一个【普通模式】的 CSRedisClient 对象,它会根据 redis-server 返回的 MOVED | ASK 错误记录slot,自动增加节点 Nodes 属性。

127.0.0.1:6379,password=123,defaultDatabase=0,poolsize=50,prefix=

其他节点在运行过程中自动增加,确保每个节点密码一致。

警告:本模式与【分区模式】同时使用时,切记不可设置“prefix=key前辍”(或者全部设置成一样),否则会导致 keySlot 计算结果与服务端不匹配,无法记录 slotCache。

注意:官方集群不支持多 keys 的命令、【管道】、Eval(脚本)等众多杀手级功能。

IDistributedCache

dotnet add package Caching.CSRedis

RedisHelper.Initialization(csredis);
services.AddSingleton<IDistributedCache>(new Microsoft.Extensions.Caching.Redis.CSRedisCache(RedisHelper.Instance));

Note: CSRedisClient is singleton, RedisHelper static class is recommended

RedisHelper.Set("test1", "123123", 60);
RedisHelper.Get("test1");
//The method name is the same as the command of redis cli

Operate on multiple databases

var connectionString = "127.0.0.1:6379,password=123,poolsize=10";
var redis = new CSRedisClient[14]; //Singleton
for (var a = 0; a< redis.Length; a++) 
  redis[a] = new CSRedisClient(connectionString + ",defaultDatabase=" + a);

redis[1].Get("test1");

Multiple RedisHelper

public abstract class MyHelper1 : RedisHelper<MyHelper1> {}
public abstract class MyHelper2 : RedisHelper<MyHelper2> {}

MyHelper1.Initialization(new CSRedisClient("...."));
MyHelper2.Initialization(new CSRedisClient("...."));

Subscribe/Publish

//Native subscribe
RedisHelper.Subscribe(
  ("chan1", msg => Console.WriteLine(msg.Body)),
  ("chan2", msg => Console.WriteLine(msg.Body)));

RedisHelper.PSubscribe(new[] { "test*", "*test001", "test*002" }, msg => {
  Console.WriteLine($"PSUB   {msg.MessageId}:{msg.Body}    {msg.Pattern}: chan:{msg.Channel}");
});

//模式订阅已经解决的难题:
//1、分区的节点匹配规则,导致通配符最大可能匹配全部节点,所以全部节点都要订阅
//2、本组 "test*", "*test001", "test*002" 订阅全部节点时,需要解决同一条消息不可执行多次

RedisHelper.Publish("chan1", "123123123");

参考资料:【由浅至深】redis 实现发布订阅的几种方式

CacheShell

//不加缓存的时候,要从数据库查询
var t1 = Test.Select.WhereId(1).ToOne();

//一般的缓存代码,如不封装还挺繁琐的
var cacheValue = RedisHelper.Get("test1");
if (!string.IsNullOrEmpty(cacheValue)) {
	try {
		return JsonConvert.DeserializeObject(cacheValue);
	} catch {
		//出错时删除key
		RedisHelper.Remove("test1");
		throw;
	}
}
var t1 = Test.Select.WhereId(1).ToOne();
RedisHelper.Set("test1", JsonConvert.SerializeObject(t1), 10); //缓存10秒

//使用缓存壳效果同上,以下示例使用 string 和 hash 缓存数据
var t1 = RedisHelper.CacheShell("test1", 10, () => Test.Select.WhereId(1).ToOne());
var t2 = RedisHelper.CacheShell("test", "1", 10, () => Test.Select.WhereId(1).ToOne());
var t3 = RedisHelper.CacheShell("test", new [] { "1", "2" }, 10, notCacheFields => new [] {
  ("1", Test.Select.WhereId(1).ToOne()),
  ("2", Test.Select.WhereId(2).ToOne())
});

Pipeline

使用管道模式,打包多条命令一起执行,从而提高性能。

var ret1 = RedisHelper.StartPipe(p => p.Set("a", "1").Get("a"));

Benchmark

100,000 operations

StackExchange.Redis StringSet:7882ms
CSRedisCore Set:6101ms
-------------------
StackExchange.Redis StringGet:7729ms
CSRedisCore Get:5762ms
-------------------
StackExchange.Redis StringSetAsync:8094ms
CSRedisCore SetAsync:6315ms
-------------------
StackExchange.Redis StringGetAsync:7986ms
CSRedisClient GetAsync:4931ms
CSRedisCore GetAsync:5960ms
-------------------
CSRedisCore SetAsync(Task.WaitAll):559ms
StackExchange.Redis StringSetAsync (concurrent Task.WaitAll):172ms
-------------------
CSRedisCore GetAsync(Task.WaitAll):435ms
StackExchange.Redis StringGetAsync (concurrent Task.WaitAll):176ms

Thank

Original open source project: https://github.com/ctstone/csredis

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].