Redis — 入门

初始Redis

  • REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统,是跨平台的非关系型数据库。

  • Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。

  • Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。

image.png

推荐一篇介绍redis的博客:通俗易懂的redis介绍

Redis安装(Linux系统下)

安装

  1. 官网下载Redis安装包

image.png

  1. 移动安装包到opt目录
sudo mv redis-6.2.2.tar.gz /opt
复制代码
  1. 解压Redis安装包
sudo tar -zxvf redis-6.2.2.tar.gz
复制代码
  1. 进入解压后的Redis文件,查看Redis的配置文件
cd redis-6.2.2
ls
复制代码

image.png

  1. 安装基本环境命令(安装gcc),并检查是否安装成功
yum install gcc-c++
gcc -v
复制代码
  1. 预编译和编译安装
make           #预编译
make install   #编译安装
复制代码

image.png

  1. 又因为Redis的默认安装目录在/usr/local/bin,进入这个目录,创建一个文件夹myconfig
sudo mkdir myconfig
复制代码

image.png

image.png

  1. 复制Redis的配置文件到myconfig
sudo cp /opt/redis-6.2.2 /redis.conf myconfig
复制代码

image.png

  1. 修改redis.conf配置,让Redis能在后台启动(Redis默认在后台不启动)
vim redis.conf
复制代码

image.png

使用测试

  1. 通过指定的配置文件启动服务
redis-server myconfig/redis.conf
复制代码

image.png

  1. 客户端访问
redis-cli -p 6379
复制代码

image.png

  1. 通过ping测试连接

image.png

  1. 通过set 属性名 属性值存值
  2. 通过get 属性名取值

image.png

  1. 检查Redis进程是否开启
ps -ef|grep redis
复制代码

image.png

  1. 关闭Redis服务
shutdown
exit
ps -ef|grep redis   #再次查看,确认关闭
复制代码

image.png

安装出现了bug

image.png

–>bug解决:借鉴这篇博客即可

性能测试 redis-benchmark

  1. 该命令是在 redis 的目录下执行的,而不是 redis 客户端的内部指令
  2. 性能测试工具参数

图片.png

  1. 实例测试
  • 测试内容:100个并发处理10万个请求
  • 开启服务后,在终端输入redis-benchmark -c 100 -n 100000

图片.png

基础知识

  1. redis默认装有16个数据库,默认使用0号数据库

图片.png

  1. 往数据库设值,取值

图片.png

  1. 查询数据库所有的值keys *

图片.png

  1. 转换数据库 select 想转换到的数据库

图片.png

  1. 删除数据库中的值
  • flushdb清空当前数据库

图片.png

  • flushall清空所有数据库

图片.png

课外补充

redis是单线程的:

使用Redis时,几乎不存在CPU成为瓶颈的情况, Redis主要受限于内存和网络。例如在一个普通的Linux系统上,Redis通过使用pipelining每秒可以处理100万个请求,所以如果应用程序主要使用O(N)或O(log(N))的命令,它几乎不会占用太多CPU。

  • 其实redis是基于内存操作,redis是将所有的数据全部放在内存中的。
  • 使用了单线程后,可维护性高。
  • 多线程模型虽然在某些方面表现优异,但是它却引入了程序执行顺序的不确定性,带来了并发读写的一系列问题,增加了系统复杂度、同时可能存在线程切换、甚至加锁解锁、死锁造成的性能损耗。
  • Redis通过AE事件模型以及IO多路复用等技术,处理性能非常高,因此没有必要使用多线程。单线程机制使得 Redis 内部实现的复杂度大大降低,Hash 的惰性 Rehash、Lpush 等等 “线程不安全” 的命令都可以无锁进行。

redis6.0之后引入了多线程

原因:

  1. Redis将所有数据放在内存中,内存的响应时长大约为100纳秒,对于小数据包,Redis服务器可以处理80,000到100,000 QPS,这也是Redis处理的极限了,对于80%的公司来说,单线程的Redis已经足够使用了。

  2. 20%的公司,有着越来越复杂的业务场景,可能需要上亿的交易量,因此需要更大的QPS。

  3. 使用多线程可以充分利用服务器 CPU 资源,目前主线程只能利用一个核

  4. 多线程任务可以分摊 Redis 同步 IO 读写负荷

虽然redis引入了多线程,但是默认是关闭的。

图片.png

这里也提供一篇介绍多线程默认初始化参数的博客。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享