# AngiesList.Redis
**Repository Path**: wangscript/AngiesList.Redis
## Basic Information
- **Project Name**: AngiesList.Redis
- **Description**: asp.net用Redis做分布式Session
- **Primary Language**: C#
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 21
- **Created**: 2017-03-06
- **Last Updated**: 2024-06-06
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
AL-Redis (AngiesList.Redis)
---------------------------
The AngiesList.Redis library contains a few useful classes:
* A high performance Session State HttpModule that can replace the built-in Session module
* A simple, bucketed Key-Value store
### Redis Session State HttpModule (`AngiesList.Redis.RedisSessionStateModule`)
`RedisSessionStateModule` is a IHttpModule that can replace ASP.NET's default Session module. It has the following
features/differences:
* Session data is stored in Redis (duh)
* This module does NOT do the per request locking that the default module does (see: http://msdn.microsoft.com/en-us/library/ms178587.aspx ),
which means that multiple request under the same SessionId can be processed concurrently.
* Session items are stored and accessed independently from items in a Redis Hash. So when session is saved at the end
of a request, only the session items that were modified during that request need to be persisted to Redis.
To use with Integrated Pipeline mode:
Create a `remove` then an `add` in the `modules` element inside the `system.webServer` element in your web.config like so:
```xml
```
For IIS 6 or earlier or Classic Pipeline mode:
Do the same except in the `httpModules` element in the `system.web` element.
### Bucketed Key-Value store (`AngiesList.Redis.KeyValueStore`)
Example usage:
```csharp
var tags = KeyValueStore.Bucket("tags");
tags.Set("redis", "The swiss army knife data structure server");
var description = tags.GetStringSync("redis");
```
You can optionally set an expiration (in seconds) when you use `Set`:
```csharp
KeyValueStore.Bucket("contentCache").Set("about_us", "We're awesome!", 600);
```
There are more getter methods:
* For binary data (GetRawSync() returns byte[])
* For whatever type T you want. GetSync returns T and handles the (de)serialization from and to T for you.
* For callback based async operations, there are asyncronous version of all the Get_ methods. Example:
```csharp
bigNumbers.Get("a_trillion", (num, exc) => {
if (exc == null) {
//do something with num
}
});
```
### TODO:
* add locking support (like the SQL Server provider), make it optional done.
* add option to use different serializers
* create a quick benchmark program