是什么
Redis:REmote DIctionary Server(远程字典服务器)是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的(key/value)分布式内存数据库,基于内存运行 并支持持久化的NoSQL数据库,是当前最热门的NoSql数据库之一,也被人们称为数据结构服务器。
Redis 与其他 key - value 缓存产品相比有以下三个特点:
- Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储
- Redis支持数据的备份,即master-slave模式的数据备份
云数据库 Memcache 版实例中的数据是存储在内存中的,当出现宕机、机房断电等意外,或是云数据库 Memcache 版实例在正常升级维护时,内存中的数据均会丢失。因此,云数据库 Memcache 版不能作为持久化的数据存储服务使用。
能干嘛
- 内存存储和持久化:redis支持异步将内存中的数据写到硬盘上,同时不影响继续服务
- 取最新N个数据的操作,如:可以将最新的10条评论的ID放在Redis的List集合里面
- 模拟类似于HttpSession这种需要设定过期时间的功能
- 发布、订阅消息系统
- 定时器、计数器
去拿下
怎么玩
- 数据类型、基本操作和配置
- 持久化和复制,RDB/AOF
- 事务的控制
- 复制(主从关系)
安装
{%post_link 工作/300_DevOps/linux/centos使用篇 centos使用篇%} / redis安装部分
这里推荐使用docker安装,快捷方便
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
# 1. 查看镜像来源
$ docker search redis
# 2. 下载镜像
docker pull redis
# 3. 从官网(http://download.redis.io/redis-stable/redis.conf)下载redis.conf放到配置文件目录
# david @ Davids-Macbook-Pro in /tmp/docker/redis [21:07:23]
$ ls
redis.conf
# 4. 修改启动默认配置
bind 127.0.0.1 #注释掉这部分,这是限制redis只能本地访问
protected-mode no #默认yes,开启保护模式,限制为本地访问
daemonize no#默认no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程,改为yes会使配置文件方式启动redis失败,因为该选项让redis成为在后台运行的守护进程,而docker容器必须要有一个前台进程才能留存。
databases 16 #数据库个数(可选)
dir ./ #输入本地redis数据库存放文件夹(可选)
appendonly yes #开启aof,更好的持久化保证
# 5. 启动镜像
docker run -p 6379:6379 --name eh-redis \
-v /tmp/docker/redis:/etc/redis \
-v /tmp/docker/redis/data:/data \
-d redis \
redis-server /etc/redis/redis.conf
fa81f97cb89680bc05b878a81850cfec446422b6eab3513dce5614ab291df70e
# 6. 查看是否运行成功
$ docker ps
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fa81f97cb896 redis "docker-entrypoint.s…" 9 seconds ago Up 7 seconds 0.0.0.0:6379->6379/tcp eh-redis
# 7. 查看redis启动日志
$ docker logs fa
1:C 25 Oct 2020 13:36:32.915 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1:C 25 Oct 2020 13:36:32.915 # Redis version=6.0.8, bits=64, commit=00000000, modified=0, pid=1, just started
1:C 25 Oct 2020 13:36:32.915 # Configuration loaded
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 6.0.8 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 6379
| `-._ `._ / _.-' | PID: 1
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
1:M 25 Oct 2020 13:36:32.921 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
1:M 25 Oct 2020 13:36:32.921 # Server initialized
1:M 25 Oct 2020 13:36:32.928 * Ready to accept connections
# 8. 进入容器
$ de fa bash 或者 $ de eh-redis bash
root@fa81f97cb896:/data#
|
杂项
-
测试redis在机器运行的性能
bin/redis-benchmark
-
单进程
- 单进程模型来处理客户端的请求。对读写等事件的响应 是通过对epoll函数的包装来做到的。Redis的实际处理速度完全依靠主进程的执行效率
- Epoll是Linux内核为处理大批量文件描述符而作了改进的epoll,是Linux下多路复用IO接口select/poll的增强版本, 它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。
-
默认16个数据库,类似数组下表从零开始,初始默认使用零号库,可在配置文件配置
-
select
命令切换数据库
-
dbsize
查看当前数据库的key的数量
-
flushdb
:清空当前库
-
flushall
;通杀全部库
-
统一密码管理,16个库都是同样密码,要么都OK要么一个也连接不上
-
Redis索引都是从零开始
-
为什么默认端口是6379
6379在是手机按键上MERZ对应的号码,而MERZ取自意大利歌女Alessia Merz的名字。MERZ长期以来被antirez及其朋友当作愚蠢的代名词。Redis作者antirez同学在twitter上说将在下一篇博文中向大家解释为什么他选择6379作为默认端口号。而现在这篇博文出炉,在解释了Redis的LRU机制之后,向大家解释了采用6379作为默认端口的原因。
-
查看是否已启动
1
2
3
4
|
# 方式一
$ ps -ef | grep redis
# 方式二
$ lsof -i :6379
|