zoukankan      html  css  js  c++  java
  • Redis的使用

    什么是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         }
  • 相关阅读:
    VMware6.0-vCenter的安装准备及安装
    VeeamBackup9.5安装与配置
    VeeamOne(Free Edition 9.5 )-安装与配置
    UIDatePicker
    UIImagePicker照片选择器
    UIImageView
    UILabel
    UIScrollView 期本使用方法
    UISegment
    UISlide
  • 原文地址:https://www.cnblogs.com/Jenkin/p/9149235.html
Copyright © 2011-2022 走看看