C# 用户登录状态验证 - Redis的使用

757 阅读3分钟

目的:

在制作用户登录功能的时候,经常要根据各种各样的条件判断判断当前用户是否有权限登录,或者根据有效时间判断用户是否能保持登录状态。

常见添加token值的方式实现,比较简单的方法是在前端浏览器保留localStroage键值对。

但是这个方法的缺点是相对不安全,且功能比较单一。

为此,将token储存在服务器端是相对稳妥的方案。

那么如何存储将是下一个需要考虑的问题。可以将其直接保存在数据库中,但是因为登录或者校验请求会频繁发送,经常读写数据库会降低效率。本文中介绍的Redis就是处理token值的一个不错的方案。

本文将简要介绍Redis,以及在C#中通过代码调用的方法。

Redis介绍:

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication)LUA脚本(Lua scripting), LRU驱动事件(LRU eviction)事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。

官网链接:www.redis.cn/

因为官方不建议在windows系统下使用,所以没有提供windows平台下的客户端,不过可以在GitHub上找到,链接为: Releases · microsoftarchive/redis · GitHub

具体的安装方法和注意细节参考:www.cnblogs.com/peterYong/p…

C#中的使用

首先通过NuGet安装ServiceStack.Redis包;

随后可在程序中using ServiceStack.Redis或者直接ServiceStack.Redis.RedisClient来创建一个RedisClient对象,如:

image.png

构造方法两个参数分别是ip地址和端口号,端口好就是Redis安装的时候默认指定的6379,可改;

添加键值对

添加键值对的命令行语句为:SET [键] [值]

对应的C#函数:public bool Set(string key, T value)

使用示例:

image.png

这里键为token,值为字符串类型的"123";

键必须是字符串;

查找键值对

添加键值对的命令行语句为:GET [键]

对应的C#函数:public T Get(string key)

使用示例:

image.png

这里键为token,指定返回类型为string;

如果存在该键,则返回对应的键值,按照上面添加的键值的话,上面的KeyValue 返回值应为字符串类型的"123";

如果没有找到该键,则返回null(如果是int类型会返回0,其他类型可自行测试返回的基础值);

键必须是字符串;

设置过期时间(秒)

为键值对添加过期时间(秒)的命令行语句为:EXPIRE [键]

对应的C#函数: public bool Expire(string key, int seconds)

使用示例:

image.png

还有用毫秒计数的命令,请自行查阅资料;

其他命令

参考菜鸟教程:Redis 键(key) | 菜鸟教程 (runoob.com)