(一)redis(在.net core中)

redis的作用及优势:

1:单机抗高并发能力很强,一般几十万的并发量都可以扛得住,所以在处理热数据(经常访问的数据)很有优势

2:当用户登陆后,可以存储当前用户关联的所有信息,避免了从数据库大量数据里面再次做赛选查询

3:aof(备份命令),rdb(备份数据)可以解决服务器断掉造成的数据丢失,开机后数据可以自动恢复,aof还支持命令重写,避免了一些无效命令对磁盘空间的浪费

4:减少了对数据库的访问,降低了数据库的访问压力

注意:

1:对于一些不经常使用的数据(冷数据),而且数据量比较大的,不建议使用redis,因为对于单个用户的查询,同等的数量的数据,redis的查询数据可能还没有直接从数据库查询快,而且还消耗了内存,呢种就比较不划算

实现代码:

1:在nuget里面下载CSRedisCore

2:服务端密码设置

配置文件redis.windows-service.conf修改密码

找到pass,修改成自己需要设置的密码

3:服务端启用配置文件

E:\网站项目ssssssssss\学习资料(白天)\ef\redis\Redis-x64-3.2.100,然后cmd,

启用服务端redis: redis-server.exe redis.windows-service.conf,然后点击redis-cli.exe,

然后在要访问redis就需要:auth 123456验证密码了,相当于只要服务端是以edis-server.exe redis.windows-service.conf呢种方式启动的,客户端链接都需要密码验证

4:下面呢种设置在项目中意义不大,一般不呢样设置

点击redis-cli.exe,设置密码:config set requirepass 123456,验证密码:auth 123456,获取密码:config get requirepass

5:设置密码要按3步骤来设置,不能按4步骤来设置

6:然后在redis基础类构造方法里面初始化RedisHelper,之后就可以调用RedisHelper里面的方法了

public RedisService()
{

var csredis = new CSRedisClient("127.0.0.1:6379,Password=123456,SyncTimeout=15000");
RedisHelper.Initialization(csredis);
}

 7:redis里面常见得5种存储类型:string,hash,list,set,zset

(1):string一个键对应一个值;

RedisHelper.Del("userkey");

RedisHelper.Set("userkey", "wsh");//存值
string ss = RedisHelper.Get("userkey");//取值

(2):hash一个key对应多个属性,每个属性对应各种的值;(例如存取一个对象,一个对象对应了多个属性,每个属性对应一个值)

RedisHelper.HDel("hash", "no");//删除单个属性值

RedisHelper.Del("hash");//删除hash对象

RedisHelper.HSet("hash", "no", "111");//存值
RedisHelper.HSet("hash", "name", "222");//存值

string name = RedisHelper.HGet("hash", "name");//取单个属性值

#region 获取对象得所有属性值,并且转换成一个完整得对象
Mem mem = new Mem();
Dictionary<string, string> dic1 = RedisHelper.HGetAll<string>("hash");
for(int i = 0; i < dic1.Count; i++)
{
mem.no = dic1["no"];
mem.name = dic1["name"];
}
#endregion

(3):list链表形式存储,取值按坐标序号取某一段来取;(.net里面可以从左插入,从右插入,但是取只能只能从左开始取LRange)

RedisHelper.Del("list");

#region 一个一个对象得存
RedisHelper.RPush("list", "4");
RedisHelper.RPush("list", "1");
RedisHelper.RPush("list", "2");
RedisHelper.RPush("list", "3");
#endregion

string[] result = RedisHelper.LRange("list", 1, 2);//取值结果1,2

RedisHelper.LTrim("list", 1, 3);//只保留1,2,3,其他的移除掉

string[] result1 = RedisHelper.LRange("list", 0, -1);//取集合的所有(取值结果1,2,3,因为上面只保留了1,2,3)

string objval = RedisHelper.LPop("list");//移除并获取列表得第一个元素

#region 直接作为一个数组推进去
TestCls[] array = new TestCls[10];
for (int i = 0; i < 10; i++)
{

TestCls cls = new TestCls();
cls.name = "111" + i;
cls.no = "222" + i;
cls.str = "333" + i;
array[i] = cls;
}
RedisHelper.LPush("list", array);
#endregion

TestCls[] c = RedisHelper.LRange<TestCls>("list", 0, -1);//获取方式跟上面得方式一样获取

List<TestCls> cc = RedisHelper.LRange<TestCls>("list", 0, -1).Where(m => m.no == "2223").ToList();//没有延迟加载,所有的查出来在筛选

(4):set无序集合,取随机数,可定义要取的个数,取交集,并集合,差集(第一个set里面有1,2,3,第二个set里面有3,4,5,取值结果1,2)

RedisHelper.Del("set");
RedisHelper.Del("set1");
RedisHelper.SAdd("set", "111", "222", "333");//存值
RedisHelper.SAdd("set1", "333", "444", "555");//存值

string[] yyy = RedisHelper.SUnion("set", "set1");//并集(第一个集合和第二个集合合并起来,去重)

string[] yyy1 = RedisHelper.SDiff("set", "set1");//差集合(第一个集合里面有,第二个集合里面没有得,以第一个集合为基准)

string[] yyy2 = RedisHelper.SInter("set", "set1");//交集合(第一个集合和第二个集合里面都有的)

string[] yyy = RedisHelper.SMembers("set");//获取集合中的所有元素

string[] yyy1 = RedisHelper.SRandMembers("set", 2);//随机返回集合中的两个元素

string fs= RedisHelper.SPop("set");//随机移除获取集合中的一个元素

 (5)zset有序集合(按分数取值,或者按分数排序后取想要的个数)

RedisHelper.ZAdd("Quiz", (79, "Math"));//存值
RedisHelper.ZAdd("Quiz", (98, "English"));//存值
RedisHelper.ZAdd("Quiz", (87, "Algorithm"));//存值
RedisHelper.ZAdd("Quiz", (84, "Database"));//存值
RedisHelper.ZAdd("Quiz", (59, "Operation System"));//存值

string[] we = RedisHelper.ZRange("Quiz", 0, 2);//按分数排正序以后取0-2三个元素,ZRevRange倒叙

string[] objs = RedisHelper.ZRangeByScore("Quiz", 59, 60);//取59<=分数<=60的元素

(string, decimal)[] objs1 = RedisHelper.ZRangeWithScores("Quiz", 0, -1);//按分数排正序取所有元素(分数,包括值),ZRevRangeWithScores倒叙

string valus= objs1[0].Item1;
decimal score = objs1[0].Item2;

long result= RedisHelper.ZRem("Quiz", "Math");//移除集合中的元素

long coung = RedisHelper.ZCard("Quiz");//返回集合中的元素数量

bool result = RedisHelper.Exists("k");//判断元素是否存在

8:分布式锁

//设置分布式锁,防止多线程在下面得逻辑没有走完其他线程进进入下面逻辑,导致获取到得数据是脏数据,不是最新真实数据,不如抢单,计算商品数量,下面得还没有减去商品数量就开始获取数量了,呢时候获取到得数量不是最新数量,所以要加分布式锁

if(RedisHelper.SetNx("lock", 1))
{
RedisHelper.Expire("lock", 30);//30秒后自动过期,防止死锁
//.......需要走得业务逻辑
RedisHelper.Del("lock");//业务走完,删除分布式锁
}

 

9:修改端口

1在Redis安装目录中找到文件redis.windows.conf并打开

2找到文件中的port 6379 对端口号进行修改并保存

3再次启动Redis,注意:这次启动要在redis-server.exe后加上redis.windows.conf启动。即输入:redis-server.exe redis.windows.conf。

posted @   yingxianqi  阅读(402)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示