-
Notifications
You must be signed in to change notification settings - Fork 6
/
Example.cs
130 lines (112 loc) · 5.17 KB
/
Example.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
using System;
using System.Collections.Generic;
namespace BeIT.MemCached {
class Example {
public static void Main(string[] args) {
//---------------------
// Setting up a client.
//---------------------
Console.Out.WriteLine("Setting up Memcached Client.");
MemcachedClient.Setup("MyCache", new string[] { "localhost" });
//It is possible to have several clients with different configurations:
//If it is impossible to resolve the hosts, this method will throw an exception.
try {
MemcachedClient.Setup("MyOtherCache", new string[]{ "server1.example.com:12345", "server2.example.com:12345"});
} catch (Exception e) {
Console.WriteLine(e.Message);
}
//Get the instance we just set up so we can use it. You can either store this reference yourself in
//some field, or fetch it every time you need it, it doesn't really matter.
MemcachedClient cache = MemcachedClient.GetInstance("MyCache");
//It is also possible to set up clients in the standard config file. Check the section "beitmemcached"
//in the App.config file in this project and you will see that a client called "MyConfigFileCache" is defined.
MemcachedClient configFileCache = MemcachedClient.GetInstance("MyConfigFileCache");
//Change client settings to values other than the default like this:
cache.SendReceiveTimeout = 5000;
cache.ConnectTimeout = 5000;
cache.MinPoolSize = 1;
cache.MaxPoolSize = 5;
//----------------
// Using a client.
//----------------
//Set some items
Console.Out.WriteLine("Storing some items.");
cache.Set("mystring", "The quick brown fox jumped over the lazy dog.");
cache.Set("myarray", new string[]{"This is the first string.", "This is the second string."});
cache.Set("myinteger", 4711);
cache.Set("mydate", new DateTime(2008, 02, 23));
//Use custom hash
cache.Set("secondstring", "Flygande bäckasiner söka hwila på mjuka tufvor", 4711);
//Get a string
string str = cache.Get("mystring") as string;
if (str != null) {
Console.Out.WriteLine("Fetched item with key: mystring, value: " + str);
}
//Get an object
string[] array = cache.Get("myarray") as string[];
if (array != null) {
Console.Out.WriteLine("Fetched items with key: myarray, value 1: " + array[0] + ", value 2: " + array[1]);
}
//Get several values at once
object[] result = cache.Get(new string[]{"myinteger", "mydate"});
if (result[0] != null && result[0] is int) {
Console.Out.WriteLine("Fetched item with key: myinteger, value: " + (int)result[0]);
}
if (result[1] != null && result[1] is DateTime) {
Console.Out.WriteLine("Fetched item with key: mydate, value: " + (DateTime)result[1]);
}
str = cache.Get("secondstring", 4711) as string;
if (str != null) {
Console.Out.WriteLine("Fetched item with key and custom hash: secondstring, value: " + str);
}
//Set a counter
Console.Out.WriteLine("Setting an item for incrementing and decrementing.");
cache.SetCounter("mycounter", 9000);
ulong? counter = cache.GetCounter("mycounter");
if (counter.HasValue) {
Console.Out.WriteLine("Fetched mycounter, value: " + counter.Value);
}
//Increment the counter
counter = cache.Increment("mycounter", 1);
if (counter.HasValue) {
Console.Out.WriteLine("Incremented mycounter with 1, new value: " + counter.Value);
}
//Decrement the counter
counter = cache.Decrement("mycounter", 9000);
if (counter.HasValue) {
Console.Out.WriteLine("Decremented mycounter with 9000, new value: " + counter.Value);
}
//Append and prepend
Console.Out.WriteLine("Storing bar for append/prepend");
cache.Set("foo", "bar");
Console.Out.WriteLine("Appending baz");
cache.Append("foo", " baz");
Console.Out.WriteLine("Prepending foo");
cache.Prepend("foo", "foo ");
Console.Out.WriteLine("New value: " + cache.Get("foo"));
//Cas
cache.Delete("castest");
Console.Out.WriteLine("Trying to CAS non-existant key castest: " + cache.CheckAndSet("castest", "a", 0));
Console.Out.WriteLine("Setting value for key: castest, value: a");
cache.Set("castest", "a");
Console.Out.WriteLine("Trying to CAS key castest with the wrong unique: " + cache.CheckAndSet("castest", "a", 0));
ulong unique;
cache.Gets("castest", out unique);
Console.Out.WriteLine("Getting cas unique for key castest: " + unique);
Console.Out.WriteLine("Trying to CAS again with the above unique: " + cache.CheckAndSet("castest", "b", unique));
string value = cache.Gets("castest", out unique) as string;
Console.Out.WriteLine("New value: " + value + ", new unique: " + unique);
Console.Out.WriteLine("Displaying the socketpool status:");
foreach (KeyValuePair<string, Dictionary<string, string>> host in cache.Status()) {
Console.Out.WriteLine("Host: " + host.Key);
foreach (KeyValuePair<string, string> item in host.Value) {
Console.Out.WriteLine("\t" + item.Key + ": " + item.Value);
}
Console.Out.WriteLine();
}
Console.Out.WriteLine();
Console.Out.WriteLine("Finished. Press enter to exit.");
Console.In.ReadLine();
}
}
}