redis数据结构

释放双眼,带上耳机,听听看~!

非关系型数据库,存储效率高,高并发、分布式。

MongoDB和Redis都是NoSQL,采用结构型数据存储。

2.5Redis的数据结构:

前言:Redis中存储的数据都为字符串格式的。下面来分别介绍Redis中常用的数据结构。

  • string数据结构

太简单了,略过。

  •  list数据结构

概述: 什么是list ,list是一种数据结构,可以当做队列和栈来使用。

redis数据结构

当你从左边添加数据,再从左边取数据,就模拟出栈;当你从右边添加数据,再从左边取数据,就模拟出队列。因此Redis真的很强大,看到栈和队列这样的数据结构,你难道就不激动吗?这样的数据结构太TM好了,能帮我们处理很多棘手的问题。这里我先卖个关子,下面会介绍我在项目中是如何使用Redis解决棘手的问题。

  • set集合

和list结构差不多,这里不再啰嗦。

下面就是操作set的一些命令。

redis数据结构

  • hash数据结构

redis数据结构

图中的"user:100"就相当于key,而它所指向的类似于表结构的数据就是value,这样的数据结构有利于存储对象数据。也是非常常用的方法。

强烈推荐:  Redis常用命令文档:http://redisdoc.com/  文档上有详细的操作案例和高级用法。

 

 注意:

redis指令不区分大小写,但是出于规范考虑,应该使用大写
redis中存放的键是区分大小写的.

 

第三部分:Redis如何使用

 3.1C#中如何使用Redis来解决邮箱激活的实效性。

首先思考个问题:为什么要进行邮件激活?激活码该存到哪里?(大家先思考,我不直接说,这样通过下面的例子你会体会的更深。)

原因:用户在注册的时候,虽然正则表达式能检查邮箱的格式是否正确,但是正则检查不了邮箱是否可用,于是让用户进行激活,就能避免用户填写一个不可用的邮箱。

 

传统方法的代码实现:

1)数据库表的设计:

redis数据结构

在用户注册的表中添加一个字段:IsActive用来判断激活的状态。

redis数据结构

该表用来存放激活码。

 代码实现:

BLL层代码:

redis数据结构 View Code

redis数据结构 View Code

DAL层代码:

redis数据结构 View Code

redis数据结构 View Code

UI层代码:

redis数据结构 View Code

一般处理程序:

redis数据结构 View Code

邮件发送代码:

redis数据结构 View Code

好好思考一下这样写的缺陷在哪?不仅有缺陷而且还有安全问题,有哪些安全问题?如果用户量大的话这样设计是否合理?会对什么有压力?如果不合理该如何优化?

首先我们来分析一下:

上面的方法是在用户表的基础上再增加一个字段,用来存激活码。这样合理吗?
由于激活码只用一次,所以在用户表的基础上再增加一个字段会麻烦一下,之前的功能会有影响。那到底该怎么解决比较好?

这时候Redis的好处就非常明显了,key-value数据库,并且还能设置数据的有效时间,很好的解决了上面遇到的问题,只需要改动上面很少的一部分代码就可以实现想要的功能。

代码如下:

redis数据结构 View Code

如果到这里真的就OK了吗?大家可以想想为什么我要添加下面的这段代码:


1
2
3
4
5
6
7
8
1
21 //把注册用户信息,放入消息队列。便于另外一个程序来获取消息队列数据,发送邮件
32             using (var client = RedisManager.ClientManager.GetClient())
43             {
54                 string info = username + "|" + email;
65                 client.EnqueueItemOnList("NewRegUsers", info);
76             }
8

给TA打赏
共{{data.count}}人
人已打赏
安全运维

OpenSSH-8.7p1离线升级修复安全漏洞

2021-10-23 10:13:25

安全运维

设计模式的设计原则

2021-12-12 17:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索