概述
Redis 是什么?
Redis(Remote Dictionary Server ),即远程字典服务;
是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。
Redis 会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了 master-slave (主从)同步; 免费和开源,是当下最热门的 NoSQL 技术之一,也被人们称之为结构化数据库;
Redis 能干嘛?
1、内存存储、持久化,内存中是断电即失、所以说持久化很重要(RDB、AOF);
2、效率高,可以用于高速缓存;
3、发布订阅系统;
4、地图信息分析;
5、计时器、计数器(浏览量);
6、...
特性
1、多样的数据类型;
2、持久化;
3、集群;
4、事务;
5、...
学习中需要用到的东西
1、官网:redis.io/;
2、中文网:www.redis.cn/
注意:Wdinows 版在 Github上下载(停更很久了!)
Redis 推荐都是在 Linux 服务器上搭建的,我们是基于Linux学习!
基础知识
Redis 默认有16个数据库;
默认使用的是第0个,可以使用 select
进行切换数据库;
127.0.0.1:6379> select 3 # 切换数据库
OK
127.0.0.1:6379[3]> dbsize # 查看数据库大小
(integer) 0
127.0.0.1:6379[3]> keys * # 查看数据库所有的key
1) "name"
复制代码
清除当前数据库 flushdb
; 清除全部数据库的内容 FLUSHALL
;
思考:为什么 Redis 的端口是6379;
端口6379的由来;
Redis 是单线程的
明白 Redis 是很快的,官方表示,Redis 是基于内存操作,CPU 不是 Redis 性能瓶颈,Redis 的瓶颈是根据机器的内存和网络带宽,既然可以使用单线程来实现,就使用单线程了;
Redis 是 C 语言写的,官方提供的数据为 100000+ 的 QPS,完全不比同样是使用 key-vale 的 Memecache 差;
Redis 为什么单线程还这么快?
1、误区1:高性能的服务器一定是多线程的?
2、误区2:多线程(CPU 上下文会切换)一定比单线程效率高;
先要对 CPU>内存>硬盘的速度有所了解!
核心:Redis 是将所有的数据全部放在内存中的,所以说使用单线程去操作效率就是最高的,多线程(CPU 上下文会切换:耗时的操作),对于内存系统来说,如果没有上下文切换效率就是最高的,多次读写都是在一个 CPU 上的,在内存情况下,这个就是最佳的方案!
Linux 安装
1、从官网下载安装包; 2、解压 Redis 的安装包,tar -zxvf redis-6.2.5.tar.gz
, 程序一般放在 /opt 目录下;
3、进入解压后的文件,可以看到我们 Redis 的配置文件;
4、基本的环境安装:
yum install gcc-c++
gcc -v
make
make install
复制代码
5、Redis 的默认安装路径 /usr/local/bin
6、将 Redis 配置文件,复制到我们当前目录下;
7、Redis 默认不是后台启动的,修改配置文件!
8、启动 Redis服务;
9、使用redis-cli 进行连接测试;
10、如何关闭 Redis 服务呢?
Docker 安装
1、使用 docker 安装 redis:
docker pull redis
复制代码
这样拉下来的镜像就是最新的,如果要指定版本,可以在后面接个版本号;
安装好之后使用 docker images
即可查看:
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
redis latest 3e42dd4e79c7 7 weeks ago 117MB
复制代码
2、准备 redis 的配置文件:
可以去 redis 中文官方网站 下一个配置文件,
3、配置 redis.conf 配置文件:
可以先拷贝一份,以防万一;
具体的操作参考上边在 Linux 中进行的修改,主要配置的如下:
bind 127.0.0.1
# 注释掉这部分,使 redis 可以外部访问;daemonize no
# 用守护线程的方式启动;requirepass
# 给 redis 设置密码;appendonly yes
# redis 持久化,默认是 no;tcp-keepalive 300
# 防止出现远程主机强迫关闭了一个现有的连接的错误,默认是300;
4、创建本地目录与 docker 进行映射:
所谓的映射,就是将 docker 中的文件挂载到本地,方便一系列的操作,这个本地位置是自定义的,因此这里还是选择在 /opt
目录下,
[root@localhost ~]# mkdir /opt/redis
[root@localhost ~]# mkdir /opt/redis/data
# 把配置文件 redis.conf 拷贝到刚才创建好的文件里
[root@localhost ~]# cp -p redis.conf /opt/redis/
[root@localhost ~]# cd /opt/redis/
[root@localhost redis]# ls
data redis.conf
复制代码
5、启动 docker redis:
[root@localhost ~]# docker run -p 6379:6379 --name redis-sid10t -v /opt/redis/redis.conf:/etc/redis/redis.conf -v /opt/redis/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes
复制代码
参数解释:
-p 6379:6379
:把容器内的6379端口映射到宿主机6379端口;-v /opt/redis/redis.conf:/etc/redis/redis.conf
:把宿主机配置好的 redis.conf 放到容器内的这个位置中;-v /opt/redis/data:/data
:把 redis 持久化的数据在宿主机内显示,做数据备份;redis-server /etc/redis/redis.conf
:这个是关键配置,让 redis 不是无配置启动,而是按照这个 redis.conf 的配置启动;–appendonly yes
:redis 启动后数据持久化;
6、查看是否启动成功:
[root@localhost redis]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4c655b33fcff redis "docker-entrypoint.s…" 7 weeks ago Up 5 hours 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp redis-sid10t
复制代码
7、查看 docker redis 运行日志:
[root@localhost redis]# docker logs redis-sid10t
复制代码
后记
安装好之后,就可以准备正式开始学习 redis 了!