跳至主要內容

Redis概述和安装

晨光-向大约 5 分钟RedisRedis数据库非关系型数据库缓存

Redis入门

1. Redis概述

1.1 Redis 是什么

Redis(Remote Dictionary Server ),即远程字典服务 !

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

免费和开源!是当下最热门的 NoSQL 技术之一!也被人们称之为结构化数据库!

1.2 Redis能干什么

  1. 内存存储、持久化,内存中是断电即失、所以说持久化很重要(rdb、aof)

  2. 效率高,可以用于高速缓存

  3. 发布订阅系统

  4. 地图信息分析

  5. 计时器、计数器(浏览量!)

1.3 特性

  1. 多样的数据类型
  2. 持久化
  3. 集群
  4. 事务

1.4 redis下载地址

Redis推荐都是在Linux服务器上搭建的.

官网:https://redis.io/open in new window

中文网:http://www.redis.cn/open in new window

2. Redis安装

2.1 Windows安装

  1. 下载安装包:https://github.com/microsoftarchive/redis/releasesopen in new window

  2. 下载完毕得到压缩包:

  1. 解压到自己电脑上的环境目录下的就可以的!Redis 十分的小,只有5M
  1. 开启Redis,双击运行服务即可!
  1. 使用redis客户单来来连接redis

推荐使用Linux版

2.2 Linux安装

  1. 下载安装包open in new window
  1. 解压Redis的安装包!
tar -zxvf redis-5.0.8.tar.gz
  1. 进入解压后的文件,可以看到我们redis的配置文件
  1. 基本的环境安装
# 安装gcc
yum install gcc-c++ 
make 
make install
  1. redis的默认安装路径 /usr/local/bin
  1. 将redis配置文件。复制到我们当前目录下 /usr/local/bin/redis-config

我们之后就使用这个文件进行启动

  1. redis默认不是后台启动的,修改配置文件
vim redis.conf
  1. 启动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]# 

redis-server redis-config/redis.conf: 启动redis 配置文件使用 redis-config/redis.conf

  1. 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> 
  1. 查看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 ~]# 
  1. 如何关闭Redis服务呢? shutdown
  1. 再次查看进程是否存在
[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 ~]# 

3. 性能测试

redis-benchmark 是一个压力测试工具!

图片来源与菜鸟教程

# 测试:100个并发连接 100000请求 
redis-benchmark -h localhost -p 6379 -c 100 -n 100000
[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

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" 
  • 查看数据库所有key
127.0.0.1:6379[3]> keys * # 查看数据库所有key
1) "name"
  • 清空当前库所有数据: flushdb
127.0.0.1:6379[3]> flushdb # 清空当前库所有数据
OK 
127.0.0.1:6379[3]> keys *
(empty list or set)
  • 清空所有库数据 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) # 不存在

4.2 为什么redis是 6379!

https://www.zhihu.com/question/20084750open in new window

4.3 Redis 为什么单线程还这么快?

Redis 是单线程的!

1、误区1:高性能的服务器一定是多线程的?

2、误区2:多线程(CPU上下文会切换!)一定比单线程效率高!

先去CPU>内存>硬盘的速度要有所了解!

核心:redis 是将所有的数据全部放在内存中的,所以说使用单线程去操作效率就是最高的,多线程(CPU上下文会切换:耗时的操作!!!),对于内存系统来说,如果没有上下文切换效率就是最高的!多次读写都是在一个CPU上的,在内存情况下,这个就是最佳的方案!