Redis入门
# Redis入门
# 1. Redis概述
# 1.1 Redis 是什么
Redis(
Re
moteDi
ctionaryS
erver ),即远程字典服务 !
Redis
是一个开源的使用ANSI C语言编写、支持网络、可基于内存
亦可持久化的日志型、Key-Value数据库
,并提供多种语言的API。
免费和开源!是当下最热门的 NoSQL 技术之一!也被人们称之为结构化数据库!
# 1.2 Redis能干什么
内存存储、持久化,内存中是断电即失、所以说持久化很重要(rdb、aof)
效率高,可以用于高速缓存
发布订阅系统
地图信息分析
计时器、计数器(浏览量!)
# 1.3 特性
- 多样的数据类型
- 持久化
- 集群
- 事务
# 1.4 redis下载地址
Redis推荐都是在Linux服务器上搭建的.
官网:https://redis.io/
中文网:http://www.redis.cn/
# 2. Redis安装
# 2.1 Windows安装
下载安装包:https://github.com/microsoftarchive/redis/releases
下载完毕得到压缩包:
- 解压到自己电脑上的环境目录下的就可以的!Redis 十分的小,只有5M
- 开启Redis,双击运行服务即可!
- 使用redis客户单来来连接redis
推荐使用Linux版
# 2.2 Linux安装
- 解压Redis的安装包!
tar -zxvf redis-5.0.8.tar.gz
- 进入解压后的文件,可以看到我们redis的配置文件
- 基本的环境安装
# 安装gcc
yum install gcc-c++
make
make install
2
3
4
- redis的默认安装路径
/usr/local/bin
- 将redis配置文件。复制到我们当前目录下
/usr/local/bin/redis-config
我们之后就使用这个文件进行启动
redis默认不是后台启动的
,修改配置文件
vim redis.conf
- 启动redis服务
[root@VM_0_14_centos bin]# pwd
/usr/local/bin
[root@VM_0_14_centos bin]# redis-server redis-config/redis.conf
31371:C 10 Jul 2020 16:29:52.963 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
31371:C 10 Jul 2020 16:29:52.963 # Redis version=5.0.8, bits=64, commit=00000000, modified=0, pid=31371, just started
31371:C 10 Jul 2020 16:29:52.963 # Configuration loaded
[root@VM_0_14_centos bin]#
2
3
4
5
6
7
redis-server redis-config/redis.conf
: 启动redis 配置文件使用redis-config/redis.conf
- redis客户端连接
redis-cli -p 6379
[root@VM_0_14_centos bin]# ls
redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-config redis-sentinel redis-server
[root@VM_0_14_centos bin]# redis-cli -p 6379
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> set name chggx
OK
127.0.0.1:6379> get name
"chggx"
127.0.0.1:6379> get age
(nil)
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379>
2
3
4
5
6
7
8
9
10
11
12
13
14
- 查看redis的进程是否开启!
ps -ef | grep redis
[root@VM_0_14_centos ~]# ps -ef | grep redis
root 31372 1 0 16:29 ? 00:00:00 redis-server 127.0.0.1:6379
root 32639 5035 0 16:35 pts/0 00:00:00 redis-cli -p 6379
root 32714 32652 0 16:36 pts/2 00:00:00 grep --color=auto redis
[root@VM_0_14_centos ~]#
2
3
4
5
- 如何关闭Redis服务呢?
shutdown
- 再次查看进程是否存在
[root@VM_0_14_centos ~]# ps -ef | grep redis
root 1098 32652 0 16:40 pts/2 00:00:00 grep --color=auto redis
[root@VM_0_14_centos ~]#
2
3
# 3. 性能测试
redis-benchmark
是一个压力测试工具!
图片来源与菜鸟教程
# 测试:100个并发连接 100000请求
redis-benchmark -h localhost -p 6379 -c 100 -n 100000
2
[root@VM_0_14_centos bin]# redis-benchmark -h localhost -p 6379 -c 100 -n 100000
====== PING_INLINE ======
100000 requests completed in 2.06 seconds
100 parallel clients
3 bytes payload
keep alive: 1
17.62% <= 1 milliseconds
94.30% <= 2 milliseconds
99.15% <= 3 milliseconds
99.38% <= 4 milliseconds
99.40% <= 5 milliseconds
99.40% <= 7 milliseconds
99.45% <= 8 milliseconds
......
====== SET ======
100000 requests completed in 2.16 seconds
100 parallel clients
3 bytes payload
keep alive: 1
12.27% <= 1 milliseconds
88.90% <= 2 milliseconds
99.16% <= 3 milliseconds
99.75% <= 4 milliseconds
99.78% <= 5 milliseconds
99.85% <= 6 milliseconds
99.96% <= 10 milliseconds
99.98% <= 11 milliseconds
100.00% <= 11 milliseconds
46317.74 requests per second
====== GET ======
100000 requests completed in 2.06 seconds
100 parallel clients
3 bytes payload
keep alive: 1
14.48% <= 1 milliseconds
92.72% <= 2 milliseconds
99.81% <= 3 milliseconds
99.90% <= 7 milliseconds
99.97% <= 8 milliseconds
100.00% <= 8 milliseconds
48543.69 requests per second
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
# 4. redis的基础知识
redis默认有
16
个数据库. 我们默认使用的是0
个数据库.
# 4.1 select
进行切换数据库!
127.0.0.1:6379> select 3 # 切换数据库 3号
OK
127.0.0.1:6379[3]> DBSIZE # 查看数据库大小
(integer) 0
127.0.0.1:6379[3]> set name xiaohong
OK
127.0.0.1:6379[3]> DBSIZE
(integer) 1
127.0.0.1:6379> select 7 # 切换到别的数据库,查看是否有数据
OK
127.0.0.1:6379[7]> DBSIZE
(integer) 0
127.0.0.1:6379[7]> get name
(nil)
127.0.0.1:6379[7]> select 3 # 重新切换回3号数据库
OK
127.0.0.1:6379[3]> DBSIZE
(integer) 1
127.0.0.1:6379[3]> get name
"xiaohong"
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
- 查看数据库所有key
127.0.0.1:6379[3]> keys * # 查看数据库所有key
1) "name"
2
- 清空当前库所有数据:
flushdb
127.0.0.1:6379[3]> flushdb # 清空当前库所有数据
OK
127.0.0.1:6379[3]> keys *
(empty list or set)
2
3
4
- 清空所有库数据
flushall
127.0.0.1:6379[3]> select 0 # 切换到0号库
OK
127.0.0.1:6379> keys * # 查看所有key
1) "mylist"
2) "myset:__rand_int__"
3) "counter:__rand_int__"
4) "name"
5) "key:__rand_int__"
127.0.0.1:6379> select 3 # 重新切换到3号数据库
OK
127.0.0.1:6379[3]> flushall # 清空所有库信息
OK
127.0.0.1:6379[3]> select 0 # 切换到0号库
OK
127.0.0.1:6379> keys * # 查看信息是否存在
(empty list or set) # 不存在
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 4.2 为什么redis是 6379!
https://www.zhihu.com/question/20084750
# 4.3 Redis 为什么单线程还这么快?
Redis 是单线程的!
1、误区1:高性能的服务器一定是多线程的?
2、误区2:多线程(CPU上下文会切换!)一定比单线程效率高!
先去CPU>内存>硬盘的速度要有所了解!
核心:redis 是将所有的数据全部放在内存中的
,所以说使用单线程去操作效率就是最高的,多线程(CPU上下文会切换:耗时的操作!!!),对于内存系统来说,如果没有上下文切换效率就是最高的!多次读写都是在一个CPU上的,在内存情况下,这个就是最佳的方案!