一、Redis基础

  1.概述

      RedisRemote Dictionary Server,远程字典服务器;发行与2009年,本质上来说,提供一种数据结构的远程存储结构;基于BSD开源协定的高级键值缓存和存储。常用于作为数据结构服务器(data structure server),能够存储列表、属组、字符串、hash、集合、有序集合、Bitmaps以及hyperloglogs

 

  2.特性

    (1)所有数据集必须在内存中运行,性能高

    (2)能提供持久存储;在内存中运行,周期性将内存中数据写入磁盘用于冗余数据,仅保证下一次Redis启动后数据依然存在,而不是数据的直接访问

注释:持久化方式

快照(Snapshotting)数据从内存中异步传输至磁盘上保存起来

AOF(Append Only File)每次的写操作附加在一个现有的文件后面,类似于Mysql的事务日志

    (3)单进程,响应所有请求

    (4)支持Lua脚本完成复杂的操作

    (5)支持组从模式,实现组从架构实现高可用;借助于sentinel来监控主节点,当发生故障提升从节点

    (6)redis 3.0开始支持集群,实现分布式,去中心化,读写操作可以在多节点进行

    (7)支持实现消息队列,可当做订阅使用

 

  3.评估数据

    (1)100万较小的键值字符串数据使用100MB内存

    (2)单线程,因此多核CPU只有一个核心会使用;但CPU不一定会成为瓶颈,因为Redis是非常简单的键值存储

    (3)大体上每秒承载50万并发

 

 4.Redis 3.0新功能:201541日正式推出

    (1) 对于Cluster功能进行改进

    (2) 新的数据类型:embedded string

    (3) LRU(最近最小使用)算法改进

预设随机取5个样本,插入并排序至一个pool,移除最佳者,如此反复,直到内存用量小于maxmemory设定

样本数量为5,多于先前的3

从局部最优趋向于全局最优

 

  5.存储系统

    RDBMS关系型数据库:OracleDB2PostgreSQLMySQLSQL Server… ...

    NoSQL非关系型数据库:CassandraHBaseMemcachedMongoDBRedis… …

key-value NoSQL:键值存储NoSQLMemcachedRedis… ...

Column family NoSQL:列式存储NoSQLCassandraHbase… ...

Documentation NoSQL:文档存户NoSQLMongoDB… ...

Graph NoSQL:图示存储NoSQLNeo4j… ...

    NewSQL分布式的关系型数据库系统:AerospikefoundationDBrethinkDB

 

 

 

二、RedisMemcached对比

 1.Memcached的优势

    (1)分布式的内存对象缓存系统

    (2)支持LRU算法

    (3)多线程;善用多核CPU,更少的阻塞类操作

    (4)更少的内存开销、内存分配压力、内存碎片

 

 2.Redis优势

    (1)丰富的资料形态操作

    (2)内奸replication复制及cluster集群功能

    (3)就地更新(in-place update) 操作,直接在内存中更新

    (4)支持持久化,避免雪崩效应

 

 

 

三、Redis安装配置

 1.Redis组件

      redis-server:服务器端

      redis-cli:命令行客户端,基于Redis协议连入redis服务端

      redis-benchmmarkredis压力测试工具

      redis-check-dump &redis-check-aof:实现redis检查的工具,检查两种持久化后的文件是否出现错误

wKiom1ct9-WQf5ycAAG7ZVEpgeM973.png

 

  2.安装redis

   (1)编译安装方式

无需configure,直接make即可编译;复制阳历配置文件

   (2)RPM包安装Redis

epel源:yuminstall  -y redis

       注意:

1) 最新版本的可以在官方站点redis.io或者在pkgs下载RPM

2) 依赖于jemalloc,高性能分配算法库

 

 

  3.配置文件

    [root@localhost ~]#vim /etc/redis.conf

   (1)GENERAL配置段

daemonize  no

是否以守护进程运行,默认为no;但是基于脚本启动依然运行为守护进程

pidfile  /var/run/redis/redis.pid

pid文件

port 6379

监听端口6379/tcp

tcp-backlog 511

tcp-backlog(等待队列)的长度

bind 127.0.0.1

监听地址;本地建议监听在unixsocket在内存中直接交换

timeout 0

客户端连接超时时间,0不超时

tcp-keepalive 0

tcp-keepalive功能

loglevel notice

日志级别

logfile  /var/log/redis/redis.log

日志文件

databases  16

内部数据集合数量,默认都放置0号数据库,在分布式情况下不支持多库存储

   (2)SNAPSHOTTING:快照持久化配置段

save <seconds> <changes>:保存数据库在磁盘上;在多少秒多、少记录发生变化做一次快照

        实例:

save " " 禁用RDB格式的持久化功能

save 900 1:在900秒至少有一个键发生变化就进行一次持久化

save 300 10:在300秒内10个键发生变化

save 60 10000:在60秒内10000个键发生变化

   (3)REPLICATION复制相关配置

           slaveof <masterip><masterport>:指明该服务器是哪个Redis主服务器的从服务器,指明主服务器的IP和端口

注意:当启用该选项,表示为Redis主服务器

           slave-read-only yes:从服务器是否是只读

   (4) SECURITY安全相关的配置

   (5) LIMITS:限制相关的配置

   maxclients 10000:最大的并发客户端数量

   maxmemory<bytes>:最大内存使用数量

   (6) APPEND ONLY MODEAOF持久化功能配置段

   appendonly no:禁用AOF持久化功能

   appendfilename"appendonly.aof":保存文件名称

   appendfsync everysec:是否使用fsync功能

      注意:

            两种持久化方式可以并行使用,不冲突

     (7) LUA SCRIPTINGLua脚本配置段

    lua-time-limit5000

     (8) SLOW LOG:慢查询日志配置段

     (9) LATENCY MONITOR:监控功能配置段

     (10) Event notification :事件通知机制配置段,和发布订阅相关

     (11) ADVANCED CONFIG :高级配置,键和某些集合如何工作的属性

 

  4.启动服务

    [root@localhost ~]#systemctl start redis

    [root@localhost ~]#systemctl status redis

    [root@localhost ~]#ss -tnl


 

 5.redis-cli命令行接口连接服务

   (1)连接服务器

          格式:redis-cli [OPTIONS] [cmd [arg [arg ...]]]

-h <hostname> :指明主机地址

-p <port>:指明端口

-s <socket>:当本地连接时候指明套接字

-a <password>:指明认证密码

-r <repeat>:把指定命令执行N

     Examples:

  cat /etc/passwd | redis-cli -x set mypasswd

  redis-cli get mypasswd

  redis-cli -r 100 lpush mylist x

  redis-cli -r 100 -i 1 info | grepused_memory_human:

  redis-cli --eval myscript.lua key1 key2 ,arg1 arg2 arg3

  redis-cli --scan --pattern '*:12345*'

注意:

    默认是不启用认证功能的,可以直接连接使用

wKioL1ct-L-B1mqmAAA1hqfhkxw841.png

   (2)获取帮助

           因为redis功能强大,当获取帮助时候需要指明具体方面

Type:

"help @<group>" to get a list ofcommands in <group>:指明命令组,

"help <command>" for help on<command>:指明具体命令

    "help <tab>" to get a list of possible help topics:可以通过TAB键提示

wKiom1ct9-ahYL_pAAB5f8AG6I0224.png

   实例:

[root@localhost~]# redis-cli -h 127.0.0.1

127.0.0.1:6379>help @STRING

127.0.0.1:6379>help APPEND