ToB企服应用市场:ToB评测及商务社交产业平台

标题: 【Redis】.Net Core 面试破冰 [打印本页]

作者: 小小小幸运    时间: 2024-5-16 08:04
标题: 【Redis】.Net Core 面试破冰
目录

1.Redis简介

Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选长期性的键值对(Key-Value)存储数据库,并提供多种语言的 API。
Redis 支持丰富的数据类型,常用的如下:
2.Redis 的性能极高 – Redis 能读的速度是 110000 次/s,写的速度是 81000 次/s 。
3.Redis 支持数据的长期化,可以将内存中的数据生存在磁盘中,重启的时间可以再次加载进利用用
4.Redis 支持数据的高并发、高可用,如主从模式、哨兵模式、cluster 集群模式
2.使用场景

3.C# 详细使用先容(Nuget)

StackExchange.Redis

StackExchange.Redis 是一个.NET 平台上的高性能、异步的 Redis 客户端库,由 StackExchange 团队开辟。
堆栈地址:https://github.com/StackExchange/StackExchange.Redis
文档地址:https://stackexchange.github.io/StackExchange.Redis/Basics
  1. using StackExchange.Redis;
  2. ...
  3. ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost");
  4. IDatabase db = redis.GetDatabase();
  5. string value = "abcdefg";
  6. db.StringSet("mykey", value);
  7. ...
  8. string value = db.StringGet("mykey");
  9. Console.WriteLine(value); // writes: "abcdefg"
  10. ...
复制代码
小插曲:StackExchange.Redis Timeout 确实很烦...... 但是可以使用下面两款 redis Nuget 包
FreeRedis

是基于 .NET 的 redis 客户端,  CSRedisCore 是 .NETFramework 4.0 及以上 访问 redis-server 的客户端组件,也是 FreeSql 作者早年发布的 nuget 版本。厥后重构了更简易的 FreeRedis,目前推荐各人使用 FreeRedis,支持险些所有 .NET 平台和 AOT。
官方文档:https://freesql.net/guide/freeredis.html
堆栈地址:https://github.com/2881099/FreeRedis
  1. public static RedisClient cli = new RedisClient("127.0.0.1:6379,password=123,defaultDatabase=13");
  2. cli.Serialize = obj => JsonConvert.SerializeObject(obj);
  3. cli.Deserialize = (json, type) => JsonConvert.DeserializeObject(json, type);
  4. cli.Notice += (s, e) => Console.WriteLine(e.Log); //print command log
  5. cli.Set("key1", "value1");
  6. cli.MSet("key1", "value1", "key2", "value2");
  7. string value1 = cli.Get("key1");
  8. string[] vals = cli.MGet("key1", "key2");
复制代码
NewLife.Redis

是一个 Redis 客户端组件,以高性能处理大数据及时计算为目的。Redis 协议基础实现 Redis/RedisClient 位于[X 组件],本库为扩展实现,主要增加列表结构、哈希结构、队列等高级功能。
推荐用法
  1. public static class RedisHelper
  2. {
  3.     /// <summary>
  4.     /// Redis实例
  5.     /// </summary>
  6.     public static FullRedis redisConnection { get; set; } = new FullRedis("127.0.0.1:6379", "123456", 4);
  7. }
  8. Console.WriteLine(RedisHelper.redisConnection.Keys);
复制代码
基础用法(增,删,改,查)
  1. // 实例化Redis,默认端口6379可以省略,密码有两种写法
  2. //var rds = new FullRedis("127.0.0.1", null, 7);
  3. var rds = new FullRedis("127.0.0.1:6379", "pass", 7);
  4. //var rds = new FullRedis();
  5. //rds.Init("server=127.0.0.1:6379;password=pass;db=7");
  6. rds.Log = XTrace.Log;
  7. var rds = new FullRedis("127.0.0.1", null, 7);
  8. rds.Log = XTrace.Log;
  9. rds.ClientLog = XTrace.Log; // 调试日志。正式使用时注释
  10. var user = new User { Name = "NewLife", CreateTime = DateTime.Now };
  11. rds.Set("user", user, 3600);
  12. var user2 = rds.Get<User>("user");
  13. XTrace.WriteLine("Json: {0}", user2.ToJson());
  14. XTrace.WriteLine("Json: {0}", rds.Get<String>("user"));
  15. if (rds.ContainsKey("user")) XTrace.WriteLine("存在!");
  16. rds.Remove("user");
  17. //----------------执行结果:----------------------------------------
  18. 14:14:25.990  1 N - SELECT 7
  19. 14:14:25.992  1 N - => OK
  20. 14:14:26.008  1 N - SETEX user 3600 [53]
  21. 14:14:26.021  1 N - => OK
  22. 14:14:26.042  1 N - GET user
  23. 14:14:26.048  1 N - => [53]
  24. 14:14:26.064  1 N - GET user
  25. 14:14:26.065  1 N - => [53]
  26. 14:14:26.066  1 N - Json: {"Name":"NewLife","CreateTime":"2018-09-25 14:14:25"}
  27. 14:14:26.067  1 N - EXISTS user
  28. 14:14:26.068  1 N - => 1
  29. 14:14:26.068  1 N - 存在!
  30. 14:14:26.069  1 N - DEL user
  31. 14:14:26.070  1 N - => 1
复制代码
ServiceStack.Redis (收费)

是一个简单、高性能且功能丰富的 Redis C# 客户端,具有原生支持和 高级抽象,用于序列化 POCO 和支持原生同步和异步 API 的复杂类型。
  1. 会有一些破解版本~ 嘿嘿
  2. 官方地址:https://docs.servicestack.net/redis/
  3. 破解版本文章参考链接:https://www.cnblogs.com/nxahkm/p/14242143.html
复制代码
基础用法
  1. var redis = new RedisManagerPool("localhost:6379");
  2. using (var client = redis.GetClient())
  3. {
  4.     client.Set("key", "value");
  5.     var result = client.Get<string>("key");
  6.     Console.WriteLine(result);
  7.     client.SetEntryInHash("hash", "field1", "value1");
  8.     client.SetEntryInHash("hash", "field2", "value2");
  9.     var hashResult = client.GetAllEntriesFromHash("hash");
  10.     foreach(var entry in hashResult)
  11.     {
  12.         Console.WriteLine(entry.Key + " : " + entry.Value);
  13.     }
  14. }
复制代码
4.Redis 常用面试题目以及答复

缓存雪崩
缓存雪崩是指在缓存中大量的键在同一时间失效大概被删除,导致大量请求直接访问数据库,从而造成数据库负载过高的环境。以下是处理缓存雪崩题目的一些常见方法:
缓存击穿
缓存击穿是指在缓存中缓存了一个逾期时间非常短的数据,当有大量请求同时访问这个数据时,会导致大量请求都穿过缓存直接访问数据库,从而造成数据库负载过高的环境。以下是处理缓存击穿题目的一些常见方法:
缓存穿透
缓存穿透是指恶意请求大概大量请求查询一个不存在的数据,导致请求都到达数据库,从而使数据库负载过高。以下是处理缓存穿透的一些常见方法:
  1. 参考文章1.:https://www.cnblogs.com/mushroom/p/4556801.html
  2.    
  3. 参考文章2:https://www.cnblogs.com/eventhorizon/p/16414593.html
  4. github学习地址:https://github.com/eventhorizon-cli/EventHorizon.BloomFilter
复制代码
5.发起及经验分享

发起

Redis 经验分享

ShareFlow

欢迎关注“ShareFlow”,精选的内容和深入的分析,共同探讨、学习、创造,创建故意义的连接,致力于成为您的信息灯塔。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4