`

redis

阅读更多

1. 简介

Redis 是一个Key-Value 存储系统。c语言编写,和Memcached 类似,它支持存储的value 类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。这些数据类型都支持push/pop、add/remove 及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,Redis 支持各种不同方式的排序。与memcached 一样,为了保证效率,数据都是缓存在内存中。区别的是Redis 会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步

 

2.持久化

        通常,Redis 将数据存储于内存中,或被配置为使用虚拟内存。通过两种方式可以实现数据持久化:使用截图的方式,将内存中的数据不断写入磁盘;或使用类似MySQL 的日志方式,

 

记录每次更新的日志。前者性能较高,但是可能会引起一定程度的数据丢失;后者相反。

 

3.数据结构

string类型是二进制安全的。意思是redis 的string 可以包含任何数据,比如jpg 图片或者序

列化的对象。从内部实现来看其实string 可以看作byte 数组,最大上限是1G 字节,下面是

 

string 类型的定义

 

strings类型及操作 :

key 对应的值为string 类型的value

 

hashes类型及操作

Redis hash 是一个string 类型的field和value的映射表.它的添加、删除操作都是 O(1() 平均)。

hash 特别适合用于存储对象。相较于将对象的每个字段存成单个string 类型。将一个对象存

储在hash 类型中会占用更少的内存,并且可以更方便的存取整个对象。省内存的原因是新

建一个hash 对象时开始是用zipmap(又称为small hash)来存储的。这个zipmap 其实并不

是hash table,但是zipmap 相比正常的hash 实现可以节省不少hash 本身需要的一些元数据

存储开销。尽管zipmap 的添加,删除,查找都是O(n),但是由于一般对象的field 数量都不

太多。所以使用zipmap 也是很快的,也就是说添加删除平均还是O(1)。如果field 或者value

的大小超出一定限制后,Redis 会在内部自动将zipmap 替换成正常的hash 实现. 这个限制可

以在配置文件中指定

hash-max-zipmap-entries 64 #配置字段最多64 个

 

hash-max-zipmap-value 512 #配置value 最大为512 字节

 

lists类型及操作

        list 是一个链表结构,主要功能是push、pop、获取一个范围的所有值等等,操作中key 理

解为链表的名字。

       Redis 的list 类型其实就是一个每个子元素都是string 类型的双向链表。链表的最大长度是(2

的32 次方)。我们可以通过push,pop 操作从链表的头部或者尾部添加删除元素。这使得list

既可以用作栈,也可以用作队列。

       有意思的是list 的pop 操作还有阻塞版本的,当我们[lr]pop 一个list 对象时,如果list 是空,

或者不存在,会立即返回nil。但是阻塞版本的b[lr]pop 可以则可以阻塞,当然可以加超时时

间,超时后也会返回nil。为什么要阻塞版本的pop 呢,主要是为了避免轮询。举个简单的

例子如果我们用list 来实现一个工作队列。执行任务的thread 可以调用阻塞版本的pop 去获

取任务这样就可以避免轮询去检查是否有任务存在。当任务来时候工作线程可以立即返回,

 

也可以避免轮询带来的延迟。说了这么多,接下来看一下实际操作的方法吧

 

sets 类型及操作

        set 是集合,和我们数学中的集合概念相似,对集合的操作有添加删除元素,有对多个集合

求交并差等操作,操作中key 理解为集合的名字。

        Redis 的set 是string 类型的无序集合。set 元素最大可以包含(2 的32 次方)个元素。

       set 的是通过hash table 实现的,所以添加、删除和查找的复杂度都是O(1)。hash table 会随

着添加或者删除自动的调整大小。需要注意的是调整hash table 大小时候需要同步(获取写

锁)会阻塞其他读写操作,可能不久后就会改用跳表(skip list)来实现,跳表已经在sorted

set 中使用了。关于set 集合类型除了基本的添加删除操作,其他有用的操作还包含集合的

取并集(union),交集(intersection),差集(difference)。通过这些操作可以很容易的实现sns

中的好友推荐和blog 的tag 功能。

 

sorted sets 类型及操作

         sorted set 是set 的一个升级版本,它在set 的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset 会自动重新按新的值调整顺序。可以理解为有

两列的mysql 表,一列存value,一列存顺序。操作中key 理解为zset 的名字。

         和set 一样sorted set 也是string 类型元素的集合,不同的是每个元素都会关联一个double

 类型的score。sorted set 的实现是skip list 和hash table 的混合体。

          当元素被添加到集合中时,一个元素到score 的映射被添加到hash table 中,所以给定一个元素获取score 的开销是O(1),另一个score 到元素的映射被添加到skip list,并按照score 排

序,所以就可以有序的获取集合中的元素。添加,删除操作开销都是O(log(N))和skip list 的

开销一致,redis 的skip list 实现用的是双向链表,这样就可以逆序从尾部取元素。sorted set 最

经常的使用方式应该是作为索引来使用.我们可以把要排序的字段作为score 存储,对象的id

 当元素存储。

 

4.主从复制

redis 主从复制配置和使用都非常简单。通过主从复制可以允许多个slave server 拥有和

master server 相同的数据库副本

 

redis 主从复制特点:

(1)、master 可以拥有多个slave

(2)、多个slave 可以连接同一个master 外,还可以连接到其他slave

(3)、主从复制不会阻塞master,在同步数据时,master 可以继续处理client 请求

(4)、提高系统的伸缩性

 

 redis 主从复制过程:

        当配置好slave 后,slave 与master 建立连接,然后发送sync 命令。无论是第一次连接还是

重新连接,master 都会启动一个后台进程,将数据库快照保存到文件中,同时master 主进

程会开始收集新的写命令并缓存。后台进程完成写文件后,master 就发送文件给slave,slave

将文件保存到硬盘上,再加载到内存中,接着master 就会把缓存的命令转发给slave,后续

master 将收到的写命令发送给slave。如果master 同时收到多个slave 发来的同步连接命令,

 

master 只会启动一个进程来写数据库镜像,然后发送给所有的slave。

 

5.事务控制

       redis 对事务的支持目前还比较简单。redis 只能保证一个client 发起的事务中的命令可以连

续的执行,而中间不会插入其他client 的命令。 由于redis 是单线程来处理所有client 的请

求的所以做到这点是很容易的。一般情况下redis 在接受到一个client 发来的命令后会立即

处理并 返回处理结果,但是当一个client 在一个连接中发出multi 命令有,这个连接会进入

一个事务上下文,该连接后续的命令并不是立即执行,而是先放到一个队列中。当从此连接

受到exec 命令后,redis 会顺序的执行队列中的所有命令。并将所有命令的运行结果打包到

一起返回给client.然后此连接就 结束事务上下文。

 

 

Redis内建支持两种持久化方案,snapshot快照和AOF 增量Log方式。快照顾名思义就是隔一段时间将完整的数据Dump下来存储在文件中。AOF增量Log则是记录对数据的修改操作(实际上记录的就是每个对数据产生修改的命令本身),两种方案可以并存,也各有优缺点,具体参见

 

 

java使用jedis ,commons-pool 连接池

分享到:
评论

相关推荐

    Windows 上安装 Redis安装,redis7.2安装到windows上面

    Windows 上安装 Redis安装Windows 上安装 Redis安装Windows 上安装 Redis安装Windows 上安装 Redis安装Windows 上安装 Redis安装Windows 上安装 Redis安装Windows 上安装 Redis安装Windows 上安装 Redis安装Windows ...

    Redis 7.0.4 x64位 windows 系统 安装包 Redis7.0.4.zip

    Redis7.0.4.zip,解压缩到D盘根目录后,安装后启动为Windows服务 注意是windows 64位系统才可使用,不支持windows 32位系统使用 已经在Win10,Win11,Windows server 2012系统测试运行可用 使用步骤注意事项: ...

    若依前后端分离版去redis版/无redis版本

    基于前后端分离的应用,无论是否使用Redis,都需要考虑如何进行数据的存储和缓存。下面我将分别介绍基于Redis和无Redis的两种版本的特点。 基于Redis的版本 特点 缓存处理:Redis作为内存数据库可以用来缓存频繁访问...

    redis-windows-7.0.11

    Redis是一种开源的内存数据结构存储系统,它支持多种数据结构,如字符串、哈希、列表、集合、有序集合等。Redis可以用作数据库、缓存和消息中间件。Redis在性能、可扩展性和灵活性方面表现出色,因此被广泛应用于Web...

    redis-5.0.4.tar.gz下载及redis安装过程

    redis安装 1: 下载redis-5.0.4.tar.gz 2: 解压源码并进入目录 tar zxvf redis-5.0.4.tar.gz cd redis-5.0.4 3: 不用configure 4: 直接make (如果是32位机器 make 32bit) 查看linux机器是32位还是64位的方法:...

    redis-5.0.5.tar.gz

    redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-...

    windows环境下配置redis6集群

    注意:由于本人配置redis.conf中的路径使用的是绝对路径,当前redis安装目录的父目录为D:\InstallDir,可以在每个配置文件中修改为自己指定的路径位置 redis638-.conf配置文件内容 #redis服务器端口号 port 6380 #...

    Redis集群下过期key监听的实现代码

    在使用redis集群时,发现过期key始终监听不到。网上也没有现成的解决方案。于是想,既然不能监听集群,那我可以建立多个redis连接,分别对每个redis的key过期进行监听。以上做法可能不尽人意,目前也没找到好的解决...

    Redis-5.0.0集群配置

    本文档基于以前写的《Redis-3.0.5集群配置》和《Redis-4.0.11集群配置》。  redis-3.0.0开始支持集群,redis-4.0.0开始支持module,redis-5.0.0开始支持类似于kafka那样的消息队列。  本文参考官方文档而成:...

    redis desktop manager(redis桌面管理器)下载(0.8.3)

    redis-desktop-manager-0.8.3.3850.rar windows平台安装文件 Redis Desktop Manager(redis桌面管理器)是一款非常实用的跨平台Redis桌面管理软件。也被称作Redis可视化工具,是一款开源软件,支持通过SSH Tunnel连接...

    Redis面试题50道(含答案)_.pdf

    1、什么是 Redis? 2、Redis 相比 memcached 有哪些优势? 3、Redis 支持哪几种数据类型? 4、Redis 主要消耗什么物理资源? 5、Redis 的全称是什么? 6、Redis 有哪几种数据淘汰策略? 7、Redis 官方为什么不提供 ...

    redis获取命令字典的方法及全部的group命令.txt

    本地安装redis,通过安装目录下的redis客户端程序可以连接任意Redis服务(只要服务端是启动着的),命令 redis-cli -h ip -p port。如果服务端要求认证资格,可能还要输入用户名密码等参数。 Redis命令十分丰富,...

    redis安装离线版免编译版及离线安装需要的所有包文件

    本资源可结合我的文章《详解CentOS7下编译安装Redis5.x设置开机启动及修改端口(含redis需编译安装包和redis免编译安装包)》配合使用,同时也可单独去使用。包含redis3.0.7免编译版安装包,redis5.0.7离线安装包,...

    SpringBoot+VUE+Redis+nginx 网上拍卖平台源码.zip

    SpringBoot+VUE+Redis+nginx 网上拍卖平台源码 SpringBoot+VUE+Redis+nginx 网上拍卖平台源码 SpringBoot+VUE+Redis+nginx 网上拍卖平台源码 SpringBoot+VUE+Redis+nginx 网上拍卖平台源码 SpringBoot+...

    redis_4.0.10-1_arm64.deb 银河麒麟v4+飞腾

    1、redis_4.0.10-1_arm64.deb 银河麒麟v4+飞腾 安装包 2、自带服务启动 3、目录树 /opt/redis-4.0.10/ ├── bin │ ├── redis-benchmark │ ├── redis-check-aof │ ├── redis-check-rdb │ ├── ...

    redis视频教程百度网盘下载地址及密码

    2016122201_Redis_初探_1.mp4 2016122201_Redis_初探_2.mp4 2016122201_Redis_初探_3.mp4 2016122202_Redis_安装_字符串键_1.mp4 2016122202_Redis_安装_字符串键_2.mp4 2016122202_Redis_安装_字符串键_3.mp4 ...

    redis-x64-4.0.2.3,windows版本

    右键解压Redis压缩包,把所有文件解压到指定的redis文件夹中 1.配置redis.windows.conf文件,除了port配置为对应的端口外,其他根据需要可更改的配置项说明如下: (1)bind 127.0.0.1 (line:79) # 设置为其他机器...

    redis桌面链接工具redis-desktop

    redis桌面链接工具redis-desktop Redis Desktop Manager(简称RDM)是一款跨平台的Redis数据库管理工具,它提供了一个直观且用户友好的图形界面,允许开发者和运维人员轻松地连接到Redis服务器,并对其进行管理和...

    1.2.6版StackExchange.Redis

    1.2.6版StackExchange.Redis。 StackExchange.Redis是.net下的Redis客户端之一,目前是免费的。而用户量比较多的ServiceStack.Redis现在是收费的。把下载的三个文件(StackExchange.Redis.dll、StackExchange.Redis....

    尚硅谷_Redis.docx

    Redis是一个key-value存储系统,是当下互联网公司常用的NoSQL数据库之一,是进入互联网行业的Java开发工程师必备技术。 在本课程中,你将了解Redis是什么、能干什么、如何用,了解NoSQL的使用场景和概念,快速掌握...

Global site tag (gtag.js) - Google Analytics