1.Redis 介绍

Nosql 基本概念

为了解决高并发、高可用、高可扩展,大数据存储等一系列问题而产生的数据库解决方案,就是NoSql。

NoSql,叫非关系型数据库,它的全名Not only sql。它不能替代关系型数据库,只能作为关系型数据库的一个良好补充。

Nosql 分类
  • 键值(Key-Value)存储数据库 相关产品: Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB 典型应用: 内容缓存,主要用于处理大量数据的高访问负载。 数据模型: 一系列键值对 优势: 快速查询 劣势: 存储的数据缺少结构化
  • 列存储数据库 相关产品:Cassandra, HBase, Riak 典型应用:分布式的文件系统 数据模型:以列簇式存储,将同一列数据存在一起 优势:查找速度快,可扩展性强,更容易进行分布式扩展 劣势:功能相对局限
  • 文档型数据库 相关产品:CouchDB、MongoDB 典型应用:Web应用(与Key-Value类似,Value是结构化的) 数据模型: 一系列键值对 优势:数据结构要求不严格 劣势: 查询性能不高,而且缺乏统一的查询语法
  • 图形(Graph)数据库 相关数据库:Neo4J、InfoGrid、Infinite Graph 典型应用:社交网络 数据模型:图结构 优势:利用图结构相关算法。 劣势:需要对整个图做计算才能得出结果,不容易做分布式的集群方案。
Redis 基本概念

Redis是使用c语言开发的一个高性能键值数据库。Redis可以通过一些键值类型来存储数据。 键值类型: String字符类型 map散列类型 list列表类型 set集合类型 sortedset有序集合类型

发展历史

2008年,意大利的一家创业公司Merzia推出了一款基于MySQL的网站实时统计系统LLOOGG,然而没过多久该公司的创始人 Salvatore Sanfilippo便 对MySQL的性能感到失望,于是他决定亲自为LLOOGG量身定做一个数据库,并于2009年开发完成,这个数据库就是Redis。 不过Salvatore Sanfilippo并不满足只将Redis用于LLOOGG这一款产品,而是希望更多的人使用它,于是在同一年Salvatore Sanfilippo将Redis开源发布,并开始和Redis的另一名主要的代码贡献者Pieter Noordhuis一起继续着Redis的开发,直到今天。

Salvatore Sanfilippo自己也没有想到,短短的几年时间,Redis就拥有了庞大的用户群体。Hacker News在2012年发布了一份数据库的使用情况调查,结果显示有近12%的公司在使用Redis。国内如新浪微博、街旁网、知乎网,国外如GitHub、Stack Overflow、Flickr等都是Redis的用户。

VMware公司从2010年开始赞助Redis的开发, Salvatore Sanfilippo和Pieter Noordhuis也分别在3月和5月加入VMware,全职开发Redis。

应用场景

缓存(数据查询、短连接、新闻内容、商品内容等等)。(最多使用) 分布式集群架构中的session分离。 聊天室的在线好友列表。 任务队列。(秒杀、抢购、12306等等) 应用排行榜。 网站访问统计。 数据过期处理(可以精确到毫秒)

2.Redis部署

环境IP:192.168.230.202
安装路径:/usr/local/redis
日志路径:/usr/local/redis/logs
pid及log文件均在/usr/local/redis/logs
安装

下载redis5.0.8安装包并解压到指定路径

wget http://download.redis.io/releases/redis-5.0.8.tar.gz
tar xf redis-5.0.8.tar.gz -C /usr/src/
cd /usr/src/redis-5.0.8/

由于已经有Makefile文件直接make编译即可,PREFIX指定编译路径

make &&make install PREFIX=/usr/local/redis

拷贝配置文件

cp redis.conf /usr/local/redis/
cd /usr/local/redis/
mkdir logs

修改redis配置文件

[root@master-all redis]# vim redis.conf
 # 监听地址
 bind 127.0.0.1
 # 是否开启保护模式
 protected-mode yes
 # 监听端口
 port 6379
 # 此参数确定了TCP连接中已完成队列(完成三次握手之后)的长度, 当然此值必须不大于Linux系统定义的/proc/sys/net/core/somaxconn值,默认是511,而Linux的默认参数值是128。当系统并发量大并且客户端速度缓慢的时候,可以将这二个参数一起参考设定。该内核参数默认值一般是128,对于负载很大的服务程序来说大大的不够。一般会将它修改为2048或者更大。在/etc/sysctl.conf中添加:net.core.somaxconn = 2048,然后在终端中执行sysctl -p。
 tcp-backlog 1024
 # timeout 在客户端空闲N秒后关闭连接,如果为0,表示禁用
 timeout 0
 # 如果值非0,单位是秒,表示将周期性的使用SO_KEEPALIVE检测客户端是否还处于健康状态,避免服务器一直阻塞,默认300秒
 tcp-keepalive 300
 # 是否后端运行
 daemonize yes
 supervised no
 # 设置运行pid文件路径
 pidfile /usr/local/redis/logs/redis.pid
 # 日志级别
 loglevel notice
 # 日志文件路径
 logfile "/usr/local/redis/logs/redis.log"
 # 设置数据库数量
 databases 1
 # 是否总是显示logo
 always-show-logo no
 save 900 1
 save 300 10
 save 60 10000
 # 持久化出现错误后是否依然继续进行工作
 stop-writes-on-bgsave-error yes
 # 是否启用压缩,但是会损耗一些cpu性能
 rdbcompression yes
 # 是否校验rdb文件,更有利于文件的容错性,但是在保存rdb文件的时候,会有大概10%的性能损耗,所以如果你追求高性能,可以关闭该配置。
 rdbchecksum yes
 # 数据存放名称
 dbfilename cache_data.rdb
 # 数据存放目录
 dir /usr/local/redis/
 replica-serve-stale-data yes
 replica-read-only yes
 repl-diskless-sync no
 repl-diskless-sync-delay 5
 repl-disable-tcp-nodelay no
 replica-priority 100
 # 设置连接密码
 requirepass U1adasd%
 lazyfree-lazy-eviction no
 lazyfree-lazy-expire no
 lazyfree-lazy-server-del no
 replica-lazy-flush no
 appendonly no
 appendfilename "appendonly.aof"
 appendfsync everysec
 no-appendfsync-on-rewrite no
 auto-aof-rewrite-percentage 100
 auto-aof-rewrite-min-size 64mb
 aof-load-truncated yes
 aof-use-rdb-preamble yes
 lua-time-limit 5000
 slowlog-log-slower-than 10000
 slowlog-max-len 128
 latency-monitor-threshold 0
 notify-keyspace-events ""
 hash-max-ziplist-entries 512
 hash-max-ziplist-value 64
 list-max-ziplist-size -2
 list-compress-depth 0
 set-max-intset-entries 512
 zset-max-ziplist-entries 128
 zset-max-ziplist-value 64
 hll-sparse-max-bytes 3000
 stream-node-max-bytes 4096
 stream-node-max-entries 100
  
 activerehashing yes
 client-output-buffer-limit normal 0 0 0
 client-output-buffer-limit replica 256mb 64mb 60
 client-output-buffer-limit pubsub 32mb 8mb 60
 # 默认情况下,hz设置为10.提高值时,在Redis处于空闲状态下,将使用更多CPU。范围介于1到500之间,大多数用户应使用默认值10,除非仅在需要非常低延迟的环境中将此值提高到100。
 hz 10
 # 启用动态HZ时,实际配置的HZ将用作基线,但是一旦连接了更多客户端,将根据实际需要使用配置的HZ值的倍数。
 dynamic-hz yes
 # 当一个子进程重写AOF文件时,如果启用下面的选项,则文件每生成32M数据会被同步。
 aof-rewrite-incremental-fsync yes
 # 当redis保存RDB文件时,如果启用了以下选项,则每生成32 MB数据将对文件进行fsync。 这对于以递增方式将文件提交到磁盘并避免大延迟峰值非常有用。
 rdb-save-incremental-fsync yes 

放行默认tcp 6379端口

firewall-cmd --zone=public --add-port=6379/tcp --permanent
firewall-cmd --reload
使用

启动

[root@master-all redis]# ./bin/redis-server redis.conf 

停止

[root@master-all redis]# ./bin/redis-cli shutdown

链接

[root@master-all redis]# ./bin/redis-cli -h 192.168.230.202 -p 6379

该文章采用「CC 协议」,转载必须注明作者和本文链接.
分类: Linux