博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Simple example using Redis Lists

Posted on 2012-08-20 10:36  xgbzsc  阅读(426)  评论(0编辑  收藏  举报

https://github.com/ServiceStack/ServiceStack.Redis

 

Simple example using Redis Lists

Below is a simple example to give you a flavour of how easy it is to use some of Redis's advanced data structures - in this case Redis Lists: Full source code of this example is viewable online

using (var redisClient = new RedisClient())
{
    //Create a 'strongly-typed' API that makes all Redis Value operations to apply against Shippers
    IRedisTypedClient<Shipper> redis = redisClient.GetTypedClient<Shipper>();

    //Redis lists implement IList<T> while Redis sets implement ICollection<T>
    var currentShippers = redis.Lists["urn:shippers:current"];
    var prospectiveShippers = redis.Lists["urn:shippers:prospective"];

    currentShippers.Add(
        new Shipper {
            Id = redis.GetNextSequence(),
            CompanyName = "Trains R Us",
            DateCreated = DateTime.UtcNow,
            ShipperType = ShipperType.Trains,
            UniqueRef = Guid.NewGuid()
        });

    currentShippers.Add(
        new Shipper {
            Id = redis.GetNextSequence(),
            CompanyName = "Planes R Us",
            DateCreated = DateTime.UtcNow,
            ShipperType = ShipperType.Planes,
            UniqueRef = Guid.NewGuid()
        });

    var lameShipper = new Shipper {
        Id = redis.GetNextSequence(),
        CompanyName = "We do everything!",
        DateCreated = DateTime.UtcNow,
        ShipperType = ShipperType.All,
        UniqueRef = Guid.NewGuid()
    };

    currentShippers.Add(lameShipper);

    Dump("ADDED 3 SHIPPERS:", currentShippers);

    currentShippers.Remove(lameShipper);

    Dump("REMOVED 1:", currentShippers);

    prospectiveShippers.Add(
        new Shipper {
            Id = redis.GetNextSequence(),
            CompanyName = "Trucks R Us",
            DateCreated = DateTime.UtcNow,
            ShipperType = ShipperType.Automobiles,
            UniqueRef = Guid.NewGuid()
        });

    Dump("ADDED A PROSPECTIVE SHIPPER:", prospectiveShippers);

    redis.PopAndPushBetweenLists(prospectiveShippers, currentShippers);

    Dump("CURRENT SHIPPERS AFTER POP n' PUSH:", currentShippers);
    Dump("PROSPECTIVE SHIPPERS AFTER POP n' PUSH:", prospectiveShippers);

    var poppedShipper = redis.PopFromList(currentShippers);
    Dump("POPPED a SHIPPER:", poppedShipper);
    Dump("CURRENT SHIPPERS AFTER POP:", currentShippers);

    //reset sequence and delete all lists
    redis.SetSequence(0);
    redis.Remove(currentShippers, prospectiveShippers);
    Dump("DELETING CURRENT AND PROSPECTIVE SHIPPERS:", currentShippers);
}

/*
== EXAMPLE OUTPUT ==

ADDED 3 SHIPPERS:
Id:1,CompanyName:Trains R Us,ShipperType:Trains,DateCreated:2010-01-31T11:53:37.7169323Z,UniqueRef:d17c5db0415b44b2ac5da7b6ebd780f5
Id:2,CompanyName:Planes R Us,ShipperType:Planes,DateCreated:2010-01-31T11:53:37.799937Z,UniqueRef:e02a73191f4b4e7a9c44eef5b5965d06
Id:3,CompanyName:We do everything!,ShipperType:All,DateCreated:2010-01-31T11:53:37.8009371Z,UniqueRef:d0c249bbbaf84da39fc4afde1b34e332

REMOVED 1:
Id:1,CompanyName:Trains R Us,ShipperType:Trains,DateCreated:2010-01-31T11:53:37.7169323Z,UniqueRef:d17c5db0415b44b2ac5da7b6ebd780f5
Id:2,CompanyName:Planes R Us,ShipperType:Planes,DateCreated:2010-01-31T11:53:37.799937Z,UniqueRef:e02a73191f4b4e7a9c44eef5b5965d06

ADDED A PROSPECTIVE SHIPPER:
Id:4,CompanyName:Trucks R Us,ShipperType:Automobiles,DateCreated:2010-01-31T11:53:37.8539401Z,UniqueRef:67d7d4947ebc4b0ba5c4d42f5d903bec

CURRENT SHIPPERS AFTER POP n' PUSH:
Id:4,CompanyName:Trucks R Us,ShipperType:Automobiles,DateCreated:2010-01-31T11:53:37.8539401Z,UniqueRef:67d7d4947ebc4b0ba5c4d42f5d903bec
Id:1,CompanyName:Trains R Us,ShipperType:Trains,DateCreated:2010-01-31T11:53:37.7169323Z,UniqueRef:d17c5db0415b44b2ac5da7b6ebd780f5
Id:2,CompanyName:Planes R Us,ShipperType:Planes,DateCreated:2010-01-31T11:53:37.799937Z,UniqueRef:e02a73191f4b4e7a9c44eef5b5965d06

PROSPECTIVE SHIPPERS AFTER POP n' PUSH:

POPPED a SHIPPER:
Id:2,CompanyName:Planes R Us,ShipperType:Planes,DateCreated:2010-01-31T11:53:37.799937Z,UniqueRef:e02a73191f4b4e7a9c44eef5b5965d06

CURRENT SHIPPERS AFTER POP:
Id:4,CompanyName:Trucks R Us,ShipperType:Automobiles,DateCreated:2010-01-31T11:53:37.8539401Z,UniqueRef:67d7d4947ebc4b0ba5c4d42f5d903bec
Id:1,CompanyName:Trains R Us,ShipperType:Trains,DateCreated:2010-01-31T11:53:37.7169323Z,UniqueRef:d17c5db0415b44b2ac5da7b6ebd780f5

DELETING CURRENT AND PROSPECTIVE SHIPPERS:
*/

More examples are available in the [RedisExamples Redis examples page] and in the comprehensive test suite

Speed

One of the best things about Redis is the speed - it is quick.

This example below stores and gets the entire Northwind database (3202 records) in less 1.2 secs - we've never had it so quick!

(Running inside a VS.NET/R# unit test on a 3 year old iMac)

using (var client = new RedisClient())
{
    var before = DateTime.Now;
    client.StoreAll(NorthwindData.Categories);
    client.StoreAll(NorthwindData.Customers);
    client.StoreAll(NorthwindData.Employees);
    client.StoreAll(NorthwindData.Shippers);
    client.StoreAll(NorthwindData.Orders);
    client.StoreAll(NorthwindData.Products);
    client.StoreAll(NorthwindData.OrderDetails);
    client.StoreAll(NorthwindData.CustomerCustomerDemos);
    client.StoreAll(NorthwindData.Regions);
    client.StoreAll(NorthwindData.Territories);
    client.StoreAll(NorthwindData.EmployeeTerritories);

    Console.WriteLine("Took {0}ms to store the entire Northwind database ({1} records)",
        (DateTime.Now - before).TotalMilliseconds, totalRecords);


    before = DateTime.Now;
    var categories = client.GetAll<Category>();
    var customers = client.GetAll<Customer>();
    var employees = client.GetAll<Employee>();
    var shippers = client.GetAll<Shipper>();
    var orders = client.GetAll<Order>();
    var products = client.GetAll<Product>();
    var orderDetails = client.GetAll<OrderDetail>();
    var customerCustomerDemos = client.GetAll<CustomerCustomerDemo>();
    var regions = client.GetAll<Region>();
    var territories = client.GetAll<Territory>();
    var employeeTerritories = client.GetAll<EmployeeTerritory>();

    Console.WriteLine("Took {0}ms to get the entire Northwind database ({1} records)",
        (DateTime.Now - before).TotalMilliseconds, totalRecords);
}
/*
== EXAMPLE OUTPUT ==

Took 1020.0583ms to store the entire Northwind database (3202 records)
Took 132.0076ms to get the entire Northwind database (3202 records)
*/