追逐家程序员我爱编程

Redis 基础 一

2018-01-29  本文已影响58人  七弦桐语

本文主要介绍了 Redis 的简介、安装、常用命令和基础类型。


简介和安装

1. NoSQL 简介

NoSQL,泛指非关系型数据库,NoSQL数据库分四类

  1. 键值(key-value)存储数据库,这一类数据库会使用一个哈希表,这个表中一个特定的键和一个指针指向特定的数据,如Redis,Voldmort,Oracle BDB
  2. 列存储数据库,通常用来因对分布式存储的海量诗句,键仍然存在,但是它们的特点是指向多个列。如HBASE,Riak。
  3. 文档型数据库,数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON。文档型数据库可以看做是键值数据库的升级版,允许之间嵌套键值。而且文档数据库比键值数据库的查询效率更高。如:CouchDB,MongoDB。
  4. 图形数据库,与其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,能够扩展到过个服务器上。

NoSQL数据库没有表中的查询语言(SQL),因此进行数据查询需要定制数据模型。许多NoSQL数据库都有TEST式的数据接口或者API。如:Neo4J,InfoGrid,Infinite Graph。

2. 非关系型数据库的特点

  1. 数据模型比较简单
  2. 需要灵活性更强的IT系统
  3. 对数据库性能要求较高
  4. 不需要高度的数据一致性
  5. 对于给定的key,比较容易映射复杂值得环境

Redis 简介

是以key-value形式存储,data structure service 数据结构服务器。键可以包含:(String) 字符串,哈希,(list)链表,(set)集合,(zset)有序集合。这些数据集合都支持push/pop、add/remove级取交集、并集已经更复杂的操作。Redis支持各种不同的方式排序。为了保证效率,数据都是缓存在内存中,它可以周期性的把更新的数据写入磁盘或者把修改的操作追加到文件中。

3. 一些特性

4. Redis 的三种内容解决方案

  1. 主从形式: 普通的一个主节点,多个从节点。当主节点挂掉的话,整个集群挂掉。
  2. 哨兵形式(redis 2.x):在主从的基础上增加一个哨兵节点,来监视主从节点的状态。当主节点挂掉的时候,在从节点里通过选举方式选择一个从节点来当主节点。当主节点修复,会默认变成从节点。
  3. 集群模式(redis 3.x):多主多从,可以做数据的分布(把数据均摊到多台机器)

5. 关于Redis的面试问题

1. Redis 慢

原因:在写入的时候,redis 使用AOF模式来维持高可用,因此要不断的记录日志。导致写慢读快(读自内存)。

解决方法:2.0时候可以调节虚拟机的参数;3.0集群后参数不可调,多加服务器;增加结合SSDB,来增加写的速度。

2. 如何综合的解决高并发问题

前端:lvs(负载兼容器) + nginx(业务拆分)

后台:数据库的分表分库 / redis缓存(提高性能,给数据库降压)

3. 业务场景

不需要实时返回数据,不需要强一致性

Redis 安装和常用命令

1. Linux 系统

下载地址

安装步骤

  1. 首先安装 gcc,把下载好的redis-3.0.0-rc2.tar.gz放到 Linux /usr/local文件夹下;
  2. 进行解压 tar -zxvf redis-3.0.0-rc2.tar.gz
  3. 进入到 redis-3.0.0目录下,进行编译 make
  4. 进入到src下进行安装 make install ,验证(查看 src 目录下,有redis-serverredis-cli即可);
  5. 建立两个文件夹存放 redis 命令和配置文件。
    • mkdir -p /usr/local/redis/etc
    • mkdir -p /usr/local/redis/bin
  6. redis-3.0.0下的redis.conf移动到/usr/local/redis/etc下。
    • cp redis.conf /usr/local/redis/etc
  7. redis-3.0.0/src里的以下文件移动到 bin 下。
    • mv mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-dump redis-cli redis-server /usr/local/redis/bin
  8. 启动时并制定配置文件=: ./redis-server /usr/local/redis/etc/redis.conf。(注意使用后台启动,所以修改redis.conf里的9 daemonize 改为yes)
  9. 验证是否启动成功
    • ps -ef | grep redis 或查看端口号netstat -tunpl | grep 6379
    • 进入redis客户端redis-cli,退出客户端quit
    • 退出redis服务pkill redis-server,或kill进程号,或/usr/local/redis/bin/redis cli shutdown

安装命令补充

  1. linux yum rz安装(使可以上传下载文件): sudo yum install lrzsz -y
  2. 上传文件 rz(sc: 下载文件)
  3. gcc 安装: sudo yum install gcc-c++
  4. 进入redis加压后的文件夹,执行make,报错的话执行make MALLOC=libc
  5. 启动redis服务器:/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf;启动客户端/usr/local/redis/bin/redis-cli
  6. 格式解压
.tar.gz     格式解压为          tar   -zxvf   xx.tar.gz
.tar.bz2   格式解压为          tar   -jxvf    xx.tar.bz2

2. Mac 系统

使用Homebrew安装 Redis
安装命令

brew install redis 

安装完成后的提示信息

To have launchd start redis at login: 
ln -sfv /usr/local/opt/redis/*.plist ~/Library/LaunchAgents 
Then to load redis now: 
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.redis.plist 
Or, if you don’t want/need launchctl, you can just run: 
redis-server /usr/local/etc/redis.conf

3. 常用命令

开机启动 Redis 命令

$ ln -sfv /usr/local/opt/redis/*.plist ~/Library/LaunchAgents

检查服务是否启动

$ redis-cli ping 返回 PONG 启动
$ ps aux | grep redis // 查看redis进程

使用配置文件启动 Redis 命令

$ redis-server /usr/local/etc/redis.conf
或 $ redis-server
另 $ redis-server & // 后台程序式运行

停止 Redis 服务

$ redis-cli shutdown
// Redis收到命令后,服务端会断开所有客户端的连接,然后根据配置执行持久化,最后退出

启动客户端

// 1. 按照默认配置连接Redis(127.0.0.1:6379)
$ redis-cli
// 2. 指定地址和端口号
redis-cli -h 127.0.0.1 -p 6379

停止客户端

ctrl + c 或 quit

redis 配置文件的位置

/usr/local/etc/redis.conf

卸载redis和它的文件

brewuninstall redis rm ~/Library/LaunchAgents/homebrew.mxcl.redis.plist

4. 其他命令

-- 修改为守护模式
daemonize yes

-- 设置进程锁文件
pidfile /usr/local/redis/redis.pid

-- 端口
port 6379

-- 客户端超时时间
timeout 300

-- 日志级别
loglevel debug

-- 日志文件位置
logfile /usr/local/redis/log-redis.log

-- 设置数据库的数量,默认数据库为16,可以使用SELECT 命令在连接上指定数据库id
databases 16

-- 指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合
-- save

-- Redis默认配置文件中提供了三个条件:
save 900 1
save 300 10
save 60 10000

-- 指定存储至本地数据库时是否压缩数据,默认为yes,Redis采用LZF压缩,如果为了节省CPU时间,
-- 可以关闭该#选项,但会导致数据库文件变的巨大
rdbcompression yes

-- 指定本地数据库文件名
dbfilename dump.rdb

-- 指定本地数据库路径
dir /usr/local/redis/db/

-- 指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能
-- 会在断电时导致一段时间内的数据丢失。因为 redis本身同步数据文件是按上面save条件来同步的,所以有
-- 的数据会在一段时间内只存在于内存中
appendonly no
-- 指定更新日志条件,共有3个可选值:
-- no:表示等操作系统进行数据缓存同步到磁盘(快)
-- always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全)
-- everysec:表示每秒同步一次(折衷,默认值)
appendfsync everysec

Redis 基础类型讲解

redis 一共5种基本数据类型: String、Hash、List、Set、ZSet

1. String 类型

String 类型是包含很多种类型的特殊类型,并且是二进制安全的。比如序列化对象进行存储,比如一张二进制图片进行二进制存储,比如一个简单的字符串、数值等。

2. Hash 类型

Hash 类型是 String 类型的 field 和 value 的映射,或者说一个 String 几何,适合存储对象,会比把一个对象类型存储到String 中更减少空间,并方便存储整个对象。

3. List 类型

List 类型是一个链表结构的集合,其主要功能有 pushpop、获取元素等。List类是一个双端链表结构。我们可以进行集合的头部和尾部添加或删除元素。List 可以作为栈,又可以作为队列。

4. Set 类型和 Zset 类型

set 集合是 String 类型的无序集合,set 是通过hashtable实现的,对集合我们可以取交集、并集、差集。

set 类型

zset 类型

zadd zset1 3 five;
zadd zset1 1 one;
zadd zset1 2 two;

zrange zset1 0 -1 withscores;  -- 展示所有元素

zset可以做搜索排行

Redis 高级命令

1. Redis高级命令及特性

2. Redis 的安全性

因为Redis的速度相当快,一个外部用户1秒内可以进行15w次的密码尝试,这意味着需要设定非常强大的密码来防止暴力破解。

vi编辑redis.conf文件,找到下面进行保存修改

#requirepass foobared
requirepass ****

重启服务器pkill redis-server,再次进入keys *,会发型没有权限进行查询(erro)NOAUTH Authentication required。输入密码则能成功进入auth bhz

每次进入的时候都需要输入密码,有种简单的方式直接登录授权:#/usr/local/redis/bin/redis-cli -a bhz

3. 主从复制

主从复制

  1. Master可以拥有多个slave(层服务器)
  2. 多个slave可以连接同一个master外,还可以连接到其他slave
  3. 主从复制不会阻塞master,在同步时master可以继续处理client请求
  4. 提供系统的伸缩性
    主从复制过程
  5. slave与master建立连接,发送sync同步命令
  6. master会开启一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的命令并缓存。
  7. 后台完成保存后,就将文件发送给slave
  8. slave将此文件保存到硬盘上
    主从复制配置
  9. clone 服务器之后修改 slave 的 IP 地址
  10. 修改配置文件:/usr/local/redis/etc/redis.conf
    • 第一步,slaveof<masterip><mastport>
    • 第二部,masterauth<master-password>
      使用info查看 role 角色即可知道是主服务或从服务

克隆服务器

  1. 关掉当前的虚拟机
  2. VMware 在当前服务器上右键『管理』--『克隆』-- 『下一步,下一步』--『创建完整克隆』
  3. 克隆出的新服务的『网络适配器』--右边的『高级』--『确定』

设置IP

# ifconfig eth0  192.168.149.129 netmask 255.255.255.0

其他方式资料参考


上一篇下一篇

猜你喜欢

热点阅读