StackExchange.Redis.Extensions is a library that extends StackExchange.Redis allowing you a set of functionality needed by common applications.
Caching of course. Instead of use directly StackExchange.Redis could be easier use ICacheClient
For example:
- Add an object to Redis;
- Custom Serialized (need to implement your own serializer inherit from ISerializer);
- Changed Flush method;
- Remove an object from Redis;
- Search Keys into Redis;
- Retrieve multiple object with a single roundtrip;
- Store multiple object with a single roundtrip;
- Get Redis Server information;
- Set Add;
- Set AddAdd;
- SetRemove;
- SetRemoveAll;
- Set Member;
- Pub/Sub events;
- Save;
- Async methods;
- Hash methods;
- Support for Keyspace isolation;
- Much more;
Channel | Status |
---|---|
Appveyor CI (Windows) | |
Travis CI (Linux) | |
Nuget (Core) | |
Nuget (Json.NET) | |
Nuget (MsgPack) | |
Nuget (Protobuf) | |
Issue stats |
##How to install it StackExchange.Redis.Extensions is composed by two libraries, the Core and the Serializer implementation. Because there are several good serializer and we don't want add another dependency in your project you can choose your favorite or create a new one.
PM> Install-Package StackExchange.Redis.Extensions.Core
PM> Install-Package StackExchange.Redis.Extensions.Newtonsoft
PM> Install-Package StackExchange.Redis.Extensions.Jil
##Install Message Pack CLI implementation
PM> Install-Package StackExchange.Redis.Extensions.MsgPack
##Install Protocol Buffers implementation
PM> Install-Package StackExchange.Redis.Extensions.Protobuf
##Install Binary Formatter implementation
PM> Install-Package StackExchange.Redis.Extensions.Binary
You can use it registering the instance with your favorite Container. Here an example using Castle Windsor:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="redisCacheClient"
type="StackExchange.Redis.Extensions.Core.Configuration.RedisCachingSectionHandler, StackExchange.Redis.Extensions.Core" />
</configSections>
<redisCacheClient allowAdmin="true" ssl="false" connectTimeout="5000" database="0" password="my password">
<hosts>
<add host="127.0.0.1" cachePort="6379"/>
</hosts>
</redisCacheClient>
</configuration>
container.Register(Component.For<ISerializer>()
.ImplementedBy<NewtonsoftSerializer>()
.LifestyleSingleton());
container.Register(Component.For<ICacheClient>()
.ImplementedBy<StackExchangeRedisCacheClient>()
.LifestyleSingleton());
of you can create your own instance
var serializer = new NewtonsoftSerializer();
var cacheClient = new StackExchangeRedisCacheClient(serializer);
To specify the connection string it's enough to add it into AppSetting in your config files (use RedisConnectionString
as key) or specify your ConnectionMultiplexer
instance into the constructor.
In order to store a class into Redis, that class must be serializable. Below is the list of serialization options:
- BinaryFormatter - Requires
SerializableAttribute
on top of the class to store into Redis. - Jil - Fastest JSON serializer.
- MessagePack CLI - serialization/deserialization for CLI.
- Newtonsoft - Uses Json.Net to serialize a class without
SerializableAttribute
. - Protocol Buffers Fastest overall serializer which also happens to produce the smallest output. Developed by Google. Using protobuf-net implementation.
There are several methods in ICacheClient
that can solve this request.
var user = new User()
{
Firstname = "Ugo",
Lastname = "Lattanzi",
Twitter = "@imperugo"
Blog = "http://tostring.it"
}
bool added = myCacheClient.Add("my cache key", user, DateTimeOffset.Now.AddMinutes(10));
Easy:
var cachedUser = myCacheClient.Get<User>("my cache key");
That's a cool feature that is implemented into ICacheClient
implementation:
var cachedUsers = myCacheClient.GetAll<User>(new {"key1","key2","key3"});
That's a cool feature that is implemented into ICacheClient implementation:
IList<Tuple<string, string>> values = new List<Tuple<string, string>>();
values.Add(new Tuple<string, string>("key1","value1"));
values.Add(new Tuple<string, string>("key2","value2"));
values.Add(new Tuple<string, string>("key3","value3"));
bool added = sut.AddAll(values);
Yes that's possible using a specific pattern.
If you want to search all keys that start with myCacheKey
:
var keys = myCacheClient.SearchKeys("myCacheKey*");
If you want to search all keys that contain with myCacheKey
:
var keys = myCacheClient.SearchKeys("*myCacheKey*");
If you want to search all keys that end with myCacheKey
:
var keys = myCacheClient.SearchKeys("*myCacheKey");
Of course you can. ICacheClient
exposes a readonly property named Database
that is the implementation of IDatabase by StackExchange.Redis
myCacheClient.Database.SetAdd("mykey","another key");
ICacheClient
has a method GetInfo
and GetInfoAsync
for that:
var info = myCacheClient.GetInfo();
For more info about the values returned, take a look here
Getting started with Git and GitHub
- Setting up Git for Windows and connecting to GitHub
- Forking a GitHub repository
- The simple guide to GIT guide
- Open an issue if you encounter a bug or have a suggestion for improvements/features
Once you're familiar with Git and GitHub, clone the repository and start contributing.