C# Redis 的基本使用

本文介绍了Redis的基础使用,包括其在高并发场景下的解决方案、优点、适用及不适场景。Redis作为内存数据库,能有效提高读写速度,减轻IO压力,常用于缓存。文章详细阐述了Redis的安装、测试过程,并通过C#展示了StackExchange.Redis库的使用,包括String、List、Hash等数据结构的操作。此外,还讨论了何时在业务中选择使用Redis缓存的决策因素。
摘要由CSDN通过智能技术生成

C# Redis 的基本使用
在这里插入图片描述
Redis 概述
在我们日常的开发中,无不都是使用数据库来进行数据的存储,由于一般的系统任务中通常不会存在高并发的情况,所以这样看起来并没有什么问题,可是一旦涉及大数据量的需求,比如一些商品抢购的情景,或者是主页访问量瞬间较大的时候,单一使用数据库来保存数据的系统会因为面向磁盘,磁盘读/写速度比较慢的问题而存在严重的性能弊端,一瞬间成千上万的请求到来,需要系统在极短的时间内完成成千上万次的读/写操作,这个时候往往不是数据库能够承受的,极其容易造成数据库系统瘫痪,最终导致服务宕机的严重生产问题。
为什么使用
1.解决应用服务器的cpu和内存压力
2.减少io的读操作,减轻io的压力
3.关系型数据库的扩展性不强,难以改变表结构
优点
1.nosql数据库没有关联关系,数据结构简单,拓展表比较容易
2.nosql读取速度快,对较大数据处理快

适用场景
1.数据高并发的读写
2.海量数据的读写
3.对扩展性要求高的数据
不适场景
1.需要事务支持(非关系型数据库)
2.基于sql结构化查询储存,关系复杂
(1)存储 缓存 用的数据;
(2)需要高速读/写的场合使用它快速读/写;
缓存在日常对数据库的访问中,读操作的次数远超写操作,比例大概在 1:9 到 3:7,所以需要读的可能性是比写的可能大得多的。当我们使用SQL语句去数据库进行读写操作时,数据库就会去磁盘把对应的数据索引取回来,这是一个相对较慢的过程。如果我们把数据放在 Redis 中,也就是直接放在内存之中,让服务端直接去读取内存中的数据,那么这样速度明显就会快上不少,并且会极大减小数据库的压力,但是使用内存进行数据存储开销也是比较大的,限于成本的原因,一般我们只是使用 Redis 存储一些常用和主要的数据,比如用户登录的信息等。一般而言在使用 Redis 进行存储的时候,我们需要从以下几个方面来考虑:

(1)业务数据常用吗?命中率如何?如果命中率很低,就没有必要写入缓存;
(2)该业务数据是读操作多,还是写操作多?如果写操作多,频繁需要写入数据库,也没有必要使用缓存;
(3)业务数据大小如何?如果要存储几百兆字节的文件,会给缓存带来很大的压力,这样也没有必要;
在考虑了这些问题之后,如果觉得有必要使用缓存,那么就使用它!使用 Redis 作为缓存的读取逻辑如下图所示:从上图我们可以知道以下两点:

1.当第一次读取数据的时候,读取 Redis 的数据就会失败,此时就会触发程序读取数据库,把数据读取出来,并且写入 Redis 中;
2.当第二次以及以后需要读取数据时,就会直接读取 Redis,读到数据后就结束了流程,这样速度就大大提高了。
安装
Redis 的安装访问地址:https://github.com/ServiceStack/redis-windows/tree/master/downloads
把 Redis 下载下来后找到一个合适的地方解压,就能得到如下图所示的目录(这里空格被替换成了%20…):
在这里插入图片描述
便捷方式
为了方便启动,我们在该目录下新建一个 startup.cmd 的文件,然后将以下内容写入文件:redis-server redis.windows.conf1这个命令其实就是在调用 redis-server.exe 命令来读取 redis.window.conf 的内容,我们双击刚才创建好的 startup.cmd 文件,就能成功的看到 Redis 启动:
在这里插入图片描述
上图的提示信息告诉了我们:
① Redis 当前的版本为 3.0.503;
② Redis 运行在 6379 端口;
③ Redis 进程的 PID 为 14748;
④ 64 位。我们可以打开同一个文件夹下的 redis-cli.exe 文件

这是 Redis 自带的一个客户端工具,它可以用来连接到我们当前的 Redis 服务器,我们做以下测试:如此,我们便在 Windows 的环境下安装好了 Redis在这里插入图片描述
安装后的测试
1.双击启动redis-cil 输入命令测试redis 的安装 set key的名称 value 会返回你ok
2.输入get key的名称就会返回你输入的信息,就证明你安装的redis没有问题
redis的五种数据结构
我首先第一次存进去的是Net分享字符串在后台显示的也是二进制
在这里插入图片描述
1.string 字符串(可以为整形、浮点型和字符串,统称为元素)
2.list 列表(实现队列,元素不唯一,先入先出原则)
3.set 集合(各不相同的元素)
4.hash hash散列值(hash的key必须是唯一的)
5.sort set 有序集合
具体代码实现下文的demo
C#中的使用
1、ServiceStack.Redis,据说是Redis官方推荐使用的驱动类库,但是是收费的。
2、StackExchange.Redis,可能性能要比ServiceStack.Redis差点,但是是免费的。(案例)

1.新建项目控制台程序(RedisDemo)
2.安装StackExchange.Redis 通过netget或者命令安装

在这里插入图片描述
3.新建Redishelper.cs帮助类,(到后面会具体封装,先测试)

class RedisHelper
    {
        private static readonly ConfigurationOptions ConfigurationOptions = ConfigurationOptions.Parse("127.0.0.1:6379,password=123456");
        private static readonly object Locker = new object();
        private static ConnectionMultiplexer _redisConn;

        /// <summary>
        /// 单例获取
        /// </summary>
        public static ConnectionMultiplexer RedisConn
        {
            get
            {
                if (_redisConn == null)
                {
                    // 锁定某一代码块,让同一时间只有一个线程访问该代码块
                    lock (Locker)
                    {
                        if (_redisConn == null || !_redisConn.IsConnected)
                        {
                            _redisConn = ConnectionMultiplexer.Connect(ConfigurationOptions);
                        }
                    }
                }
                return _redisConn;
            }
        }
    }

添加用户实体

public class UserInfoDto
    {
        public int Id { get; set; }
        public string StaffId { get; set; }
        public string StaffName { get; set; }
        public string Password { get; set; }
        public System.DateTime LastLoginTime { get; set; } 
    }

4.String类操作
1.字符串的存放

: 该key值加了冒号,成为文件夹

也可以将对象序列化存入里面
在这里插入图片描述
2.字符串的获取
在这里插入图片描述
3.字符串删除
在这里插入图片描述
4.Hash类型的操作
Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。

Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)
在这里插入图片描述
在这里插入图片描述
为哈希表的每一个域设值

bool HashSet(RedisKey key, RedisValue hashField, RedisValue value

5.List类型的操作在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

ListLength  获取list的长度
ListLeftPop  从顶部拿出数据
ListRightPop 从底部拿出数据
ListRemove 删除list中的单个数值
ListInsertAfter 在某一位置后插入数据
ListInsertBefore 在某一位置前插入数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞天的大鹅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值