https://www.cnblogs.com/Fengge518/p/13556182.html
环境:之前一直是使用serverStack.Redis的客服端,
今天来使用一下StackExchange.Redis(个人感觉更加的人性化一些,也是免费的,性能也不会差太多),版本为StackExchange.Redis V2.1.58 ,Core3.1
简单的说明(专业的术语参考资料网络和官网):官网地址:https://www.redis.net.cn/
Redis(Remote Dictionary Server ),即远程字典服务是一个开源的 ,由C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
Redis 是一个高性能的key-value数据库。Redis的出现,很大程度补偿了memcached这类key/value存储的不足,
提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。
优点:
1 Redis读写性能优异,从内存当中进行IO读写速度快,支持超过100K+每秒的读写频率。
2 Redis支持Strings,
Lists, Hashes, Sets,Ordered Sets等数据类型操作。
3 Redis支持数据持久化,支持AOF和RDB两种持久化方式
4 Redis支持主从复制,主机会自动将数据同步到从机,可以进行读写分离。
5 Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
6 Redis是单线程多CPU,不需要考虑加锁释放锁,也就没有死锁的问题,效率高。
1:redis队列值入队出队,截图效果:
优化之前入队1000条数据,测试结果将近50秒,这实在太慢,不可忍受!
优化后的效果:为5.55s的样子
2:redis发布与订阅截图效果:(一个发布者,四个订阅者) 订阅者都会收到相同的信息
3:redis秒杀,截图如下:单个进程秒杀ok
开多个进程时,会有超卖的现象:(那我加lock锁呢?结果也是会有超卖的现象,此时下面的分布式锁可以解决)
4:加上redis分布式锁的测试效果截图:
但是这样会比较耗资源,库存已经没有了,就应该不要再去执行下去了
分布式锁ok库存为零就不在请求直接抛异常即可
上面通过测试的截图,简单的介绍了,Redis的队列(入队和出队),Redis发布与订阅,Redis分布式锁的使用,现在直接上代码 :
出队入队的WebApi Core3.1
using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;namespace WebApp.Controllers{
using Microsoft.AspNetCore.Mvc; using RedisPublishAndSubHelper; [Route("api/[Controller]")] [ApiController] public class RedisTestController {
[HttpGet("EnqueueMsg")] public async TaskEnqueueMsgAsync(string rediskey, string redisValue) {
ApiResultObject obj = new ApiResultObject(); try {
long enqueueLong = default; for (int i = 0; i < 1000; i++) {
enqueueLong = await MyRedisSubPublishHelper.EnqueueListLeftPushAsync(rediskey, redisValue + i); } obj.Code = ResultCod