redis 介绍和安装
Redis和Memcached是非关系型数据库也称为NoSQL数据库,MySQL、Mariadb、SQL Server、PostgreSQL、 Oracle 数据库属于关系型数据(RDBMS, Relational Database Management System) edis对比memcached 1、支持数据的持久化:可以将内存中的数据保持在磁盘中,重启redis服务或者服务器之后可以从备份文件中恢复数据到内存继续使用。 2、支持更多的数据类型:支持string(字符串)、hash(哈希数据)、list(列表)、set(集合)、zet(有序集合) 3、支持数据的备份:可以实现类似于数据的master-slave模式的数据备份,另外也支持使用快照+AOF。 4、支持更大的value数据:memcache单个key value最大只支持1MB,而redis最大支持512MB。 5、Redis 是单线程,而memcache是多线程,所以单机情况下没有memcache并发高,但redis 支持分布式集群以实现更高的并发,单Redis实例可以实现数万并发。 6、支持集群横向扩展:基于redis cluster的横向扩展,可以实现分布式集群,大幅提升性能和数据安全性。 7、都是基于C语言开发 redis 典型应用场景 Session 共享:常见于web集群中的Tomcat或者PHP中多web服务器session共享 消息队列:ELK的日志缓存、部分业务的订阅发布系统 计数器:访问排行榜、商品浏览数等和次数相关的数值统计场景 缓存:数据查询、电商网站商品信息、新闻内容 微博/微信社交场合:共同好友、点赞评论等 Redis安装: 一、yum安装redis: 在centos系统上需要安装epel源。 yum info redis yum install redis 二、编译安装redis #安装依赖包 wget http://download.redis.io/releases/${VERSION}.tar.gz yum -y install gcc jemalloc-devel #指定redis安装目录 tar xvf redis-5.0.7.tar.gz cd redis-5.0.7/ make PREFIX=/usr/local/redis install #PATH设置 echo 'PATH=/usr/local/redis/bin:$PATH' > /etc/profile.d/redis.sh . /etc/profile.d/redis.sh #创建配置文件、日志、数据等目录 mkdir /usr/local/redis/{etc,logs,data,run} cp redis.conf /usr/local/redis/etc/ #创建redis 用户和数据目录: groupadd -g 1100 redis && useradd -u 1100 -g 1000 redis -s /sbin/nologin chown redis.redis -R /usr/local/redis #编辑redis服务启动脚本 vim /usr/lib/systemd/system/redis.service [Unit] Description=Redis persistent key-value database After=network.target After=network-online.target Wants=network-online.target [Service] #ExecStart=/usr/bin/redis-server /etc/redis.conf --supervised systemd ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf --supervised systemd ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s QUIT $MAINPID Type=notify User=redis Group=redis RuntimeDirectory=redis RuntimeDirectoryMode=0755 [Install] WantedBy=multi-user.target 前台启动redis 提示警告 #redis-server /usr/local/redis/etc/redis.conf 27569:M 16 Feb 2020 21:18:20.414 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. 27569:M 16 Feb 2020 21:18:20.414 # Server initialized 27569:M 16 Feb 2020 21:18:20.414 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect. 27569:M 16 Feb 2020 21:18:20.414 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled. 27569:M 16 Feb 2020 21:18:20.414 * Ready to accept connections #解决当前的警告提示 backlog参数控制的是三次握手的时候server端收到client ack确认号之后的队列值。 0、表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存 申请失败,并把错误返回给应用进程。 1、表示内核允许分配所有的物理内存,而不管当前的内存状态如何。 2、表示内核允许分配超过所有物理内存和交换空间总和的内存 vim /etc/sysctl.conf net.core.somaxconn = 512 vm.overcommit_memory = 1 大页内存动态分配,需要关闭让redis 负责内存管理。 echo never > /sys/kernel/mm/transparent_hugepage/enabled