《解锁Redis系列1》介绍安装和简单使用

喜欢有帮助记得点赞哦,加关注不迷路

一、初识Redis

1.1、什么是Redis

完全开源免费,使用C语言编写,遵守BSD协议的一个高性能key-value分布式内存数据库并提供持久化的NoSQL数据库。Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合),可用作数据库缓存消息中间件。

1.2、Redis特性

1.2.1、速度快

Redis官方给出的数据是10W OPS(每秒可以操作数据10W次),这个数据会根据电脑性能和Redis的使用方式不同而略微不同,但是在万级数据中操作没有压力。

那么Redis为什么这么快,主要有以下几个方面

1、纯内存操作

数据存放在内存中,内存的响应时间大约是 100纳秒 ,这是Redis每秒万亿级别访问的重要基础。

2、编程语言

纯ANSI C编写,不依赖第三方类库,没有像memcached那样使用libevent,因为libevent迎合通用性而造成代码庞大,所以作者用libevent中两个文件修改实现了自己的epoll event loop。

3、线程模型

Redis使用单线程操作,避免了频繁的上下文切换,虽然是采用单线程,但是单线程避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU;虽然作者认为CPU不是瓶颈,内存与网络带宽才是,但实际测试时并非如此。

4、采用了非阻塞I/O多路复用机制

多路I/O复用模型是利用 select、poll、epoll 可以同时监察多个流的 I/O 事件的能力,在空闲的时候,会把当前线程阻塞掉,当有一个或多个流有 I/O 事件时,就从阻塞态中唤醒,于是程序就会轮询一遍所有的流(epoll 是只轮询那些真正发出了事件的流),并且只依次顺序的处理就绪的流,这种做法就避免了大量的无用操作。这里“多路”指的是多个网络连接,“复用”指的是复用同一个线程。加上Redis自身的事件处理模型将epoll中的连接,读写,关闭都转换为了事件,不在I/O上浪费过多的时间

扫描二维码关注公众号,回复: 9303679 查看本文章

1.2.2、持久化

Redis的数据存储在内存中,对数据的更新会异步存储在磁盘中,Redis提供两种持久化策略保证服务在宕机或者断电等不正常情况发生时,重启Redis服务来恢复数据到内存中。

1.2.3、多种数据结构

Redis提供了string、List、set、Zset、Hash五种数据结构来存储数据,而memcached只支持string数据类型。在redis的新版本中提供了 bitmaps(位图), hyperloglogs (超小内存唯一值计数)和 geospatial(地理空间)数据类型

1.2.4、支持多种编程语言

1.2.5、功能丰富

1、消息发布订阅

2、Lua脚本

3、事务

4、pipeline

1.2.6、简单

Redis单节点的核心代码只有23000行,我们来吃透Redis这个项目,或者有些企业通过修改Redis源代码来实现定制化功能都是非常容易的,Redis不依赖于外部的第三库,单线程模型,无论服务端还是客户端开发都会相对容易。

1.2.7、主从复制

在Redis中有主从复制,分为主服务器从服务器两个角色,主服务器数据可以同步到从服务器上,可以为高可用和分布式提供很好的基础。

1.2.8、高可用和分布式

Redis的单点或者主从复制模型,如果想要实现高可用是比较困难的,在2.8版本推出Redis-Sentinel支持高可用,Redis在3.0版本推出Redis-Cluster支持分布式

1.3、Redis典型使用场景

1.3.1、缓存系统

我们要获取数据先从cache(缓存)中获取,如没有在从数据库中获取,以减轻数据库的压力

1.3.2、计数器和计时器

我们可以使用redis的incr来记录转发数,评论数,视频播放数等,而不会发生错误,这个功能对公司项目的决策是很重要的, 计时,比如验证码一分钟内有效。可以使用 Redis 的 setex 命令设置验证码只保存一分钟,一分钟后失效

1.3.3、消息队列系统

消息队列,一般我们会简称它为MQ(Message Queue),我们使用消息队列可以实现解耦,异步,削峰限流等功能,成熟的消息队列有ActiveMQ,RabbitMQ、Kafka等,Redis页提供了消息队列功能,如果你的项目中使用了大量的Redis,需要实现简单的消息队列功能,这时可以考虑使用Redis实现。 Redis 的 List 类型能够很轻松的实现一个消息队列,使用 lpush 和 rpop/brpop(阻塞版rpop)即可实现一个消息队列

1.3.4、排行榜

Redis提供的有序集合(Zset),可以实现排行榜

1.3.5、社交网络

Redis与社交网络吻合度很高,比如粉丝数,关注数,共同关注等,比如新浪微博,推特都在使用Redis

1.3.6、实时系统

比如垃圾邮件过滤,秒杀等系统就可以使用Redis实现

二、Redis安装和配置

2.1、Redis安装环境

Redis可以在windows下和Unix下安装,我们这里选择使用Linux下安装,也是推荐的一种方式

2.2、下载

我们进入到/usr/local目录下下载安装包,或者到官网下载之后上传到Linux上。下载地址:http://download.redis.io/releases/

wget http://download.redis.io/releases/redis-5.0.5.tar.gz

2.3、解压安装

2.3.1、解压

tar -zxvf redis-5.0.5.tar.gz

2.3.2、安装

进入到redis解压目录运行make & make install进行编译安装

make & make install

2.4、Redis核心文件目录介绍

2.4.1、src目录

Redis的核心目录是src目录,在Redis的安装目录下,Redis的相关启动关闭命令就在该目录下

redis-server------------>操作Redis服务器命令

redis-cli----------------->Redis命令行客户端

redis-benchmark----->Redis性能检测工具

redis-check-aof------->AOF文件修复工具

redis-check-rdb---->RDB文件检查工具

redis-sentinel---------->Sentinel服务器(2.8以后版本)

我们目前需要关心的是redis-server和redis-cli这两个命令

2.4.2、redis.conf文件

redis.conf配置文件在redis的安装目录下,这个是redis的核心配置文件,如果我们要修改配置可以读取该文件,默认读取redis安装目录下的这个配置文件,我们在启动Redis时也可以指定配置文件读取。

2.4.3、动点手脚

我们进入到src目录下之后发现有很多文件,我们需要使用的就是那么几个可执行命令,我们可以在redis安装目录下创建bin目录将可执行文件拷贝进来,方便使用。参考图如下,大家使用cp命令即可实现

2.5、redis启动和连接

2.5.1、默认启动

使用默认的配置启动redis,直接使用redis-server命令即可,使用非守护进程的方式启动,会占用当前操作窗口,我们可以之间按ctrl+c退出Redis

redis-server

2.5.2、动态参数

我们可以使用动态参数方式连接redis,我们指定端口号为6380

redis-server --port 6380

2.5.3、指定配置文件(推荐使用)

1、在redis安装目录下创建conf目录存储配置文件

mkdir conf

2、将redis.conf配置文件中的内容去除注释和空格等输出到指定配置文件(redis-6379.conf)中

cat redis.conf | grep -v "#" | grep -v "^$" >> conf/redis-6379.conf

3、修改redis-6379.conf文件,大家修改时注意注释的地方即可

#bind 127.0.0.1
protected-mode no
port 6379
daemonize yes
logfile "/var/redis-5.0.5/logs/redis.log"
dir "/var/redis-5.0.5/data"

4、创建data和logs目录

mkdir -p /var/redis-5.0.5/data /var/redis-5.0.5/logs

5、启动,redis-server后跟上配置文件路径即可

redis-server conf/redis-6379.conf

6、查看redis进程

ps -ef | grep redis

2.5.4、客户端连接

我们这里使用命令行客户端连接redis,使用redis-cli命令 -h写ip,-p写端口

redis-cli -h 127.0.0.1 -p 6379

5.5.5、测试使用

ping命令如果返回PONG代表连接成功

set 设置String类型值,k1、为键,hello为值

get 根据键获取值,k1为键,hello为返回的值

2.6、Redis常用配置

Redis的配置有很多,这里我们是简单入门说一些常用的配置,其他的配置我们在指定的模块贴出,这些配置都是在我们上边说到的redis.conf文件中

2.6.1、daemonize

大概在136行,默认为no,是否将redis进程当做守护进程在后台运行,我们可以将其设置为yes

2.6.2、port

大概在92行,redis的默认端口为6379,如果需要单节点上启动多个redis实例,需要修改端口号

2.6.3、logfile

大概在171行,配置redis的日志文件,默认什么都没有,我们可以修改日志想要存储的路径等,查看redis运行的情况

2.6.4、dir

大概在263行,配置redis的持久化文件存储路径,默认是./也就是当前路径,也就是启动redis-server命令的路径,可以按需修改

2.6.5、bind

大概在69行,是绑定本机的IP地址,(准确的是:本机的网卡对应的IP地址,每一个网卡都有一个IP地址),而不是redis允许来自其他计算机的IP地址。如果指定了bind,则说明只允许来自指定网卡的Redis请求。如果没有指定,就说明可以接受来自任意一个网卡的Redis请求,我这里直接将其注释掉

2.6.6、protected-mode

大概在88行,redis3.2版本后新增protected-mode配置,默认是yes,即开启。设置外部网络连接redis服务,设置方式如下:

1、关闭protected-mode模式,此时外部网络可以直接访问

2、开启protected-mode保护模式,需配置bind ip或者设置访问密码

 

写在最后:

各位的支持和认可(点赞)是我最大的动力,请不要轻轻的来,用力留下你的足迹!

本篇文章有任何错误希望不吝指出,不胜感激!我们下篇再见!

求知并无捷径,如果有,那就是放弃这个幼稚的想法,静下心来多读书、总结

发布了23 篇原创文章 · 获赞 49 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_36386908/article/details/102990488