redis安装及基础知识
最后更新于:2022-04-01 21:49:53
## 1. Redis简介
Redis:REmote DIctionary Server(远程字典服务器)
### 1.1 Redis是什么?
是完全开源免费的,用C语言编写的,遵守BSD协议,
是一个高性能的(key/value)分布式内存数据库,基于内存运行
并支持持久化的NoSQL数据库,是当前最热门的NoSql数据库之一 ,也被人们称为数据结构服务器
Redis支持数据的备份,即master-slave模式的数据备份
Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储
Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用
### 1.2 能做什么?
定时器、计数器
发布、订阅消息系统(消息中间件)
模拟类似于HttpSession这种需要设定过期时间的功能
取最新N个数据的操作,如:可以将最新的10条评论的ID放在Redis的List里面
内存存储和持久化:redis支持异步将内存中的数据写到硬盘上,同时不影响继续服务
### 1.3 官方网站
* 官网
http://redis.io/download
* 中文网:
http://www.redis.net.cn/
http://www.redis.cn/
## 2.Redis安装
### 2.1 安装过程
* 安装环境 ubuntu14.04 server
```
wget http://download.redis.io/releases/redis-3.2.5.tar.gz
tar -xzvf ./redis-3.2.5.tar.gz
cd redis-3.2.5/
~/redis-3.2.5$ sudo apt-get install gcc
~/redis-3.2.5$ sudo apt-get install make
~/redis-3.2.5$ make MALLOC=libc
```
* 将可执行文件导入/usr/local/bin 目录
```
~/redis-3.2.5$ sudo make install
cd src && make install
make[1]: 正在进入目录 `/home/hanxt/redis-3.2.5/src'
Hint: It's a good idea to run 'make test' ;)
INSTALL install
INSTALL install
INSTALL install
INSTALL install
INSTALL install
make[1]:正在离开目录 `/home/hanxt/redis-3.2.5/src'
```
在执行了make install之后,查看默认安装目录:/usr/local/bin,包含如下文件:
1. redis-benchmark:性能测试工具,可以在自己本子运行,看看自己本子性能如何
服务启动起来后执行
2. redis-check-aof:修复有问题的AOF文件
3. redis-check-dump:修复有问题的dump.rdb文件
4. redis-cli:客户端,操作入口
5. redis-sentinel:redis集群使用
6. redis-server:Redis服务器启动命令
* 修改redis.conf的配置
```
bind 192.168.1.152 127.0.0.1 #绑定ip,原始只有127.0.0.1
port 6379
daemonize yes #是否常驻进程运行,原始是no
dir /home/aexit1/data/redis/6379 #数据文件持久化存储路径,原始是./
logfile /var/log/redis/redis.log
requirepass <改为你自己的登陆密码>
```
* linux系统下面redis常用初始化脚本
```
#!/bin/bash
REDIS_PORT=6379
REDIS_ETC=/etc/redis
REDIS_INITD=/etc/init.d
sudo mkdir $REDIS_ETC
sudo mkdir -p ~/data/redis/$REDIS_PORT
sudo mkdir -p /var/log/redis
sudo cp ./redis-3.2.5/utils/redis_init_script ${REDIS_INITD}/redis_${REDIS_PORT}
sudo cp ./redis-3.2.5/redis.conf ${REDIS_ETC}/${REDIS_PORT}.conf
```
* 执行启动命令,守护进程
```
sudo /etc/init.d/redis_6379 start (还可以stop)
#redis-server ./redis.conf (这种启动方式,不是生产规范)
```
* 测试一下基础命令:
```
redis-cli -h 192.168.1.152 -p 6379
redis> set foo bar
OK
redis> get foo
"bar"
```
### 2.2.安装之后需要知道的基础知识
* redis是单进程工作,利用IO多路复用技术
* 默认16个数据库,类似数组下表从零开始,初始默认使用零号库,使用select命令切换数据库,如select 2
* Redis索引都是从零开始
* redis初始没有密码,可以使用统一密码管理,16个库都是同样密码,要么都OK要么一个也连接不上
* 默认端口是6379
## 4.Redis常用命令
> 更多命令请参考 http://redisdoc.com/
## 5.操作系统内核参数优化
### Redis的启动过程日志
> 可以看到启动过程中,有许多的警告
```
22034:M 28 Nov 11:21:07.123 * Increased maximum number of open files to 10032 (it was originally set to 1024).
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 3.2.5 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 6379
| `-._ `._ / _.-' | PID: 22034
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
22034:M 28 Nov 11:21:07.124 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
22034:M 28 Nov 11:21:07.125 # Server started, Redis version 3.2.5
22034:M 28 Nov 11:21:07.125 # 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.
22034:M 28 Nov 11:21:07.125 # 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.
22034:M 28 Nov 11:21:07.125 * DB loaded from disk: 0.000 seconds
22034:M 28 Nov 11:21:07.125 * The server is now ready to accept connections on port 6379
```
';