Redis 是什么?
Redis(Remote Dictionary Service),近程字典服务
是一个开源的应用 ANSI C 语言编写、反对网络、可基于内存亦可长久化的日志型、Key-Value 数据库,并提供多种语言的 API
Redis 是收费且开源的,是当下最热门的 Nosql 技术之一,他也被成为结构化数据库
Redis 反对的语言有这么多
Redis 会周期性的把更新的数据写入磁盘或者把批改操作写入追加的记录文件,并在此基础上实现 master – slave(主从同步)
Redis 能干嘛?
Redis 无能的事件十分的多,咱们列举一些:
- 内存存储,长久化。数据存储在内存中,若服务解体或者服务器宕机,内存中的数据就会失落,长久化相当重要,Redis 外面的长久化有 RDB,AOF
- 能够用于高速缓存,Redis 效率很高
- 做公布订阅零碎
- 做地图信息剖析
- 做计数器,计时器 等等
Redis 有啥个性
- 多样的数据类型
- 长久化
- 集群
- 事务处理
学习 Redis 须要用到的材料
- 官网:https://redis.io/
- 中文网站:http://www.redis.cn/
- 下载地址:
如何装置 Redis
window 下装置 Redis
1、官网上下载 windows Redis 的安装包:https://github.com/tporadowsk…
Redis-x64-5.0.10.zip
2、解压安装包
解压 zip 安装包 Redis-x64-5.0.10.zip,这个压缩包当初有 14 M 了
- redis-server
redis 服务端
- redis-client
redis 客户端
- redis-check-aof 和 redis-check-rdb
redis 的长久化工具
- redis-benchmark
redis 的检测工具
3、关上 redis-server 进入服务端,能够看到如下界面
4、关上客户端 redis-cli,能够尝试输出 ping
命令,失去后果为 PONG
阐明连贯胜利
尝试 set key
和 get key
,没有问题
这里只是简略介绍一下 windows 下 redis 的装置和应用,其实绝大部分的工夫咱们还是在 linux 下进行操作的,Redis 官网也是强烈建议咱们在 Linux 下进行应用
linux 下装置 Redis
1、官网下载安装包:https://redis.io/
redis-6.2.5.tar.gz,并放到本人的 linux 环境下
2、解压,tar xvf redis-6.2.5.tar.gz
也能够解压到指定的目录下,例如 tar xvf redis-6.2.5.tar.gz -C /usr/local/redis
3、进入 redis-6.2.5,进行源码编译 执行make && make install
4、设置后盾启动
批改目录下的 redis.conf
5、启动 redis-server,并启动 redis-cli 连贯服务端
root@iZuf66y3tuzn4wp3h02t7pZ:/# redis-server /usr/local/redis/redis-6.2.5/redis.conf
root@iZuf66y3tuzn4wp3h02t7pZ:/# redis-cli -p 6379
127.0.0.1:6379> ping
PONG
127.0.0.1:6379>hmset config name xiaomotong age 18
127.0.0.1:6379> hgetall config
1) "name"
2) "xiaomotong"
3) "age"
4) "18"
nice,装置 ok,并且设置值也是 ok 的
7、查看 reids-server 过程是否存在
ps aux |grep redis
查看过程是否存在即可
8、敞开 redis 服务
127.0.0.1:6379> shutdown
not connected>
not connected>
root@iZuf66y3tuzn4wp3h02t7pZ:/# ps aux |grep redis
root 15903 0.0 0.0 14436 1012 pts/0 S+ 22:38 0:00 grep --color=auto redis
如何测试 redis 性能
应用 redis-benchmark 测试 redis 性能,有如下参数能够应用
选项 | 形容 | 默认值 |
---|---|---|
-h | 指定服务器主机名 | 127.0.0.1 |
-p | 指定服务器端口 | 6379 |
-s | 指定服务器 socket | |
-c | 指定并发连接数 | 50 |
-n | 指定申请数 | 10000 |
-d | 以字节的模式指定 SET/GET 值的数据大小 | 3 |
-k | 1=keep alive 0=reconnect | 1 |
-r | SET/GET/INCR 应用随机 key, SADD 应用随机值 | |
-P | 通过管道传输 <numreq> 申请 | 1 |
-q | 强制退出 redis。仅显示 query/sec 值 | |
–csv | 以 CSV 格局输入 | |
*-l*(L 的小写字母) | 生成循环,永恒执行测试 | |
-t | 仅运行以逗号分隔的测试命令列表。 | |
*-I*(i 的大写字母) | Idle 模式。仅关上 N 个 idle 连贯并期待。 |
开始测试
# redis-benchmark -h localhost -p 6379 -c 1000 -n 1000000
能够看到如下打印信息
26.27 秒 实现了 一百万次的申请
1000 个客户端并发
以字节的模式指定设置 3 个字节的数据大小
通过上图咱们能够看出,本次 redis 测试的性能,每秒可能解决 38066.23 个申请,对于单机的 redis 曾经是相当厉害了
redis 基础知识
redis 默认是有 16 个数据库的,咱们能够查看 redis.conf 文件中有定义
# vim /usr/local/redis/redis-6.2.5/redis.conf
redis 默认是应用第 0 个数据库,咱们能够应用 select
指令来切换数据库
select
能够通过 select
指令来切换数据库
127.0.0.1:6379> select 3
OK
127.0.0.1:6379[3]> DBSIZE
(integer) 0
127.0.0.1:6379[3]> select 0
OK
127.0.0.1:6379> dbsize
(integer) 5
能够看到 0 号数据库是有数据的,3 号数据库还没有数据
keys
能够通过 keys *
指令来获取以后数据库所有 key , 个别很少用这个命令,因为数据量很大的时候,应用这个命令会很慢
127.0.0.1:6379> keys *
1) "config"
2) "key:__rand_int__"
3) "counter:__rand_int__"
4) "myhash"
5) "name"
flushdb
清空以后数据库的 key 和 value
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> keys *
(empty array)
flushall
清空所有数据库的 key 和 value
127.0.0.1:6379> select 2
OK
127.0.0.1:6379[2]> dbsize
(integer) 0
127.0.0.1:6379[2]> set name xiaomotong
OK
127.0.0.1:6379[2]> select 0
OK
127.0.0.1:6379> flushall
OK
127.0.0.1:6379> select 2
OK
127.0.0.1:6379[2]> dbsize
(integer) 0
那么为什么 redis 的默认端口号是 6379 呢?
因为 redis 的作者是一个女明星 MERZ 的粉丝,MERZ 对应到 9 宫格手机键盘上就是 6379
redis 是单线程的
redis 是单线程的,然而不影响他很快,官网示意,redis 是基于内存操作的,CPU 不是 redis 的瓶颈,机器内存和网络带宽才是 redis 的瓶颈。
redis 是 C 语言写的,redis 官网提供的数据为 十万 + QPS
redis 单线程为什么这么快?
1、高性能的服务器肯定是多线程的吗?这是一个误区,单线程一样能够十分快
2、多线程的效率肯定比单线程的效率高吗?这也是一个误区,多线程会有 CPU 上下文切换,十分耗时
效率比拟:CPU > 内存 > 硬盘
redis 外围:
redis 是将所有的数据都放到内存中,所以单线程去操作数据就会十分快,效率就很高,而多线程会呈现 CPU 的上下文切换,对于内存而言,没有上下文切换零碎效率是最高的
欢送点赞,关注,珍藏
敌人们,你的反对和激励,是我保持分享,提高质量的能源
好了,本次就到这里
技术是凋谢的,咱们的心态,更应是凋谢的。拥抱变动,背阴而生,致力向前行。
我是 小魔童哪吒,欢送点赞关注珍藏,下次见~