什么是Redis
radis是一款内存高速缓存数据库、Redis是一个key-value存储系统,它支持丰富的数据类型,如:string、list、set、zset(sorted set)、hash。
Redis特点
1、Redis以内存作为数据存储介质,所以读写数据的效率极高,远远超过数据库。以设置和获取一个256字节字符串为例,它的读取速度可高达110000次/s,写速度高达81000次/s。
2、Redis跟memcache不同的是,储存在Redis中的数据是持久化的,断电或重启后,数据也不会丢失。因为Redis的存储分为内存存储、磁盘存储和log文件三部分,重启后,Redis可以从磁盘重新将数据加载到内存中,这 些可以通过配置文件对其进行配置,正因为这样,Redis才能实现持久化。
3、Redis支持主从模式,可以配置集群,这样更利于支撑起大型的项目,这也是Redis的一大亮点。
Redis是如何存储数据的
1、Redis中是把数据保存到内存中的,但是它也会定期的把数据写会到硬盘中。
2、Redis保存数据有两种方式:
1)、快照模式(Snapshot)
定时快照,即按一定时间将内存中的数据保存到磁盘上。
定量快照,即数据变化一定次数后将数据保存到磁盘上。
你也可以结合这两种方式,比如变化1000次,距离上次保存时间60秒以上才保存数据。
2)、写模式(Append Only File)
这种模式下Redis会把所有修改数据的命令(如Update,Set)等保存到一个只能追加的
ASAP文件中,当Redis重启时,它会把这个文件里的命令重新执行一遍。
3、数据保存在哪里?
1)、数据是保存到一个数据文件中的,具体文件名要看Redis的配置文件,即Redis.conf
config get dbfilename (返回 dump.rdb)
可以使用 config set dbfilename new (修改你要保存数据的文件)
Redis应用场景,它能做什么
1、众多语言都支持Redis,因为Redis交换数据快,所以在服务器中常用来存储一些需要频繁调取的数据,这样可以大大节省系统直接读取磁盘来获得数据的I/O开销,更重要的是可以极大提升速度。
2、拿大型网站来举个例子,比如a网站首页一天有100万人访问,其中有一个板块为推荐新闻。要是直接从数据库查询,那么一天就要多消耗100万次数据库请求。上面已经说过,Redis支持丰富的数据类型,所以这完全 可以用Redis来完成,将这种热点数据存到Redis(内存)中,要用的时候,直接从内存取,极大的提高了速度和节约了服务器的开销。
应用
1、安装Redis服务端
1)、下载Redis安装包,GitHub下载路径 https://github.com/MicrosoftArchive/redis/releases
2)、用管理员身份运行CMD,cd到Redis目录下
3)、输入运行 redis-server.exe redis.windows.conf安装服务器端
4)、打开telnet客户端测试127.0.0.1 6379
5)、写入数据测试,输入set test tjq
输入读取数据命令 get test
数据读取成功,服务端安装完成。
2、C#连接Redis使用
1)、项目中引入Redis为C#提供的API DLL文件
2)、点Button按钮向Redis中存数据
1 private void button3_Click(object sender, EventArgs e) 2 { 3 //通过池(工厂)的方式创建Redis客户端对象 4 public static IRedisClientsManager clientManager = new PooledRedisClientManager(new string[] { "127.0.0.1", "6379" }); 5 public static IRedisClient client = clientManager.GetClient(); 6 7 //1、以string存储 8 //var client = new RedisClient("127.0.0.1", 6379);//创建Redis客户端连接Redis服务器 9 //client.Set<string>("tjq", "jenkin");//以键值对的形式存储数据 10 //string tjq = client.Get<string>("tjq");//读取数据 11 //MessageBox.Show(tjq.ToString());//打印 12 13 14 //2、存储对象 15 //var client = new RedisClient("127.0.0.1", 6379);//创建Redis客户端连接Redis服务器 16 //UserInfo userInfo=new UserInfo() 17 // { 18 // UName = "jinkin", 19 // UPwd="123456" 20 //};//底层使用Json序列化 21 //client.Set<UserInfo>("userInfo",userInfo); 22 //UserInfo user = client.Get<UserInfo>("userInfo"); 23 //Console.WriteLine(user.UName); 24 25 26 //3、HashSet存储对象,没有用Json序列化,上面直接存储对象快 27 //var client = new RedisClient("127.0.0.1", 6379);//创建Redis客户端连接Redis服务器 28 //client.SetEntryInHash("user", "name", "jenkin"); 29 //client.SetEntryInHash("user", "sex", "nan"); 30 31 32 33 //4、通过队列存储,web项目中首选,性能高 先进先出 34 //var client = new RedisClient("127.0.0.1", 6379);//创建Redis客户端连接Redis服务器 35 //client.EnqueueItemOnList("tjq", "jenkin");//以键值对存储到队列中 36 //client.EnqueueItemOnList("tjq", "jenkin2"); 37 //int count = client.GetListCount("name"); 38 //for (int i = 0; i < count; i++) 39 //{ 40 // Console.WriteLine(client.DequeueItemFromList("name"));//出队、打印 41 42 //} 43 44 45 //5、队列存储 先进后出 46 //var client = new RedisClient("127.0.0.1", 6379);//创建Redis客户端连接Redis服务器 47 //client.PUnSubscribe("tjq", "jenkin");//以键值对存储到队列中 48 //client.PUnSubscribe("tjq", "jenkin2"); 49 //int count = client.GetListCount("name"); 50 //for (int i = 0; i < count; i++) 51 //{ 52 // Console.WriteLine(client.PopItemFromList("name"));//出队、打印 53 54 //} 55 56 57 //6、无序存储、求并集、求交集、求差集存储、Sorted set顺序存储,这几种要用的时候在查一下,实在写不完了。 58 59 60 61 }