All Projects → WeihanLi → WeihanLi.Redis

WeihanLi / WeihanLi.Redis

Licence: MIT license
RedisExtensions for StackExchange.Redis, Cache/Redlock/Counter/RateLimiter/Rank/RedisEventBus

Programming Languages

C#
18002 projects

Projects that are alternatives of or similar to WeihanLi.Redis

StackExchange.Redis-docs-zh-cn
StackExchange.Redis中文使用文档
Stars: ✭ 92 (+100%)
Mutual labels:  redis-client, stackexchange-redis
jimhttp
A library collection and web microframework
Stars: ✭ 25 (-45.65%)
Mutual labels:  redis-client
MvcSimplePager
Simple,lightweight,easy to expand pager for asp.net mvc and asp.net core,针对asp.net mvc 和 asp.net core 设计的通用、扩展性良好的轻量级分页扩展
Stars: ✭ 13 (-71.74%)
Mutual labels:  weihanli
SmartRedis
SmartSim Infrastructure Library Clients.
Stars: ✭ 37 (-19.57%)
Mutual labels:  redis-client
vscode-redis
Redis Client in VSCode!
Stars: ✭ 63 (+36.96%)
Mutual labels:  redis-client
CloudStructures
Redis Client based on StackExchange.Redis.
Stars: ✭ 124 (+169.57%)
Mutual labels:  redis-client
redis client
a redis client supports cluster
Stars: ✭ 72 (+56.52%)
Mutual labels:  redis-client
redis-developer.github.io
The Home of Redis Developers
Stars: ✭ 28 (-39.13%)
Mutual labels:  redis-client
simple redis
Simple and resilient redis client for rust.
Stars: ✭ 21 (-54.35%)
Mutual labels:  redis-client
redis
efficient client ⚡️
Stars: ✭ 70 (+52.17%)
Mutual labels:  redis-client
cache redis node
Exemplo de utilização de Cache, com Redis, Mongo, nodejs
Stars: ✭ 30 (-34.78%)
Mutual labels:  redis-client
redis-cpp
redis-cpp is a header-only library in C++17 for Redis (and C++11 backport)
Stars: ✭ 73 (+58.7%)
Mutual labels:  redis-client
aioredis-cluster
Redis Cluster support extension for aioredis
Stars: ✭ 21 (-54.35%)
Mutual labels:  redis-client
redimo.go
Use the power of DynamoDB with the ease of the Redis API
Stars: ✭ 29 (-36.96%)
Mutual labels:  redis-client
rueidis
A Fast Golang Redis RESP3 client that supports Client Side Caching, Auto Pipelining, Generics OM, RedisJSON, RedisBloom, RediSearch, RedisAI, RedisGears, etc.
Stars: ✭ 422 (+817.39%)
Mutual labels:  redis-client
retcl
Tcl client library for Redis
Stars: ✭ 20 (-56.52%)
Mutual labels:  redis-client
JRediSearch
Java Client for RediSearch
Stars: ✭ 133 (+189.13%)
Mutual labels:  redis-client
node-redis-connection-pool
A node.js connection manager for Redis
Stars: ✭ 52 (+13.04%)
Mutual labels:  redis-client
spring-redisearch
Provides support for RediSearch in Spring
Stars: ✭ 31 (-32.61%)
Mutual labels:  redis-client
cpp redis
C++11 Lightweight Redis client: async, thread-safe, no dependency, pipelining, multi-platform
Stars: ✭ 506 (+1000%)
Mutual labels:  redis-client

WeihanLi.RedisWeihanLi.Redis

English

Build

Build Status

Build Status

Intro

RedisExtensions for StackExchange.Redis, much more easier for generic opeartions,and supply some extensions for your business logics.

StackExchange.Redis 扩展,更简单的泛型操作,并提供一些的适用于业务场景中的扩展

基于 Redis 的五种主要的数据类型做了一些扩展:

  1. String

    • Cache
    • Counter
    • Firewall
    • RedLock
    • RateLimiter
  2. Hash

    • Hash
    • Dictonary
    • HashCounter
  3. List

    • List
    • Queue
    • Stack
  4. Set

    • Set
  5. SortedSet

    • SortedSet
    • Rank

GetStarted

Installation 安装

Install from Nuget

通过 Nuget 安装 WeihanLi.Redis

Configuration 配置

对于 V1.0.6 及以下版本支持 .netframework4.5 配置参考:

  1. 日志配置,日志基于 log4net 的配置,可以参考单元测试中的 log4net.config 的配置,将 log4net.config 放在项目根目录下【推荐】 如果不在项目根目录下或者文件名发生修改则需要自己手动调用 LogHelper.LogInit("log4net.config");

  2. Redis 配置

RedisManager.AddRedisConfig(config =>
    {
        config.CachePrefix = "WeihanLi.Redis.UnitTest";
        config.ChannelPrefix = "WeihanLi.Redis.UnitTest";
    });

.net core 应用,还可以这样配置

serviceCollection.AddRedisConfig(config =>
    {
        config.CachePrefix = "WeihanLi.Redis.UnitTest";
        config.ChannelPrefix = "WeihanLi.Redis.UnitTest";
        config.EnableCompress = false;// disable compress
    });

对于 1.1* 及以上版本不再支持 dotnet framework,配置方式如下:

// IServiceCollection serviceCollection = new ServiceCollection();

serviceCollection.AddRedisConfig(config =>
    {
        config.CachePrefix = "WeihanLi.Redis.UnitTest";
        config.ChannelPrefix = "WeihanLi.Redis.UnitTest";
        config.EnableCompress = false;// disable compress
    });

Basic usage 基本用法

  1. Cache 缓存

    缓存的基本操作主要是基于 RedisManager.CacheClient

    缓存的基本操作定义在 ICacheClient 中,基本操作如下:

    var key = "test111";
    var value = "Hello WeihanLi.Redis";
    Assert.True(RedisManager.CacheClient.Set(key, value));
    Assert.True(RedisManager.CacheClient.Exists(key));
    Assert.Equal(value, RedisManager.CacheClient.Get(key));
    Assert.True(RedisManager.CacheClient.Remove(key));
    Assert.False(RedisManager.CacheClient.Exists(key));
    RedisManager.CacheClient.GetOrSet(key, () => value, TimeSpan.FromSeconds(10));
  2. Counter 计数器

    var counterName = "counterTest";
    var counterClient = RedisManager.GetCounterClient(counterName, TimeSpan.FromSeconds(60));
    Assert.Equal(0, counterClient.Base);
    Assert.Equal(0, counterClient.Count());
    counterClient.Increase();
    Assert.Equal(1, counterClient.Count());
    counterClient.Increase(5);
    Assert.Equal(6, counterClient.Count());
    counterClient.Decrease(3);
    Assert.Equal(3, counterClient.Count());
    Assert.True(counterClient.Reset());
    Assert.Equal(0, counterClient.Count());
  3. Firewall 防火墙

    var firewallName = "firewallTest";
    var firewallClient = RedisManager.GetFirewallClient(firewallName, TimeSpan.FromSeconds(3));
    Assert.True(firewallClient.Hit());
    Assert.False(firewallClient.Hit());
    await Task.Delay(TimeSpan.FromSeconds(3));
    Assert.True(firewallClient.Hit());
  4. RedLock Redis分布式锁

    using (var client = RedisManager.GetRedLockClient("redLockTest"))
    {
        Assert.True(client.TryLock(TimeSpan.FromSeconds(10)));
        using (var client1 = RedisManager.GetRedLockClient("redLockTest"))
        {
            Assert.False(client.TryLock(TimeSpan.FromSeconds(10)));
            Assert.False(client1.Release());
        }
        Assert.True(client.Release());
    }
    
    var key = Guid.NewGuid().ToString("N");
    using (var client = RedisManager.GetRedLockClient(key))
    {
        Assert.True(client.TryLock(TimeSpan.FromSeconds(20)));
    }
    
    using (var client = RedisManager.GetRedLockClient(key))
    {
        Assert.True(client.TryLock(TimeSpan.FromMinutes(3)));
        Assert.True(client.Release());
    }
  5. Rank 排行榜

    var rankClient = RedisManager.GetRankClient<string>("testRank");
    Assert.Equal(0, rankClient.Length());
    rankClient.Add("xiaoming", 100);
    rankClient.Add("xiaohong", 95);
    rankClient.Add("xiaowang", 96);
    Assert.Equal(3, rankClient.Length());
    Assert.Equal(100, rankClient.Score("xiaoming"));
    var rank = rankClient.RangeByScore();
    Assert.Equal("xiaohong", rank[0]);
    rank = rankClient.RangeByScore(order: Order.Descending);
    Assert.Equal("xiaoming", rank[0]);
    var common = RedisManager.GetCommonRedisClient(RedisDataType.Rank);
    Assert.True(common.KeyDelete("testRank"));
  6. 依赖注入

    // 在 asp.net core 中可以直接从构造器注入,这里使用的一个 ServiceLocator 模式获取注入的服务
    var cacheClient = DependencyResolver.Current.ResolveService<ICacheClient>();
    Assert.NotNull(cacheClient);
    var key = Guid.NewGuid().ToString("N");
    Assert.Equal("abcaaa", cacheClient.GetOrSet(key, () => "abcaaa", TimeSpan.FromMinutes(10)));
    cacheClient.Remove(key);
    var hashClient = DependencyResolver.Current.ResolveService<IHashClient>();
    Assert.NotNull(hashClient);
    var pubsubClient = DependencyResolver.Current.ResolveService<IPubSubClient>();
    Assert.NotNull(pubsubClient);
  7. 更多用法等你来发现...

Contact

Contact me if you need: [email protected]

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].