因为我们在大型互联网项目其中。用户訪问量比較大,比較多。会产生并发问题,对于此。我们该怎样解决呢。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<string>("name", "laowang"); // 存储字符串类型
string userName = client.Get<string>("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<string>("name", "laowang"); // 存储字符串类型
string userName = client.Get<string>("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<string>("name", "laowang"); // 存储字符串类型
string userName = client.Get<string>("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 < length; i++)
{
Console.WriteLine(client.DequeueItemFromList("name1")); //出队
} //栈的使用
client.PushItemToList("name2", "laowang");//入栈
client.PushItemToList("name2", "laoma");
int lentgh = client.GetListCount("name2");
{
Console.WriteLine(client.PopItemFromList("name2"));//出栈
} }
}
}

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<string>("name", "laowang"); // 存储字符串类型
string userName = client.Get<string>("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 < length; i++)
{
Console.WriteLine(client.DequeueItemFromList("name1")); //出队
} //栈的使用
client.PushItemToList("name2", "laowang");//入栈
client.PushItemToList("name2", "laoma");
int lentgh = client.GetListCount("name2");
{
Console.WriteLine(client.PopItemFromList("name2"));//出栈
} //对Set类型进行操作
client.AddItemToSet("a3", "ddd");
client.AddItemToSet("a3", "ccc");
client.AddItemToSet("a3", "ttt");
client.AddItemToSet("a3", "sss");
client.AddItemToSet("a3", "hhh");
System.Collections.Generic.HashSet<string> 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<string>("name", "laowang"); // 存储字符串类型
string userName = client.Get<string>("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 < length; i++)
{
Console.WriteLine(client.DequeueItemFromList("name1")); //出队
} //栈的使用
client.PushItemToList("name2", "laowang");//入栈
client.PushItemToList("name2", "laoma");
int lentgh = client.GetListCount("name2");
{
Console.WriteLine(client.PopItemFromList("name2"));//出栈
} //对Set类型进行操作
client.AddItemToSet("a3", "ddd");
client.AddItemToSet("a3", "ccc");
client.AddItemToSet("a3", "ttt");
client.AddItemToSet("a3", "sss");
client.AddItemToSet("a3", "hhh");
System.Collections.Generic.HashSet<string> 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<string> list = client.GetAllItemsFromSortedSet("a5");
foreach (string str in list)
{
Console.WriteLine(str);
} }
}
}

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

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

Redis简单介绍以及数据类型存储的更多相关文章

  1. Redis简单介绍与数据类型

    介绍 分布式缓存 NoSql:解决高并发.高可用.高可扩展,大数据存储等一系列问题而产生的数据库解决方案. Redis:键值(Key-Value)存储数据库 Redis是使用c语言开发的一个高性能键值 ...

  2. Redis简单介绍

    redis简单介绍 Redis VS key-value缓存产品 Redis支持数据的持久化,能够将内存中的数据保持在磁盘中,重新启动的时候能够再次载入进行使用. Redis不只支持简单的key-va ...

  3. Python redis 简单介绍

    Python redis 简单介绍 1.安装 终端输入: pip(or)pip3.6 install redis 安装成功 2.哈哈,发现我并没有redis服务可以访问,所以到这里,在本机安装了red ...

  4. [freemarker篇]04.简单介绍-基本数据类型

    好几天没有更新博客了,最近一顿乱七八糟的忙!今天简单更新第四章,这里只能说是简单介绍,因为权威的还是需要看Freemarker的官方中文手册! 好几天没有更新博客了,最近一顿乱七八糟的忙!今天简单更新 ...

  5. Redis 简单介绍(知识整理笔记)

    前言: Redis 介绍:轻量级.Key-Value.内存数据库.支持持久化 Redis 数据结构:string(字符串),hash(哈希),list(列表),set(集合)及 zset (sorte ...

  6. Redis简单介绍与安装

    Redis是一个开源,高级的键值存储和一个适用的解决方案,用于构建高性能,可扩展的Web应用程序. Redis有三个主要特点,使它优越于其它键值数据存储系统 - 1) Redis将其数据库完全保存在内 ...

  7. Redis实战——简单介绍

    出自:https://www.cnblogs.com/moonlightL/p/7364107.html Redis简单介绍 Redis是一个开源,高级的键值存储和一个适用的解决方案,用于构建高性能, ...

  8. MySQL存储引擎简单介绍

    MySQL使用的是插件式存储引擎. 主要包含存储引擎有:MyISAM,Innodb,NDB Cluster,Maria.Falcon,Memory,Archive.Merge.Federated. 当 ...

  9. redis学习(一) redis的介绍与安装

    redis简单介绍 redis全称remote-dictionary-server 直译为远程字典服务器, 是一个高性能的key-value存储系统,也被称为数据结构服务器,因为其所存储的数据值(va ...

随机推荐

  1. 国内外移动端web适配屏幕方案总结

    基础知识点 设备像素:设备像素又称物理像素(physical pixel),设备能控制显示的最小单位,我们可以把这些像素看作成显示器上一个个的点. iPhone5的物理像素是640X1136. PS: ...

  2. python学习--python 连接SQLServer数据库(两种方法)

    1. python 学习.安装教程参照: http://www.runoob.com/python/python-tutorial.html 2. 集成开发环境 JetBrains PyCharm C ...

  3. PHP 修改配置文件后重启命名

    centosPHP配置文件路径: /etc/php.ini 修改完配置文件后需要重启php服务: systemctl restart php-fpm

  4. [uiautomator篇] 使用uiautomator需要导入uiautomator库

    1 修改依赖文件:build/gradle( 是在app目录下)而不是和app同级目录的build/gradle androidTestCompile 'com.android.support.tes ...

  5. List容器——ArrayList及常用API

    List: ①   List容器是有序的collection(也称为序列).此接口的用户可以对List容器中每个元素的插入位置进行精确地控制.用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜 ...

  6. 九度oj 题目1365:贝多芬第九交响曲

    现在在一块空的场地上会有一个大的二维棋盘,裁判会给你指定初始位置及一座贝多芬雕像所处的位置,你开始时就站在裁判指定的初始位置处,你的目标是跳到贝多芬雕像的位置.为了给比赛增加一定的难度,你在棋盘上行走 ...

  7. 【Luogu】P1411树(树形高精DP)

    题目链接 我貌似又做了一道高精题呢(笑) 这题的DP方程很好想,设f[i][j]表示i为根的子树,i所在联通块大小为j的最大值,然后乱搞 但是要高精,那么搞是得要高精除的 所以考虑f[i][j]是除以 ...

  8. FZU——2111Min Number(多次交换得到最小数,水题)

    Problem 2111 Min Number Accept: 760    Submit: 1516 Time Limit: 1000 mSec    Memory Limit : 32768 KB ...

  9. BZOJ-1798 维护序列

    线段树.支持区间加.区间乘.区间查询和. 标记下移还有取模要注意. var n,p,q,i,s,t:longint; a:int64; num,n1,n2,n3:array[0..500000] of ...

  10. NOI2016 区间 【线段树】

    题目 在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn].现在要从中选出 m 个区间,使得这 m个区间共同包含至少一个位置.换句话说,就是使得存在一个 x,使得对于每一个被 ...