我知道有些地方没说到位,希望大神们提出来,我会吸取教训,大家共同进步!
- 注册时邮件激活的部分使用Redis
- 发送邮件时使用Redis的消息队列,减轻网站压力。
- 使用Lucene.Net在进行分词时使用Redis消息队列和多线程来避免界面卡死等性能问题。
- 请大家先思考一个问题:这个问题在大并发、高负载的网站中必须考虑!大家思考如何让速度更快。
三种方法:(1)数据库(2)页面静态化(3)Redis、Memcached
第二部分:Redis是什么
概述:redis是一种nosql数据库,他的数据是保存在内存中,同时redis可以定时把内存数据同步到磁盘,即可以将数据持久化,并且他比memcached支持更多的数据结构(string,list列表[队列和栈],set[集合],sorted set[有序集合] hash(hash表))
2.1介绍:
- Redis是一个高性能的key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。
- Redis 很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Python,Ruby,Erlang,PHP客户端,使用很方便。(注: 摘自百度全科),1.主要是支持持久化2.支持更多数据结构 3.支持主从同步
- Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。
2.2 memcached和redis的比较:
2.3Redis的优势:
2.4Redis在windows下的安装:
注:关于Redis的安装网上有很多文章,讲的要比我的好,建议大家去看那些大神的文章,这里我只简单介绍一下。
如果你看到有6379 在监听,说明ok(默认的端口号时候:6379)
正确使用Redis的姿势:Redis在Linux(Ubuntu16.04)下的安装(可以直接忽略上面在Windows上Redis的操作,这里使用的Redis版本为Redis4.0.1稳定版)
(1)到官网上下载安装包 redis-stable.tar.gz https://redis.io/,官网只提供Linux版本,没有Windows版本的,只要Windows版本的都是微软移植过来的,而且官方推荐使用Linux版本。
(2)使用WinSCP把下载的安装包,放到Ubuntu中对应的目录中。
如果在登录的过程中有弹窗,不要慌,点击是即可。登录成之后的界面:
使用Linux的指令(mkdir src)创建一个目录,来放Redis的安装包:
由于之前测试,已经建了src目录,所以在这里我们可以直接把安装包,拖过来即可。
(3)解压
进入到src目录,执行 tar -zxvf redis-stable.tar.gz 解压,解压的过程就不截图了,解压后的结果为:
(4)编译源代码
进入到redis-stable目录中,再执行make
(5)使用ls指令,可以看到该目录下所有的文件:
该目录下用一个src的目录,使用cd src进入到该目录,再使用 ls指令
将 redis-benchmark(压力测试工具)、redis-check-aof(检查.aof文件完整性的工具)、redis-check-dump(检查数据文件完整性的工具)、redis-sentinel(监控集群运行状态)、redis-server(服务端)、redis-cli(客户端),还有一个文件 redis.conf 也拷贝到 myredis该文件在src的上级目录
拷贝到你的工作目录myredis 中:cp redis-* /home/gz/myredis/
进入到myredis目录中,发现有多余的文件,然后再使用:
是不是干净多了。
(6)启动Redis
进入到myredis目录中,使用 ./redis-serve redis.conf来启动服务
如果我们的6379端口被监听,说明我们的服务已经成功启动了。
注意:
默认是前端启动,占用你的控制台,我们修改 redis.conf 文件为后台进行,将 daemonize no 修改成yes。
(7)C#连接Redis简单测试一下:
在这里回答一下@Partialsky的问题:用StackExchange.Redis ,而不是ServiceStack.Redis,因为StackExchange.Redis依赖组件少,而且操作更接近原生的redis操作,ServiceStack封装的太厉害,而且之前收费,反正最好还是用StackExchange.Redis。
step1:使用VS2017新建一个控制台程序
step2: Install-Package StackExchange.Redis
step3:编写代码:
1 using StackExchange.Redis;
2 using System;
3 using System.Collections.Generic;
4 using System.Linq;
5 using System.Text;
6 using System.Threading.Tasks;
7
8 namespace LinuxRedis
9 {
10 class Program
11 {
12 static void Main(string[] args)
13 {
14 using (ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("192.168.0.109:6379"))
15 {
16
17 IDatabase db = redis.GetDatabase();
18 db.StringSet("guozheng", "hahaha");
19
20 var age = db.StringGet("guozheng");
21 Console.WriteLine(age);
22 }
23
24
25
26
27
28 Console.ReadKey();
29 }
30 }
31 }
测试结果:
再到Linux上看看输入是否存入到Redis中:
启动服务:
./redis-server redis.conf
连接到redis
./redis-cli -h ip地址 -p 端口
数据也成功存入到redis中了。好了,C#如何简单操作Redis就讲到这里。如果大家对如何安装Ubuntu和Linux的操作指令不太清楚,可以先看看其他园友的文章,有时间根据大家的反应,再去写篇关于Linux的文章。
2.5Redis的数据结构:
前言:Redis中存储的数据都为字符串格式的。下面来分别介绍Redis中常用的数据结构。
- string数据结构
太简单了,略过。
- list数据结构
概述: 什么是list ,list是一种数据结构,可以当做队列和栈来使用。
当你从左边添加数据,再从左边取数据,就模拟出栈;当你从右边添加数据,再从左边取数据,就模拟出队列。因此Redis真的很强大,看到栈和队列这样的数据结构,你难道就不激动吗?这样的数据结构太TM好了,能帮我们处理很多棘手的问题。这里我先卖个关子,下面会介绍我在项目中是如何使用Redis解决棘手的问题。
- set集合
和list结构差不多,这里不再啰嗦。
下面就是操作set的一些命令。
- hash数据结构
图中的"user:100"就相当于key,而它所指向的类似于表结构的数据就是value,这样的数据结构有利于存储对象数据。也是非常常用的方法。
强烈推荐: Redis常用命令文档:http://redisdoc.com/ 文档上有详细的操作案例和高级用法。
注意:
redis指令不区分大小写,但是出于规范考虑,应该使用大写
redis中存放的键是区分大小写的.
第三部分:Redis如何使用
3.1C#中如何使用Redis来解决邮箱激活的实效性。
首先思考个问题:为什么要进行邮件激活?激活码该存到哪里?(大家先思考,我不直接说,这样通过下面的例子你会体会的更深。)
原因:用户在注册的时候,虽然正则表达式能检查邮箱的格式是否正确,但是正则检查不了邮箱是否可用,于是让用户进行激活,就能避免用户填写一个不可用的邮箱。
传统方法的代码实现:
1)数据库表的设计:
在用户注册的表中添加一个字段:IsActive用来判断激活的状态。
该表用来存放激活码。
代码实现:
BLL层代码:
1 /// <summary>
2 /// 2016-08-30
3 /// 注册的时候看看是否已经存在该用户
4 /// </summary>
5 /// <param name="username"></param>
6 /// <returns></returns>
7 public T_Users GetByUserName(string username)
8 {
9 T_UsersDAL userDal = new T_UsersDAL();
10 return userDal.GetByUserName(username);
11 }