1、概述
Redis是什么?
Redis(Re
mote Di
ctionary S
erver ),即远程字典服务。
是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
与memcached一样,为了保证效率,数据都是缓存在内存中。
区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
Redis能该干什么?
- 内存存储、持久化,内存是断电即失的,所以需要持久化(
RDB
、AOF
) - 高效率、用于高速缓冲
- 发布订阅系统
- 地图信息分析
- 计时器、计数器(eg:浏览量)
- 。。。
特性
-
多样的数据类型
-
持久化
-
集群
-
事务
-
…
…
2、环境搭建
官网:https://redis.io/
中文站:http://redis.cn/
推荐使用Linux服务器学习。
windows版本的Redis已经停更很久了…
1)Windows安装
(1)下载
地址:https://github.com/dmajkic/redis
(2)解压安装包
直接解压到目标文件夹下即可
(3)开启redis-server.exe
双击
redis-server.exe
即可
(4)启动redis-cli.exe测试
直接双击
redis-cli.exe
2)Linux安装
(1)下载安装包
下载地址:https://redis.io/
redis-6.2.6.tar.gz
(2)解压安装包
程序一般放在
/opt
目录下
tar -zxvf redis-6.2.6.tar.gz
(3)基本环境安装
yum install gcc-c++
# 进入redis目录下执行
make
make install
(4)默认安装路径
/usr/local/bin
(5)配置
将redis的配置文件从解压目录复制到 程序安装目录
/usr/local/bin/myconfig
下
cp /opt/redis-6.2.6/redis.conf myconfig
redis默认不是后台启动的,需要修改配置文件!修改
myconfig/redis.conf
配置文件
(6)启动
通过定制的配置文件启动redis服务
redis-server myconfig/redis.conf
(7)测试连接
使用
redis-cli
连接指定的端口号测试,Redis的默认端口6379
redis-cli -p 6379
ping
(8)查看redis进程是否开启
# 查看包含redis关键字的父进程
ps -ef|grep redis
(9)关闭Redis服务 shutdown
(10)再次查看进程是否存在
3、测试性能
Redis官方提供的性能测试工具
redis-benchmark
,参数选项如下:
简单测试
# 测试:100个并发连接 100000请求
redis-benchmark -h localhost -p 6379 -c 100 -n 100000
4、基础知识
默认有
16
个数据库;默认使用的是第0
个;16个数据库为:0 ~ 15
。
常用基本命令(Redis不区分大小写命令)
config get databases
查看数据库数量select n
切换数据库dbsize
查看数据库大小keys *
查看当前数据库中所有的keyflushdb
清空当前数据库中的键值对flushall
清空所有数据库的键值对
# 命令行查看数据库数量databases
127.0.0.1:6379> config get databases
1) "databases"
2) "16"
# 切换数据库 DB 8
127.0.0.1:6379> select 8
OK
# 查看数据库大小
127.0.0.1:6379[8]> dbsize
(integer) 0
# 不同数据库之间 数据是不能互通的,并且dbsize 是根据库中key的个数。
127.0.0.1:6379> set name sakura
OK
127.0.0.1:6379> SELECT 8
OK
# db8中并不能获取db0中的键值对。
127.0.0.1:6379[8]> get name
(nil)
127.0.0.1:6379[8]> DBSIZE
(integer) 0
127.0.0.1:6379[8]> SELECT 0
OK
127.0.0.1:6379> keys *
1) "counter:__rand_int__"
2) "mylist"
3) "name"
4) "key:__rand_int__"
5) "myset:__rand_int__"
# size和key个数相关
127.0.0.1:6379> DBSIZE
(integer) 5
Redis是单线程的,基于内存操作
所以Redis的性能瓶颈不是CPU,而是机器内存和网络带宽。
那么为什么Redis的速度如此快呢,性能这么高呢?QPS达到10W+
Redis为什么单线程还这么快?
- 误区1:高性能的服务器一定是多线程的?
- 误区2:多线程(CPU上下文会切换!)一定比单线程效率高!
核心:Redis是将所有的数据放在内存中的,所以说使用单线程去操作效率就是最高的,多线程(CPU上下文会切换:耗时的操作!),对于内存系统来说,如果没有上下文切换,效率就是最高的,多次读写都是在一个CPU上的,在内存存储数据情况下,单线程就是最佳的方案。