redis(一)--认识redis

        Redis官网对redis的定义是:“Redis is an open source, BSD licensed, advanced key-value cache and store”,可以看出,Redis是一种键值系统,可以用来缓存或存储数据。Redis是“Remote Dictionary Server”(远程字典服务)的缩写,提供了字符串(string),列表(list),哈希(hash),集合(set)和有序集合(sorted set)等5种数据结构,这些数据结构使它成为一种便于使用的键值系统。

        作为Redis提供的最简单的数据结构,字符串示意图及其常用命令如下图所示:

图1

        可见,Redis字符串类型实际上类似于C++中的map,一个键对应一个值。列表类型则是一种相对高级的数据结构,其示意图和常用命令如下图所示:

       

图2

        列表实际上由一个双向链表实现,所以在列表两端插入或删除数据效率极高,可以用于实现类似于微博、人人网上的“新鲜事”功能。 Redis提供的一个更有趣的结构称为哈希,其示意图和常用命令如下图所示:

图3

        一个哈希实际上是一组键值对的集合,哈希本身的键是“父键”,哈希中包含的若干字段是“子键”,每个“子键”都有相应的值。“子键”之间并没有一定的联系,但是它们共同组成了一个完整的哈希结构。我们可以把一个哈希看做关系数据库中的一行,哈希的每个子键对应行的一个字段。因此,当把关系数据库中的数据缓存至Redis时,使用哈希结构可能会带来方便。需要注意的是,哈希结构内部的子键之间是没有顺序关系的。Redis提供的另一个无顺序关系的结构是集合,其示意图和常用命令如下图所示:

图4

        集合中的数据满足唯一性和无序性。集合在Redis内部是用哈希表实现的,所以插入和删除操作的时间复杂度均为O(1)。Redis为集合提供了求交并差等运算命令,使用起来非常方便。与集合密切相关的另一个数据结构是有序集合,其示意图和常用命令如下图所示:

图5

        有序集合与集合的最大差异在于有序集合中的每个数据都有一个对应的分数,集合中的元素就是按照这些分数进行排序的。从结构功能和使用方法上来看,有序集合可能是Redis提供的5种数据结构中最高级的一种。

        Redis是一种内存数据库,这使其在数据存取效率方面表现突出。由于内存中的数据时刻面临丢失的危险,Redis提供了两种持久化机制,及时将内存中的数据写入硬盘。第一种机制为RDB,利用存储快照的方式把内存数据定期写入硬盘;第二种机制为AOF,利用写日志的方式,每执行一条更改Redis数据的命令,就在日志里附加上该命令并保存在硬盘上。Redis默认开启RDB模式,关闭AOF模式,这是因为AOF更加耗时。但是,如果对数据安全要求极高,无法承担任何数据丢失的后果,AOF模式就变成了持久化的首选

        当然,即使Redis具备持久化机制,但是一旦本地硬盘损坏,数据丢失依然在所难免。所以,Redis又提供了复制功能,作用是将一个主数据库(master)的数据自动同步到多个从数据库(slave),从而尽可能防止数据丢失。Redis主从机制可以简单描述为:从数据库启动后,先向主数据库发送SYNC命令;主数据库接到SYNC命令后就开始保存快照,在此期间,所有发给主数据库的命令都被缓存起来;快照保存完成后,主数据库把快照和缓存的命令一起发给从数据库;从数据库保存主数据库发来的快照文件,并依次执行主数据库发来的缓存命令。在同步过程中,从数据库不会阻塞,它默认使用同步之前的数据继续响应客户端发来的命令。

        事务是Redis提供的特性之一。首先利用MULTI命令通知Redis,接下来的若干命令属于同一事务;然后输入若干命令,这些命令都被放入命令队列而不会被立即执行;最后,利用EXEC命令通知Redis,属于同一事务的所有命令均已输入完成,现在开始执行该事物。属于同一个事务的所有有效命令或者全部被执行,或者全部不执行,且在执行过程中不会插入其他命令。管道(pipeline)是Redis提供的另一个特性。该特性使Redis能够一次性接收多个命令,执行之后再一次性返回结果。这样能够减少客户端与Redis服务器的通信次数,从而降低往返时延。

        除事务和管道以外,Redis还提供了很多其他特性,如设置键的过期时间,利用BLPOP/BRPOP命令实现优先级队列,利用PUBLISH/SUBSCRIBE命令实现消息订阅和发布等,这里不再赘述。

        Redis由ANSI C写成,能够运行在包括Linux和OS X在内的大部分POSIX系统上,官方推荐的操作系统为linux。Redis没有官方的Windows版本,但是微软移植并维护了一个能够运行在Windows上的Redis并放在github上(https://github.com/MSOpenTech/redis)。

        Redis的编程接口被称为客户端(clients),绝大部分主流编程语言都有官方推荐的客户端。下图中,具有Redis官方推荐客户端的语言标为绿色,没有官方推荐客户端的标为蓝色:

图6

        由于Redis没有官方推荐的C++客户端,因此可以使用C客户端予以代替。官方推荐的C客户端是hiredis,可以从github上找到(https://github.com/redis/hiredis)。

        作为一款功能强大,效率极高的NoSQL数据库,Redis已被包括新浪微博,知乎,Stackoverflow,暴雪和Flickr在内的多家公司成功用于实战。

转载于:https://www.cnblogs.com/HHR-SUN/p/7047173.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/254322.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

转:如何用gcc编译生成动态链接库*.so文件 动态库

转:如何编译.so动态库问:我源文件为main.c, x.c, y.c, z.c,头文件为x.h,y.h,z.h如何编译成.so动态库?编译器用gcc最好能给出详细参数解释,谢谢答:# 声称动代连接库,假设名称为libtest.sogcc x.c y.c z.c -f…

工业镜头的主要参数与选型

文章目录简介1、镜头的分类(1) 以镜头安装分类(2) 以摄像头镜头规格分类(3) 以镜头光圈分类(4) 以镜头的视场大小分类(5) 从镜头焦距上分2、选择镜头的技术依据(1) 镜头的成像尺寸(2) 镜头的分辨率(3) 镜头焦距与视野角度(4) 光圈或通光量3、变焦镜头(zoom lens&…

SQLSEVER 中的那些键和约束

SQL Server中有五种约束类型,各自是 PRIMARY KEY约束、FOREIGN KEY约束、UNIQUE约束、DEFAULT约束、和CHECK约束。查看或者创建约束都要使用到 Microsoft SQL Server Managment Studio。1. PRIMARY KEY约束 在表中常有一列或多列的组合,其值能唯一标识表…

数据库 sqlite 进阶

http://www.cppblog.com/czy463/archive/2013/12/16/204816.html 董淳光 前序: Sqlite3 的确很好用。小巧、速度快。但是因为非微软的产品,帮助文档总觉得不够。这些天再次研究它,又有一些收获,这里把我对 sqlite3 的研究列出来&a…

形象的列举-C# 枚举

文章目录简介例子分析点拨博主写作不容易,孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 简介 枚举类型用于声明一组命名常数。 定义枚举类型语法格式如下:enum 枚举数组名{枚举成员列表};例如: enum week{星期一,星期二…

Confluence 6 手动备份站点

2019独角兽企业重金招聘Python工程师标准>>> Confluence 被配置自动备份数据,使用压缩的 XML 格式。同时你也可以通过 Confluence 的 管理员控制台(Administration Console)手动进行备份。 你需要具有 System Administrator 权限才…

编写高质量的Makefile

分类: c/c研究 GNU&LINUX2010-09-12 15:31163人阅读 评论(0)收藏举报源地址 :http://acm.hrbeu.edu.cn/forums/index.php?showtopic1827&st0&gopid8924&#entry8924 一、前言 回想自己的第一个Makefile,是这个样子的 …

第六篇:python基础之文件处理

第六篇:python基础之文件处理 阅读目录 一.文件处理流程二.基本操作2.1 文件操作基本流程初探2.2 文件编码2.3 文件打开模式2.4 文件内置函数flush2.5 文件内光标移动2.6 open函数详解2.7 上下文管理2.8 文件的修改一.文件处理流程 打开文件,得到文件句柄…

前端每日实战:56# 视频演示如何用纯 CSS 描述程序员的生活

效果预览 按下右侧的“点击预览”按钮可以在当前页面预览,点击链接可以全屏预览。 https://codepen.io/comehope/pen/YvYVvY 可交互视频 此视频是可以交互的,你可以随时暂停视频,编辑视频中的代码。 请用 chrome, safari, edge 打开观看。 ht…

从特殊到一般-C#中的类

文章目录类的概念类的定义实例例子分析类的成员数据成员属性成员方法成员静态成员博主写作不容易,孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 类的概念 在日常生活中,类是对具有相同特性的一类是物的抽象。比如水果是一个类,它是对…

Chapter 1 First Sight——30

The girl sitting there giggled. Id noticed that his eyes were black — coal black. 那个坐在那里的女孩笑着。我注意到她的眼睛是很色的--炭黑色的。 Mr. Banner signed my slip and handed me a book with no nonsense about introductions. Banner 先生签了我的名字然后…

GPU 与CPU的作用协调,工作流程、GPU整合到CPU得好处

在不少人的心目中,显卡最大的用途可能就只有两点——玩游戏、看电影,除此之外,GPU并没有其他的作用了。但是随着微软IE9的正式发布,不少人突然发现,微软一直提到一个名词:GPU硬件加速,从而也让不…

[luoguP1029] 最大公约数和最小公倍数问题(数论)

传送门 一.暴力枚举&#xff08;加了点优化&#xff09; #include <cstdio>int x, y, ans;inline int gcd(int x, int y) {return !y ? x : gcd(y, x % y); }inline int lcm(int x, int y) {return x / gcd(x, y) * y; }int main() {int i, j;scanf("%d %d", …

CPU和GPU擅长和不擅长的方面

从它们执行运算的速度与效率的方面来探讨这个论题。CPU和GPU都是具有运算能力的芯片&#xff0c; CPU更像“通才”——指令运算(执行)为重数值运算&#xff0c; GPU更像“专才”——图形类数值计算为核心。在不同类型的运算方面的速度也就决定了它们的能力——“擅长和不擅长”…

一些IO流的知识

IO流&#xff1a; 输入流&#xff1a;输出流&#xff1a; 字节流&#xff1a;字符流&#xff1a;为了处理文字数据方便而出现的对象。 其实这些对象的内部使用的还是字节流(因为文字最终也是字节数据) 只不过&#xff0c;通过字节流读取了相对应的字节数&#xff0c;没有对这些…

为人示弱,做事留余 | 摸鱼系列

我很喜欢结交有很好的自然观察能力的朋友&#xff0c;这是种对周围环境和文化的洞察力。 一方面的原因是优秀的领导者、企业家和投资人能利用这种能力发现新市场&#xff0c;预测新潮流&#xff0c;设计出有效的市场营销活动&#xff0c;并找到需要重点关注的人群。 另一方面&a…

从一般到特殊-C#中的对象

文章目录对象的概念对象的创建和使用匿名类型和初始化器构造函数和析构函数构造函数析构函数范例参数传递博主写作不容易&#xff0c;孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 对象的概念 类是具有相同特征一类事物的抽象&#xff0c;而对象是类的实例。 类和对象…

如何用面对对象来做一个躁动的小球?

今天来看看怎样用面对对象来做一个躁动的小球。 首先我们先创建一个对象&#xff0c;他的属性包含小球的随机水平、纵向坐标&#xff0c;随机宽、高&#xff0c;随机颜色&#xff0c;以及创建小球的方法。 html: <div id"wrap"></div> js:function Boll(…

关于MyEclipse项目的名字的修改对项目导入导出的影响

不要修改项目名字&#xff0c;不管是在MyEclipse中(.project文件里面的额name会变)还是在G:\MyEclipseData目录下(.project文件里面的额name不会变)&#xff0c;否则导入的时候不能访问&#xff0c;会出现400的错误&#xff0c;而访问的网址必须是以前没改名前的那个名字才可以…

Gcc详解以及静态库、动态库生成

[转] Gcc详解以及静态库、动态库生成 http://www.360doc.com/content/10/0619/14/1795182_33985297.shtml 1。gcc包含的c/c编译器 gcc,cc,c,g,gcc和cc是一样的&#xff0c;c和g是一样的&#xff0c;(没有看太明白前面这半句是什 么意思:))一般c程序就用gcc编译&#xff0c;c程序…