热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Redis简单介绍以及数据类型存储

因为我们在大型互联网项目其中。用户訪问量比較大,比較多。会产生并发问题,对于此。我们该怎样解决呢。Redis横空出世,首先,我们来简单的认识一下Redis。具体介绍例如以下所看到的

        因为我们在大型互联网项目其中。用户訪问量比較大,比較多。会产生并发问题,对于此。我们该怎样解决呢。Redis横空出世,首先,我们来简单的认识一下Redis。具体介绍例如以下所看到的:

         Redis是一个开源的。使用C语言编写。面向“键/值”对类型数据的分布式NoSQL数据库系统,特点是高性能。持久存储,适应高并发的应用场景。Redis纯粹为应用而产生,她是一个高性能的Key-Value数据库,而且操作了多种语言的API性能測试将诶过表示SET操作每秒钟可达110000次。GET操作每秒81000次。当然不同的server配置性能不同,redis眼下提供五种数据类型,string(字符串),list(链表),hash(哈希),set(集合)及zset(sorted set)有序集合。

说到Redis,小伙伴们可能会想到Memcached,小编给小伙伴们推荐一篇文章。文中具体的描写叙述了Redis和Memcached,有兴趣的小伙伴能够点击相关链接,进行查看哦`(*∩_∩*)′!

         在前面的介绍中。我们知道,redis眼下提供五种数据类型。string(字符串)、list(链表)、hash(哈希)、set(集合)、zset(sorted set)有序集合,那么这些是怎样进行存储的呢?以下小编来具体的介绍一下。

         第一步,我们须要新建一个空白项目,例如以下图所看到的:

         技术分享
         第二步,加入一个控制台应用程序。例如以下图所看到的:

         技术分享
         第三步,有三个dll文件,redis为c#开放的API,我们就是通过她来操作redis,为此,我们须要引用dll文件。点击浏览,例如以下图所看到的:

         技术分享

         第四步,找到须要引用的dll文件。例如以下图所看到的:

         技术分享

         接着,我们就来看怎样对数据类型进行存储,首先我们来看String类型。String类型是最经常使用的一种数据类型,普通的key/value存储都能够归为此类,一个key相应一个value,string类型二进制的。Redis的string能够包括不论什么数据,比方jpg或者序列化的对象,我们来看具体的代码该怎样编写。代码例如以下所看到的:

         

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ServiceStack.Redis;

namespace RedisApp
{
    class Program
    {
        static void Main(string[] args)
        {
            //字符串类型
            var client = new RedisClient("local", 6379); //首先new一个客户端
            client.Set("name", "laowang");       // 存储字符串类型
            string userName = client.Get("name");  //通过get取值
            Console.WriteLine(userName);
            Console.ReadKey();

         }
    }
}

        接着,我们来看哈希表的存储,hash是一个string类型的field和value的映射表。hash特别适合存储对象,相对于讲对象的每一个字段存成单个string类型。一个对象存储在hash类型中会占用更少的内存。而且能够更方便的存取整个对象。

作为一个key  value存在,非常多开发人员自然的使用set/get方式来使用Redis。实际上这并非最优化的用法,尤其在未启用VM情况下,Redis全部数据须要放入内存,节约内存尤其重要,我们来看具体的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ServiceStack.Redis;

namespace RedisApp
{
    class Program
    {
        static void Main(string[] args)
        {
            //字符串类型
            var client = new RedisClient("local", 6379); //首先new一个客户端
            client.Set("name", "laowang");       // 存储字符串类型
            string userName = client.Get("name");  //通过get取值
            Console.WriteLine(userName);
            Console.ReadKey();

            //哈希存储结果
            client.SetEntryInHash("userinfoId", "name", "zhangsan");
            client.GetHashKeys("userinfoId"); //获取全部的key
            client.GetHashValues("userinfoId"); //获取全部的值

          }
    }
}
        我们再来看list类型。list是一个链表结构的,主要功能是push。pop获取一个范围的左右的值等,操作中key理解为链表名称。Redis的list类型事实上就是一个每一个字元素都是string类型的双向链表。我们能够通过push,pop操作从链表的头部或者尾部加入删除元素,这样list既能够作为栈。也能够作为队列。Redis list的实现为一个双向链表。既能够支持反向查找和遍历。更方便操作,只是带来了部分额外的内存开销,Redis内部的非常多实现。包括发送缓冲队列等也都是用的这个数据结构,代码例如以下所看到的:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ServiceStack.Redis;

namespace RedisApp
{
    class Program
    {
        static void Main(string[] args)
        {
            //字符串类型
            var client = new RedisClient("local", 6379); //首先new一个客户端
            client.Set("name", "laowang");       // 存储字符串类型
            string userName = client.Get("name");  //通过get取值
            Console.WriteLine(userName);
            Console.ReadKey();

            //哈希存储结果
            client.SetEntryInHash("userinfoId", "name", "zhangsan");
            client.GetHashKeys("userinfoId"); //获取全部的key
            client.GetHashValues("userinfoId"); //获取全部的值

            //队列使用
            client.EnqueueItemOnList("name1", "laowang");//入队
            client.EnqueueItemOnList("name1", "laoma");//入队
            int length = client.GetListCount("nama1");
            for (int i = 0; i 
        Set类型
        她是string类型的无序集合。set是通过hash table实现的。加入、删除和查找,对集合我们能够取并集、交集、差集。对Set类型进行操作。例如以下所看到的:

        

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ServiceStack.Redis;

namespace RedisApp
{
    class Program
    {
        static void Main(string[] args)
        {
            //字符串类型
            var client = new RedisClient("local", 6379); //首先new一个客户端
            client.Set("name", "laowang");       // 存储字符串类型
            string userName = client.Get("name");  //通过get取值
            Console.WriteLine(userName);
            Console.ReadKey();

            //哈希存储结果
            client.SetEntryInHash("userinfoId", "name", "zhangsan");
            client.GetHashKeys("userinfoId"); //获取全部的key
            client.GetHashValues("userinfoId"); //获取全部的值

            //队列使用
            client.EnqueueItemOnList("name1", "laowang");//入队
            client.EnqueueItemOnList("name1", "laoma");//入队
            int length = client.GetListCount("nama1");
            for (int i = 0; i  hashset = client.GetAllItemsFromSet("a3");
            foreach (string str in hashset)
            {
                Console.WriteLine(str);
            }

        }
    }
}
       Sorted Set类型
       Sorted set是set的一个升级版本号。她是在set的基础撒花姑娘添加了一个顺序的属性。这一个属性在加入改动。元素的时候能够指定,每次指定后。zset(表示有序集合)会自己主动又一次按新的值调整顺序,能够理解为有序列的表,一列存value。一列存顺序。操作中key理解为zset的名字。

Redis sorted set的使用场景与set相似。差别是set不是自己主动有序的,而sorted set能够通过用户额外提供一个优先级(scord)的參数来为成员排序,而且是插入有序的,即自己主动排序。当你须要一个有序的而且不反复的集合列表。那么能够选择sorted set数据结构。代码例如以下所看到的:

       

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ServiceStack.Redis;

namespace RedisApp
{
    class Program
    {
        static void Main(string[] args)
        {
            //字符串类型
            var client = new RedisClient("local", 6379); //首先new一个客户端
            client.Set("name", "laowang");       // 存储字符串类型
            string userName = client.Get("name");  //通过get取值
            Console.WriteLine(userName);
            Console.ReadKey();

            //哈希存储结果
            client.SetEntryInHash("userinfoId", "name", "zhangsan");
            client.GetHashKeys("userinfoId"); //获取全部的key
            client.GetHashValues("userinfoId"); //获取全部的值

            //队列使用
            client.EnqueueItemOnList("name1", "laowang");//入队
            client.EnqueueItemOnList("name1", "laoma");//入队
            int length = client.GetListCount("nama1");
            for (int i = 0; i  hashset = client.GetAllItemsFromSet("a3");
            foreach (string str in hashset)
            {
                Console.WriteLine(str);
            }

            //Sorted Set类型
            client.AddItemToSortedSet("a5", "ffff");
            client.AddItemToSortedSet("a5", "bbbb");
            client.AddItemToSortedSet("a5", "gggg");
            client.AddItemToSortedSet("a5", "cccc");
            client.AddItemToSortedSet("a5", "aaaa");
            System.Collections.Generic.List list = client.GetAllItemsFromSortedSet("a5");
            foreach (string str in list)
            {
                Console.WriteLine(str);
            }

        }
    }
}
       小编寄语:该博客。小编主要简单的介绍了一下Redis和数据存储的类型,在redis中另一个非常重要的事儿,几乎忘了,文件并发(日志处理),多线程操作同一个文件时会出现并发问题,解决的一个办法就是给文件加锁(lock),可是这种话,一个线程操作文件时,其它的都得等待,这种话性能非常差,另外一个解决方式。就是先将数据放在队列中,然后开启一个线程,负责从队列中取出数据,再写到文件里。

对于这块的内容小编还不是非常理解。还请各位小伙伴多多不吝赐教哦`(*∩_∩*)′!

Redis简单介绍以及数据类型存储


推荐阅读
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 在project.properties添加#Projecttarget.targetandroid-19android.library.reference.1..Sliding ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
author-avatar
so直接离我远点儿
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有