你好,游客 登录
背景:
阅读新闻

大数据高性能数据库Redis在Windows上的配置

[日期:2014-12-08] 来源:博客园  作者:Sunnier [字体: ]

Redis学习笔记----Redis在windows上的安装和配置

Redis简介

   redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、 list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是 原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性 的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。Redis一般部署在linux 服务器上,但是我们也可以在windows上学习他的安装和配置。

Redis性能

下面是官方的bench-mark数据:
测试完成了50个并发执行100000个请求。
设置和获取的值是一个256字节字符串。
Linux box是运行Linux 2.6,这是X3320 Xeon 2.5 ghz。
文本执行使用loopback接口(127.0.0.1)。
结果:读的速度是110000次/s,写的速度是81000次/s
 

Redis在windows上的安装和配置

 
首先下载Redis完整包。

Redis完整包下载

解压下载后的完整包,打开MasterRedis文件夹(此文件夹为主Redis数据库文件夹,后面会介绍)。

redis.conf文件为Redis服务的配置文件,可以根据需要进行配置。

 

  下面是redis.conf的主要配置参数的意义:
daemonize:是否以后台daemon方式运行
 
pidfile:pid文件位置
 
port:监听的端口号
 
timeout:请求超时时间
 
loglevel:log信息级别
 
logfile:log文件位置
 
databases:开启数据库的数量
 
save * *:保存快照的频率,第一个*表示多长时间,第二个*表示执行多少次写操作。在一定时间内执行一定数量的写操作时,自动保存快照。可设置多个条件。
 
rdbcompression:是否使用压缩
 
dbfilename:数据快照文件名(只是文件名,不包括目录)
 
dir:数据快照的保存目录(这个是目录)
 
appendonly:是否开启appendonlylog,开启的话每次写操作会记一条log,这会提高数据抗风险能力,但影响效率。
 
appendfsync:appendonlylog如何同步到磁盘(三个选项,分别是每次写都强制调用fsync、每秒启用一次fsync、不调用fsync等待系统自己同步)

  下面给出配置文件的详细说明:

 

点击展开说明

打开Redis服务 

 

打开命令行进入MasterRedis文件夹目录。比如我下载的文件夹路径为 E:\Redis\RedisFull,就在命令行输入:

 

接着输入:

此时会看到进程里多了一个

说明Redis服务开启成功。

Redis主从服务简介

 

Redis主从服务原理:

   在Slave启动并连接到Master之后,它将主动发送一个SYNC命令。此后Master将启动后台存盘进程,同时收集所有接收到的用于修改数据集 的命令,在后台进程执行完毕后,Master将传送整个数据库文件到Slave,以完成一次完全同步。而Slave服务器在接收到数据库文件数据之后将其 存盘并加载到内存中。此后,Master继续将所有已经收集到的修改命令,和新的修改命令依次传送给Slaves,Slave将在本次执行这些数据修改命 令,从而达到最终的数据同步。如果Master和Slave之间的链接出现断连现象,Slave可以自动重连Master,但是在连接成功之后,一次完全 同步将被自动执行。

Redis主从服务注意事项:    

 1). 同一个Master可以同步多个Slaves。
   2). Slave同样可以接受其它Slaves的连接和同步请求,这样可以有效的分载Master的同步压力。
   3). Master Server是以非阻塞的方式为Slaves提供服务,所以在Master-Slave同步期间,客户端仍然可以提交查询或修改请求。
   4). Slave Server同样是以非阻塞的方式完成数据同步。在同步期间,如果有客户端提交查询请求,Redis则返回同步之前的数据。
   5). 为了分载Master的读操作压力,Slave服务器可以为客户端提供只读操作的服务,写服务仍然必须由Master来完成。
   6). Master可以将数据保存操作交给Slaves完成,从而避免了在Master中要有独立的进程来完成此操作。

 

Redis主从服务配置

 

打 开SlaveRedis文件夹,修改redis.conf文件的port项,修改值任意,但是不能和主服务的port相同(下载的完整包中我已经修改 过),bind项改为主服务器的IP(本地测试改为127.0.0.1),slaveof项改为127.0.0.1 6379(已改)。

打开命令行输入命令:

 

会发现进程中有2个redis-server.exe进程。

Redis主从同步C#代码测试

 

首先下载Redis的C#组件,用于操作Redis数据库。

Redis4C#包下载

新建一个控制台项目。

添加Redis4C#包内3个程序集的引用。

添加测试代码。

 

复制代码
 1        var client = new RedisClient("127.0.0.1", 6379);
 2             client.Set<string>("6379_1", "test");
 3             client.Set<string>("6379_2", "test");
 4  5             string name = client.Get<string>("6379");
 6             Console.WriteLine(name);
 7 
 8             //Redis队列
 9             client.EnqueueItemOnList("jayjay", "12345");
10             client.EnqueueItemOnList("jayjay", "12345");
11 12 
13             int length1 = client.GetListCount("jayjay");
14             for (int i = 0; i < length1; i++)
15             {
16                 Console.WriteLine(client.DequeueItemFromList("jayjay"));
17             }
18 
19 
20             //Redis压栈出栈
21             client.PushItemToList("name", "jayjay6379");
22             client.PushItemToList("name", "jayjay6379");
23 
24             int length2 = client.GetListCount("name");
25             for (int i = 0; i < length2; i++)
26             {
27                 Console.WriteLine(client.PopItemFromList("name"));
28             }
29 
30             Console.ReadKey();
复制代码

 

运行代码。

将主服务端口6379改为从服务端口6381,读出刚刚放入的数据,例如:

1             var client = new RedisClient("127.0.0.1", 6381);
2             string name = client.Get<string>("6379_1");
3             Console.WriteLine(name);

能读到说明主服务保存的数据已经同步到从服务中。

PS:1.Redis文件夹路径中不能出现中文(命令行采用的是ANSIC编码,中文会出错)!

 

   2.dump.rdb是数据快照文件,主服务的数据快照并不会立即同步到从服务的数据快照中!

本文是我在学习Redis时的一些积累,目的是和各种园友分享经验,如果有什么错误或者不完善的地方欢迎大家指出!

原文链接:http://www.cnblogs.com/sunniest/p/4150076.html





收藏 推荐 打印 | 录入: | 阅读:
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数
点评:
       
评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款