您当前的位置:首页 > 电脑百科 > 数据库 > Redis

初识Redis

时间:2019-09-23 10:29:24  来源:  作者:

今天我们学习一种新的NoSQL数据库,叫做redis。Redis是一种基于键值对(key-value)的NoSQL数据库。Redis与其它数据库相比,不同的是Redis的值可以存储多种数据类型。它们具体包括:string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)、Bitmaps(位图)、GEO(地理信息定位)等。除此之外Redis还会将数据保存到内存中,所以Redis数据库地读写性能非常高。这时可能有人会说,那Redis岂不是很不安全,因为保存在内存中的数据是不安全的,如果碰到突然断电或者系统故障的话,那保存到Redis中的数据岂不是就要丢失了。在这一点上,我们恰恰不用担心,因为Redis为我们提供了快照和日志等方式,来允许我们将内存中的数据保存到硬盘上,这样当遇到上述故障重Redis时,Redis就会重新从硬盘加载已经保存好的数据,重新加载到内存中。除了上述功能外,Redis还提供了很多附加的高级的功能。如键过期、发布订阅、事物、流水线、Lua脚本等功能。下面我们看一下Redis中的特性。

  • Redis特性
  1. 前面我们提到过Redis的执行速度非常快,下面我们从几个方面来介绍一下为什么Redis的速度这么快。首先Redis中的所有数据都是存储到内存中的,我们知道直接操作内存和直接操作磁盘是有很大的区别的,因为操作磁盘为会很大的IO开销,所以,这也是Redis将数据保存到内存中,提高性能的原因之一。其二Redis是用C语言写的,在这一点上,我们知道C语言是最接近汇编的语言,也就是最接近操作系统的语言了,所以,在执行速度上,也会比间接提高Redis的执行效率。还有一个原因,那就是Redis是采用单线程架构,这么做的好处就是可以预防多线程可以产生的竞争问题。
  2. Redis虽然是键值对的数据库,但Redis中的值不仅可以保存字符串,还可以保存多种数据类型。也就是前面提到过的字符串、哈希、列表、集合、有序集合等。
  3. 在Redis中除了提供了上述的5种数据结构外,还提供了多种额外的功能。如键过期(可以实现缓存功能)、发布订阅(可以实现消息系统)、流水线(可以通过此功能一次性执行一批命令,减少网络开销)、Lua脚本(可以通过Lua语言创造新的Redis命令)等。
  4. Redis提供了简单的TCP通信协议,支持很多种语言,可以很方便的接入到Redis中。
  5. 持久化。就向前面提到的。在Redis中,可以通过快照和日志功能,来将内存中的数据,持久化到硬盘中。
  6. 主从复制。Redis中提供了复制的功能。可以实现多个相同的数据的Redis副本,依次来实现Redis的分布式存储。
  7. 分布式。Redis中提供了Redis Sentinel功能,通过它可以保证Redis节点在发生故障时,自动转移。依次来保证Redis的安全性。除此之外,Redis还提供了Redis Cluster功能。正是通过此功能,才保证了Redis真正的分布式实现。
  • Redis可以做些什么
  1. 缓存。通过Redis中的键过期功能,我们可以为键设置一个过期时间,这样当这个键超过了过期时间时,当前保存的键的信息,也就是失效了。这也就是用Redis实现缓存功能的使用方式。
  2. 排行榜系统。在Redis中提供了列表和有序列表,通过此功能,我们可以很方便的实现排行榜功能,
  3. 计数器。我们平时在购物时,会发现购物网站上有很多类似于浏览量之类的数据。当我们每访问一次时,数据就会执行加1操作。如果我们采用传统的数据库方式实现,那么就会因为并发量很大,而对数据库性能产生相应影响。而如果采用Redis的方式计算,则会容易多了,因为Redis中会在内存中计算,这样计数器的性能就会非常高了。当然除此之外还可以用Redis实现社交网络中的赞、踩、粉丝、共同好友、等功能。
  4. 消息队列。Redis中提供了发布订阅和阻塞队列功能,虽然我们可以使用专业的消息队列,但对于一般的队列功能,Redis都可以支持。
  • Redis的注意事项
  1. 我们知道Redis是将数据存储到内存中的,虽然存储到内存中的会提到数据访问的性能,但如果我们将所有的数据都保存到内存中,那么就可能会造成相应的内存泄漏了,从而导致系统的瘫痪。
  2. 我们知道,将数据存储到内存中的目的是为了提高数据访问的性能。那么我们怎么在设计系统时,怎么判断哪些数据要保存到Redis中,而哪些数据而不需要保存到Redis中呢?通常来说数据分为热数据(频繁操作的数据)和冷数据(非频繁操作的数据)。我们知道,提高数据访问性能的主要原因是因为大量并发的操作,正是因为这样,所以,如果我们不将大部分用户都访问的公用数据放到内存中,那么势必会造成程序的不稳定。所以我们应该将公用的数据,应该存储到Redis中。那么反之,不是公用的数据,也就不会产生大量的并发,所以,这一部分数据,我们是不需要存储到Redis中的。
  • Redis的安装
  1. 通过了上述的介绍使我们知道Redis在系统架构中有者不可替代的作用,而大部分企业的系统架构都采用了linux系统部署,所以,在介绍安装时我们将重点介绍Linux系统的安装。因为本文将采用源码的方式安装,又因为Linux系统和mac OS系统源码安装的方式相同,所以,本文将采用Mac OS系统的方式来演示安装过程。
  2. 首先我们访问Redis官网。来选择Redis的源码包。具体操作如图示:
初识Redis

 


初识Redis

 

当我们下载完成后,我们只需执行下面的命令就可以采用源码的方式,安装Redis。

tar xzvf redis.tar.gz // 解压当前压缩包
ln -s redis redis // 创建一个redis目录软链接
cd redis // 进入redis目录
make // 编译
make install // 安装

当我们安装完成后可以直接执行下面命令查看redis的版本,如果没有显示版本则表示可能redis安装失败,或者,当前目录不至此此命令

redis-cli -v

在Redis安装成功后的bin目录下会有很多以redis开头的可执行文件。掌握这些文件的使用,可以帮助我们更好的理解redis的使用。下在我们来简单介绍一下bin目录下的相关redis命令。

可执行文件作用redis-server启动Redisredis-cliRedis命令行客户端 redis-benchmarkRedis基准测试工具 redis-check-aofRedis AOF持久化文件检测和修复工具 redis-check-dumpRedis RDB持久化文件检测和修复工具 redis-sentinel启动Redis Sentinel

下面我们用上面提到的命令来启动Redis,也就是redis-server命令。

初识Redis

 

通过上面的启动信息,可以使我们知道当前Redis的版本是4.0.9,端口是6379(Redis的默认端口)。那如果我们要修改Redis的端口,应该怎么做呢?在Redis中我们可以很方便的实现,也就是在redis-server命令后直接添加端口即可。具体命令如下:

redis-server --port 6380 
初识Redis

 

在Redis中我们除了上述的方式外,还可以通过修改配置文件的方式来修改端口(不只是端口,还有其它的相关配置),并且这种方式,是Redis官方推荐的方式。Redis中的配置文件在redis.conf文件中,下面我们看一下redis.conf文件中相关参数的说明。

配置名配置说明port端口logfile日志文件dirRedis工作目录(存放持久化文件和日志文件)daemonize是否以守护进程的方式启动Redis

初识Redis

 

下面我们修改redis.conf文件中的port属性,然后启动Redis服务,看一下Redis端口是否成功被修改。

下面我们用配置文件中的方式来启动Redis服务。

redis-server /redis.conf 
初识Redis

 

  • Redis命令行客户端
  1. 既然我们已经成功的启动了Redis服务,下面我们用下面的命令来访问我们的Redis服务。
redis-cli - h {host} -p {port} 
初识Redis

 

我们看上面的信息,已经成功将hello world信息存储到了Redis中的。除了上述的操作外,我们还可以直接获取Redis中的值。具体操作如下:

初识Redis

 

如果我们没有修改Redis默认的端口,并且访问的是本地Redis服务的话,那么我们在用redis-cli命令连接Redis服务时,就可以不用指定 -h参数和-p参数了。

  • 停止Redis服务

在我们不需要连接Redis服务时,我们可以使用下面的命令来优雅的方式停止Redis服务,既然有优雅的方式,当然也有相对暴力的方式停止服务,也就是直接杀掉进程的方式。但Redis不推荐使用这个方式停止Redis服务,因为这种方式可能会导致Redis相关数据的丢失。下面我们看优雅的停止Redis服务的命令。

redis-cli shutdown

采用这种方式停止Redis服务时,Redis会自动的生成持久化文件,从而保证Redis中的数据的不会丢失。当然我们也可以添加相关参数则让Redis服务在执行上述命令时不生成持久化文件。具体的命令如下:

redis-cli shutdown nosave|save


Tags:Redis   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
来源: my.oschina.net/xiaomu0082/blog/2990388首先说下问题现象:内网sandbox环境API持续1周出现应用卡死,所有api无响应现象刚开始当测试抱怨环境响应慢的时候 ,我们重启一下应...【详细内容】
2021-12-08  Tags: Redis  点击:(18)  评论:(0)  加入收藏
我不知道为什么你会选择对特定数量的“错误”(或警告)如此具体。听起来您正在寻找将要发布到 Yahoo! 的某些文章的内容。 Insider (N Foos to Blah for the BlahBlah)。那说:...【详细内容】
2021-12-07  Tags: Redis  点击:(14)  评论:(0)  加入收藏
目录 一、背景 二、步骤 0.理论支持 1、获取数据 2、结果 3、分析数据并评估大小 三、关于repl-backlog-size 一、背景 repl-backlog-size控制这个环形缓冲区. ​ 主从断...【详细内容】
2021-11-05  Tags: Redis  点击:(41)  评论:(0)  加入收藏
Redis 性能测试是通过同时执行多个命令实现的。1,Redis-benchmarkRedis性能命令:redis性能命令格式: redis-benchmark [option] [option value] redis 性能测试工具可选参数如...【详细内容】
2021-11-02  Tags: Redis  点击:(41)  评论:(0)  加入收藏
1 概述数据结构和内部编码 无传统关系型数据库的 Table 模型schema 所对应的db仅以编号区分。同一 db 内,key 作为顶层模型,它的值是扁平化的。即 db 就是key的命名空间。 key...【详细内容】
2021-11-01  Tags: Redis  点击:(28)  评论:(0)  加入收藏
普通java中使用引用Java redis 驱动,即可连接:import redis.clients.jedis.Jedis; public class RedisTestJava { public static void main(String[] args) { //连...【详细内容】
2021-10-13  Tags: Redis  点击:(34)  评论:(0)  加入收藏
Redis常用的数据结构有 string list set zset hashstringstring 是 Redis 的基本的数据类型,一个 key 对应一个 value。string 类型是二进制安全的,Redis的string可以包含任...【详细内容】
2021-10-12  Tags: Redis  点击:(36)  评论:(0)  加入收藏
列表类型可以存储一组按插入顺序排序的字符串,它非常灵活,支持在两端插入、弹出数据,可以充当栈和队列的角色。> LPUSH fruit apple(integer) 1> RPUSH fruit banana(integer)...【详细内容】
2021-09-17  Tags: Redis  点击:(54)  评论:(0)  加入收藏
Redis持久化意义 是做灾难恢复,数据恢复,也可以归类到高可用的一个环节里面去,比如你的redis整个挂了,然后redis就不可用了,你要做的事情是让redis变得可用,尽快变得可用 大量的请...【详细内容】
2021-08-12  Tags: Redis  点击:(77)  评论:(0)  加入收藏
Nginx来限制访问控制的方法有多种,nginx主要有2个模块控制,但是那些不支持自定义,非常死,在大多数场景下并不实用。今天分享一个:利用openresty+lua+redis 实现封杀频繁恶意访问I...【详细内容】
2021-08-12  Tags: Redis  点击:(119)  评论:(0)  加入收藏
▌简易百科推荐
来源: my.oschina.net/xiaomu0082/blog/2990388首先说下问题现象:内网sandbox环境API持续1周出现应用卡死,所有api无响应现象刚开始当测试抱怨环境响应慢的时候 ,我们重启一下应...【详细内容】
2021-12-08  Java识堂    Tags:Redis   点击:(18)  评论:(0)  加入收藏
我不知道为什么你会选择对特定数量的“错误”(或警告)如此具体。听起来您正在寻找将要发布到 Yahoo! 的某些文章的内容。 Insider (N Foos to Blah for the BlahBlah)。那说:...【详细内容】
2021-12-07  富集云科技有限公司    Tags:Redis   点击:(14)  评论:(0)  加入收藏
目录 一、背景 二、步骤 0.理论支持 1、获取数据 2、结果 3、分析数据并评估大小 三、关于repl-backlog-size 一、背景 repl-backlog-size控制这个环形缓冲区. ​ 主从断...【详细内容】
2021-11-05  弈秋的美好生活    Tags:redis   点击:(41)  评论:(0)  加入收藏
Redis 性能测试是通过同时执行多个命令实现的。1,Redis-benchmarkRedis性能命令:redis性能命令格式: redis-benchmark [option] [option value] redis 性能测试工具可选参数如...【详细内容】
2021-11-02  川石信息    Tags:Redis   点击:(41)  评论:(0)  加入收藏
1 概述数据结构和内部编码 无传统关系型数据库的 Table 模型schema 所对应的db仅以编号区分。同一 db 内,key 作为顶层模型,它的值是扁平化的。即 db 就是key的命名空间。 key...【详细内容】
2021-11-01  JavaEdge    Tags:Redis   点击:(28)  评论:(0)  加入收藏
普通java中使用引用Java redis 驱动,即可连接:import redis.clients.jedis.Jedis; public class RedisTestJava { public static void main(String[] args) { //连...【详细内容】
2021-10-13  faesuite    Tags:Redis   点击:(34)  评论:(0)  加入收藏
Redis常用的数据结构有 string list set zset hashstringstring 是 Redis 的基本的数据类型,一个 key 对应一个 value。string 类型是二进制安全的,Redis的string可以包含任...【详细内容】
2021-10-12  语霖    Tags:Redis   点击:(36)  评论:(0)  加入收藏
列表类型可以存储一组按插入顺序排序的字符串,它非常灵活,支持在两端插入、弹出数据,可以充当栈和队列的角色。> LPUSH fruit apple(integer) 1> RPUSH fruit banana(integer)...【详细内容】
2021-09-17  深夜敲代码    Tags:Redis   点击:(54)  评论:(0)  加入收藏
Redis持久化意义 是做灾难恢复,数据恢复,也可以归类到高可用的一个环节里面去,比如你的redis整个挂了,然后redis就不可用了,你要做的事情是让redis变得可用,尽快变得可用 大量的请...【详细内容】
2021-08-12  小李说IT    Tags:Redis   点击:(77)  评论:(0)  加入收藏
当查询Redis中没有的数据时,该查询会下沉到数据库层,同时数据库层也没有该数据,当这种情况大量出现或被恶意攻击时,接口的访问全部透过Redis访问数据库,而数据库中也没有这些数据...【详细内容】
2021-07-30  随便t    Tags:缓存穿透   点击:(91)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条