Redis学习之旅--初始redis

  • 概述
  • Redis是什么?
  • Redis能干嘛?
  • Redis的特点
  • 拓展
  • 下载
  • Windows下载
  • Linux安装
  • redis-benchmark(测性能的)
  • Redis内存淘汰策略
  • Redis基础知识
  • 相关概念
  • Redis是单线程的!



**本小白是根据B站狂神的视频学习的,如有问题可以留言评论,或者去B站看视频理解!!!**最后在此感谢狂神大大!

概述

Redis是什么?

Redis(Remote Dictionary Server)远程字典服务!是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、key-value数据库,并提供多种语言的API。是免费和开源的!是当下最热门的NoSQL技术之一!也被人们称之为结构化数据库!Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并在此基础上实现master-slave(主从)同步。

Redis能干嘛?

  • 内存存储、持久化(内存中是断电即失、所以持久化很重要(人rdb、aof))
  • 效率高、可用于告诉缓存
  • 发布订阅系统(消息队列)
  • 地图信息分析
  • 计时器、计数器(浏览量)

Redis的特点

  • 多样的数据类型
  • 持久化
  • 集群
  • 事务

拓展

  • Redis官网:https://redis.io/
  • Redis中文官网:http://www.redis.cn/

注意:Wdinow在Github上下载(停更很久了!)
Redis推荐都是在Linux服务器上搭建的,基于Linux学习!

下载

Windows下载

1.网盘下载链接https://pan.baidu.com/s/1VHiNbmrupYU2yN9D_nybYQ

2.解压到自己的电脑环境上!Redis非常小,只有5M

ycsb 测试redis_Redis


3.开启Redis,双击运行服务即可

ycsb 测试redis_缓存_02


4,打开客户端进行链接测试

ycsb 测试redis_nosql_03

Linux安装

  • 下载安装包!网盘链接https://pan.baidu.com/s/1B7VQauxUXbuspqXpQTMcXQ
  • 解压Redis的安装包!程序的/opt目录下

ycsb 测试redis_redis_04

  • 进入解压后的文件,可以看到我们Redis的配置文件
  • 基本环境安装
yum install gcc-c++
make
make install
  • 默认安装路径 /usr/local/bin

ycsb 测试redis_Redis_05

  • 拷贝默认配置文件

ycsb 测试redis_redis_06

  • Redis默认不是后台启动的,需要修改配置文件

ycsb 测试redis_Redis_07

  • 启动Redis服务

ycsb 测试redis_ycsb 测试redis_08

  • 使用redis-cli测试连接

ycsb 测试redis_Redis_09

  • 查看Redis进程是否开启ps -ef|grep redis
  • 关闭Redis服务
  • 查看进程是否存在

redis-benchmark(测性能的)

测试:100个并发连接,100000个请求
redis-benchmark -h localhost -p 6379 -c 100 -n 100000

ycsb 测试redis_Redis_10


查看分析

ycsb 测试redis_Redis_11


ycsb 测试redis_ycsb 测试redis_12

Redis内存淘汰策略

Redis是不断的删除一些过期的数据,但是肯定也有许多没有设置过期时间的数据也会越来越多,那么Redis内存不够用的时候是怎么处理的呢?答案就是淘汰策略(当Redis内存超过最大允许的内存之后,Redis就会触发内存淘汰策略,删除一些不常用的数据,以保证Redis服务器的正常运行)

  • 1、noeviction:添加数据时,如果redis判断该操作会导致占用内存大小超过内存限制,就返回error,然后啥也不干
  • 2、allkeys-lru:添加数据时,如果redis判断该操作会导致占用内存大小超过内存限制,就会扫描所有的key,淘汰一些最近未使用的key
  • 3、volatile-lru:添加数据时,如果redis判断该操作会导致占用内存大小超过内存限制,扫描那些设置里过期时间的key,淘汰一些最近未使用的key
  • 4、allkeys-random:添加数据时,如果redis判断该操作会导致占用内存大小超过内存限制,就会扫描所有的key,随机淘汰一些key
  • 5、volatile-random:添加数据时,如果redis判断该操作会导致占用内存大小超过内存限制,扫描那些设置里过期时间的key,随机淘汰一些key
  • 6、volatile-ttl:添加数据时,如果redis判断该操作会导致占用内存大小超过内存限制,扫描那些设置里过期时间的key,淘汰一些即将过期的key
  • 7、volatile-lfu:添加数据时,如果redis判断该操作会导致占用内存大小超过内存限制,就会淘汰一些设置了过期时间的,并且最近最少使用的key
  • 8、allkeys-lfu:添加数据时,如果redis判断该操作会导致占用内存大小超过内存限制,就会扫描所有的key,淘汰一些最近最少使用的key

Redis基础知识

相关概念

Redis有16个数据库,默认使用的的是第0个,可以用select命令进行切换

ycsb 测试redis_ycsb 测试redis_13


不同的数据库存储不同的值,之间互不干涉

ycsb 测试redis_Redis_14

  • keys * 查看所有的关键字
  • flushdb清除当前数据库
  • flushall 清除全部数据库内容

ycsb 测试redis_nosql_15

Redis是单线程的!

我们需要明白Redis是很快的,官方表示,Redis是基于内存操作,CPU不是Redis的性能瓶颈,Redis的瓶颈是根据机器的内存和网络带宽有关,既然可以使用单线程,就用单线程来实现了!
Redis是用c语言写的,官方提供的数据为1000000+的QPS,完全不比同样使用key-value的Memecache差!

Redis为什么单线程还那么快?

误区1:高性能服务器一定是多线程吗?
误区2:多线程(CPU会进行上下文切换)一定比单线程效率高?

核心:效率:CPU > 内存 > 硬盘 Redis是将所有的数据全部放在内存中,所有说使用单线程去操作效率就是最高的(多线程CPU上下文会切换,会消耗时间)对内存系统来说,如果没有上下文切换效率就是最高的!