Redis专题(一)——Redis基本概述与安装配置

Redis专题(一)

——Redis基本概述与安装配置

(原创内容,转载请注明来源,谢谢)

一、特性

1、存储方式

Redis采用Key-Value类型进行存储,数据存储在内存中,不存在硬盘中,由于避开了I/O,因此读写速度比关系型数据库快很多,普通的笔记本每秒可以读写超过10万个键值。

2、持久性

为了避免存在内存中导致的程序退出后数据丢失问题,Redis提供将数据异步写入硬盘,不影响继续提供服务。

3、灵活性

Redis可以为每个键设置生存时间,到期后自动删除。就此而言可以将其用作缓存,和Memcached相似,Redis几乎涵盖Memcached的全部功能,性能强大且又支持集群,因此目前而言Redis更胜一筹。

另外,Redis可以限定占用的内存大小,在数据达到限制后可以按照规则淘汰不必要的键。

此外,Redis的列表的数据类型,常用做消息队列的处理,且由于其可以设置阻塞模式,因此可以建立不同优先级的消息队列。

4、简便性

Redis命令简单,常用的命令十几个容易记忆,且使用方便。另外,Redis支持几十种语言,使用c开发,代码量仅3万行,且又是开源的,优势众多。

二、安装配置与基本功能

1、版本规则

Redis约定次版本号为偶数的版本为稳定版,如3.0、2.8,基数的是非稳定版,生产环境必须用稳定版。

2、安装

Redis对windows系统支持较差,建议使用Linux或者OS X系统,下面介绍在Ubuntu中的安装过程:

1)获取源码

         wget http://download.redis.io/redis-stable.tar.gz

2)解压缩

         tar-zxf redis-stable.tar.gz

3)进入解压路径

         cdredis-stable

4)编译

         make
         make test
         make install

5)下载配置文件和init启动脚本

wget https://github.com/ijonas/dotfiles/raw/master/etc/init.d/redis-server
wget https://github.com/ijonas/dotfiles/raw/master/etc/redis.conf
sudo mv redis-server /etc/init.d/redis-server
sudo chmod +x /etc/init.d/redis-server
sudo mv redis.conf /etc/redis.conf

6)初始化用户和日志路径

第一次启动Redis前,建议为Redis单独建立一个用户,并新建data和日志文件夹。

sudo useradd redis
sudo mkdir -p /var/lib/redis
sudo mkdir -p /var/log/redis
sudo chown redis.redis /var/lib/redis
sudo chown redis.redis /var/log/redis

7)设置开机自动启动,关机自动关闭

sudo update-rc.d redis-server defaults

8)启动Redis

sudo /etc/init.d/redis-server start

3、Redis服务端管理命令

Redis分为服务端与客户端,服务端即Redis提供服务的地方,类似于Mysql数据库本身;客户端即操作、调用Redis的地方,可以在任何地方,如命令行、PHP脚本等。

服务端管理命令常用的是开启、 关闭服务等。

1)启动redis

         redis-server--port 6380

端口号是默认是6380。

2)关闭redis

         redis-cliSHUTDOWN

当redis接到关闭命令,会先断开所有连接,然后按照配置将数据持久化到硬盘中,最后完成退出。当接到kill PID命令时,和shutdown相同,也会妥善处理。

4、Redis客户端管理命令

可以使用上述的redis-cli+ 命令的方式,也可以先输入redis-cli回车,就直接进入redis的命令行模式,可以输入多条命令。

5、Redis命令回复

Redis通过接收到的命令,会有不同的回复,共有5种回复。

1)状态回复

当收到正确的指令进行操作,例如set等,会回复OK表示成功。另外,如果输入PING,会返回PONG,表示网络连接正常。

2)错误回复

当收到不存在的指令、格式有误的指令时,会返回错误,错误是以error开头,后面会跟上错误信息。

3)整数回复

当使用INCR命令让某个数自增1,会返回数字的结果。返回的结果类似(interger) 1

4)字符串回复

由于redis中的内容都是用字符串存的,因此获取redis存在的元素会返回字符串,但是如果获取一个不存在的键对应的值,会返回(nil)。

5)多行字符串回复

当接收到一些命令,如返回所有的键名,则会以多行字符串的形式返回。

6、启用配置文件

redis-server/configpath/redis.conf 其中configpath是redis.conf的配置文件路径。另外,也可以在redis-cli命令行,输入CONFIG SET命令,动态的设置redis,而不用重启redis。

7、多数据库

redis支持类似关系型数据库的的多个数据库存储不同的数据的方式,允许将数据分在不同的数据字典里面,每个数据字典类似一个数据库。redis默认支持16个数据库,数据库总数可以在配置文件中进行修改。

与mysql等定义数据库的不同之处:

1)redis的数据库不允许自定义名字,数据库名字是从0-15,默认使用0,可以用select 1 的方式选择数据库1。

2)不支持为每个数据库设置自己的密码,因此用户要么可以访问全部数据库,要么不能访问redis。

3)数据库之间不是隔离的,用FLUSHALL命令可以清空所有数据库。

因此,redis的多数据库更像是命名空间的方式。

8、多数据库使用方案

由于第7点,redis的多数据库和mysql等不同,不是用于存放不同的业务场景的数据库。通常,redis多数据库用于区分不同开发环境、测试环境的数据,便于开发和测试。

多个业务场景,不能用redis的多数据库方案,而是更适合建立多个redis的实例,由于redis的轻量级,每个空实例仅1mb左右,不会占用太多内存。

三、Redis键的命名规则

Redis的键可以任意命名,但是由于上述说到redis的多数据库并不是真正的多数据库,而且切换数据库还需要增加选择redis数据库的操作,因此,通常用命名的方式来使用redis的数据库。

1、分割

Redis中的键值,通常用冒号:进行分割,如user:1:username,表示user系统(或user表等)、id为1、字段为username的键。这样,便于使用通配符进行维护。

2、标记

在Redis里面保存一个特殊的值,如registy_all_keys等,其保存着当前有几个系统、分别多少字段等信息,其值可以用user-20:order-30等形式进行区分。

3、删除

不需要的字段,需要及时删除,因为redis有配置的使用内存,当内存满时,会调用配置文件,进行自动删除键。当自动删除期间,性能会大大降低。

4、控制键名的长度

虽然可以用分隔符的方式,但是不要过度使用,导致名字太长。

——written by linhxx 2017.08.03

原文发布于微信公众号 - 决胜机器学习(phpthinker)

原文发表时间:2017-08-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序猿

第三节:如何使用Burp Suite代理

Burp Proxy 是Burp Suite以用户驱动测试流程功能的核心,通过代理模式,可以让我们拦截、查看、修改所有在客户端和服务端之间传输的...

35112
来自专栏LanceToBigData

struts2(一)之初识struts2

前言   我们都知道struts2是一个框架,那什么是框架呢?很多人其实不太明白,其实框架就是一个半成品,别人将一些功能已经写好了,我们只需要拿来用即可,像我们...

1909
来自专栏惨绿少年

Nginx软件优化

1.1 Nginx优化分类 安全优化(提升网站安全性配置) 性能优化(提升用户访问网站效率) 1.2 Nginx安全优化 1.2.1 隐藏nginx版本信息优化...

3968
来自专栏程序员宝库

Laravel 开发 RESTful API 的一些心得

最近用 Laravel 写了一段时间的 API,总结一下自己的心得吧。 Start API开发我们可以看到,有些网站用token验证身份,有些用OAuth2.0...

3959
来自专栏偏前端工程师的驿站

网页优化系列一:合并文件请求(asp.net版)

  最近因公司需要对网站的优化处理学习了一番,现在借本系列博文与大家分享一下自己的学习成果,有纰漏处请大家多多指正。   首先推荐一篇十分全面的网页优化文章  ...

1768
来自专栏达摩兵的技术空间

vue-router根据环境改变动态加载组件

在webpack的新特性中支持组件的懒加载,也就是说我们可以在加载到该路由的时候再把这部分脚本进行加载,同时这个在项目进行打包的时候,对应的文件也会被单独打包,...

482
来自专栏北京马哥教育

【大型网站技术实践】初级篇:借助Nginx搭建反向代理服务器

一、反向代理:Web服务器的“经纪人” 1.1 反向代理初印象 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然...

3688
来自专栏PHP技术

API接口TOKEN设计

首先需要知道API是什么? API(Application Programming Interface)即应用程序接口。你可以认为 API 是一个软件组件或是一...

63513
来自专栏阿杜的世界

Spring Boot应用的健康监控

在之前的系列文章中我们学习了如何进行Spring Boot应用的功能开发,以及如何写单元测试、集成测试等,然而,在实际的软件开发中需要做的不仅如此:还包括对应用...

1041
来自专栏行者悟空

Nginx 启用upstream模块后,location块中的相关参数说明

492

扫描关注云+社区