相关文章推荐
读研的人字拖  ·  Java 读取 .properties ...·  3 天前    · 
犯傻的绿茶  ·  clickhouse ...·  昨天    · 
老实的玉米  ·  springboot+kafka中@Kafk ...·  昨天    · 
讲道义的大海  ·  ASP.NET Core の Razor ...·  19 小时前    · 
爱玩的牙膏  ·  springboot ...·  5 月前    · 
睿智的弓箭  ·  watch siri接入gpt - 抖音·  1 年前    · 
仗义的刺猬  ·  记录 RestTemplate 中的 ...·  1 年前    · 

一.StackExchange.Redis

StackExchange.Redis 是由Stack Overflow开发的c#语言Redis客户端,目前使用非常广泛,本文对它的使用进行简单介绍。

二. 使用Demo

1. 引用

using StackExchange.Redis;

2.Demo

ConnectionMultiplexer是StackExchange.Redis的核心,它被整个应用程序共享和重用,应该设置为单例,它的初始化如下:

ConfigurationOptions包含很多选项,例如keepAlive、connectRetry、name具体可以参考StackExchange.Redis.ConfigurationOptions

// redis config
private static ConfigurationOptions configurationOptions = ConfigurationOptions.Parse("127.0.0.1:6379,password=xxx,connectTimeout=2000");
 //the lock for singleton
private static readonly object Locker = new object();
 //singleton
private static ConnectionMultiplexer redisConn;
//singleton
public static ConnectionMultiplexer getRedisConn()
    if (redisConn == null)
        lock (Locker)
            if (redisConn == null || !redisConn.IsConnected)
                redisConn = ConnectionMultiplexer.Connect(configurationOptions);
    return redisConn;

GetDatabase()返回的对象是轻量级的,每次用的时候从ConnectionMultiplexer对象中获取即可。

redisConn = getRedisConn();
var db = redisConn.GetDatabase();

下面给出5种数据结构的demo,他们的API和原生略有不同,分别用String、Hash、List、Set、SortedSet开头代表5种数据结构。

(1). string

//set get
string strKey = "hello";
string strValue = "world";
bool setResult = db.StringSet(strKey, strValue);
Console.WriteLine("set " + strKey + " " + strValue + ", result is " + setResult);
//incr
string counterKey = "counter";
long counterValue = db.StringIncrement(counterKey);
Console.WriteLine("incr " + counterKey + ", result is " + counterValue);
//expire
db.KeyExpire(strKey, new TimeSpan(0, 0, 5));
Thread.Sleep(5 * 1000);
Console.WriteLine("expire " + strKey + ", after 5 seconds, value is " + db.StringGet(strKey));
//mset mget
KeyValuePair<RedisKey, RedisValue> kv1 = new KeyValuePair<RedisKey, RedisValue>("key1", "value1");
KeyValuePair<RedisKey, RedisValue> kv2 = new KeyValuePair<RedisKey, RedisValue>("key2", "value2");
db.StringSet(new KeyValuePair<RedisKey, RedisValue>[] {kv1,kv2});            
RedisValue[] values = db.StringGet(new RedisKey[] {kv1.Key, kv2.Key});
Console.WriteLine("mget " + kv1.Key.ToString() + " " + kv2.Key.ToString() + ", result is " + values[0] + "&&" + values[1]);

(2). hash

string hashKey = "myhash";
//hset
db.HashSet(hashKey,"f1","v1");
db.HashSet(hashKey,"f2", "v2");
HashEntry[] values = db.HashGetAll(hashKey);
//hgetall
Console.Write("hgetall " + hashKey + ", result is");
for (int i = 0; i < values.Length;i++) 
    HashEntry hashEntry = values[i];
    Console.Write(" " + hashEntry.Name.ToString() + " " + hashEntry.Value.ToString());
Console.WriteLine();

(3). list

//list key string listKey = "myList"; //rpush db.ListRightPush(listKey, "a"); db.ListRightPush(listKey, "b"); db.ListRightPush(listKey, "c"); //lrange RedisValue[] values = db.ListRange(listKey, 0, -1); Console.Write("lrange " + listKey + " 0 -1, result is "); for (int i = 0; i < values.Length; i++) Console.Write(values[i] + " "); Console.WriteLine();

(4). set

//set key
string setKey = "mySet";
//sadd
db.SetAdd(setKey, "a");
db.SetAdd(setKey, "b");
db.SetAdd(setKey, "c");
//sismember
bool isContains = db.SetContains(setKey, "a");
Console.WriteLine("set " + setKey + " contains a is " + isContains );

(5). sortedset

string sortedSetKey = "myZset";
//sadd
db.SortedSetAdd(sortedSetKey, "xiaoming", 85);
db.SortedSetAdd(sortedSetKey, "xiaohong", 100);
db.SortedSetAdd(sortedSetKey, "xiaofei", 62);
db.SortedSetAdd(sortedSetKey, "xiaotang", 73);
//zrevrangebyscore
RedisValue[] names = db.SortedSetRangeByRank(sortedSetKey, 0, 2, Order.Ascending);
Console.Write("zrevrangebyscore " + sortedSetKey + " 0 2, result is ");
for (int i = 0; i < names.Length; i++)
    Console.Write(names[i] + " ");
Console.WriteLine();
一个Redis的Java客户端Jedis的学习,线程不安全问题的解决及与MySQL的简单的结合
> Redis 全称 Remote Dictionary Server(即远程字典服务),它是一个基于内存实现的键值型非关系(NoSQL)数据库,由意大利人 Salvatore Sanfilippo 使用 C 语言编写。 > Redis 遵守 BSD 协议,实现了免费开源,其最新版本是 6.20,常用版本包括 3.0 、4.0、5.0。自 Redis 诞生以来,它以其超高的性能、完美的文档和简洁易懂的源码广受好评,国内外很多大型互联网公司都在使用 Redis,比如腾讯、阿里、Twitter、Github 等等。 简单的来说:Redis是一种极其高效的,迅速的一种基于缓存读写的N
OAuth2在内存、Redis方式下的多客户端配置
`Spring`所提供的`OAuth2`集成策略,支持多种方式存储`认证信息`以及`客户端信息`,由于在之前的文章中讲解使用时把知识点进行了拆分,有很多同学不太会组合使用,很多单独问我`ApiBoot`所提供的`OAuth2`的整合后,多个客户端该怎么配置?
OAuth2使用Redis来存储客户端信息以及AccessToken
使用`Redis`来存储`OAuth2`相关的客户端信息以及生成的`AccessToken`是一个不错的选择,`Redis`与生俱来的的高效率、集群部署是比较出色的功能,如果用来作为`服务认证中心`的数据存储,可以大大的提高响应效率。