Redis入门

目录

概述

Windows安装

Linux安装

基础知识说明

Redis为什么这么快?


概述

Redis 是什么
Redis RE mote DI ctionary S erver (远程字典服务器)
是完全开源免费的,用 C 语言编写的,遵守 BSD 协议,是一个高性能的( Key/Value )分布式内存数据库,基于内存运行,并支持持久化的 NoSQL 数据库,是当前最热门的 NoSQL 数据库之一,也被人们称为 数据结构服务器
Redis与其他key-value缓存产品有以下三个特点
  • Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
  • Redis不仅仅支持简单的 key-value 类型的数据,同时还提供listsetzsethash等数据结构的存储。
  • Redis支持数据的备份,即master-slave模式的数据备份。
Redis 能干嘛
内存存储和持久化: redis 支持异步将内存中的数据写到硬盘上,同时不影响继续服务
取最新 N 个数据的操作,如:可以将最新的 10 条评论的 ID 放在 Redis List 集合里面
发布、订阅消息系统
地图信息分析
定时器、计数器
......
特性
数据类型、基本操作和配置
持久化和复制, RDB AOF
事务的控制
.....
常用网站
https://redis.io/ 官网
http://www.redis.cn 中文网

Windows安装

下载地址: https://github.com/dmajkic/redis/downloads ( 素材提供 )
解压到自己电脑的环境目录即可

 双击 redis-server.exe 启动即可

 

通过客户端去访问   redis - cli  
  1. # 基本的set设值
  2. 127.0.0.1:6379> set key zhoujielun
  3. OK
  4. # 取出存储的值
  5. 127.0.0.1:6379> get key
  6. "zhoujielun"
redis - cli
重要提示
由于企业里面做 Redis 开发, 99% 都是 Linux 版的运用和安装,几乎不会涉及到 Windows 版,上一步的讲解只是为了知识的完整性, Windows版不作为重点,大家可以自己玩,企业实战就认一个版:Linux
http://www.redis.cn/topics/introduction

Linux安装

下载地址 http://download.redis.io/releases/redis-5.0.7.tar.gz

安装步骤
1 、下载获得 redis - 5.0.7.tar.gz 后将它放到我们 Linux 的目录下 /opt
2 /opt 目录下,解压命令 : tar - zxvf redis - 5.0.7.tar.gz
3 、解压完成后出现文件夹: redis-5.0.7
4 、进入目录: cd redis-5.0.7
5 、在 redis-5.0.7 目录下执行 make 命令
运行 make 命令时故意出现的错误解析:
1. 安装 gcc (gcc linux 下的一个编译程序,是 c 程序的编译工具 )
能上网 : yum install gcc-c++
版本测试 : gcc-v
2. 二次 make
3. Jemalloc/jemalloc.h: 没有那个文件或目录
运行 make distclean 之后再 make
4. Redis Test (可以不用执行)
6 、如果 make 完成后继续执行 make install
7 、查看默认安装目录: usr/local/bin
/usr 这是一个非常重要的目录,类似于 windows 下的 Program Files, 存放用户的程序
8 、拷贝配置文件(备用)
cd /usr/local/bin
ls -l
# redis 的解压目录下备份 redis.conf
mkdir myredis
cp redis.conf myredis # 拷一个备份,养成良好的习惯,我们就修改这个文件
# 修改配置保证可以后台应用
vim redis.conf

 

  • Aredis.conf配置文件中daemonize守护线程,默认是NO
  • Bdaemonize是用来指定redis是否要用守护线程的方式启动。
daemonize 设置 yes 或者 no 区别
  • daemonize:yes
    • redis采用的是单进程多线程的模式。当redis.conf中选项daemonize设置成yes时,代表开启 守护进程模式。在该模式下,redis会在后台运行,并将进程pid号写入至redis.conf选项 pidfifile设置的文件中,此时redis将一直运行,除非手动kill该进程。
  • daemonize:no
    • daemonize选项设置成no时,当前界面将进入redis的命令行界面,exit强制退出或者关闭 连接工具(putty,xshell)都会导致redis进程退出。
9 、启动测试一下!

 

# shell 】启动 redis 服务
[root@192 bin] # cd /usr/local/bin
[root@192 bin] # redis-server /opt/redis-5.0.7/redis.conf
# redis 客户端连接 ===> 观察地址的变化,如果连接 ok, 是直接连上的, redis 默认端口号 6379
[root@192 bin] # redis-cli -p 6379
127 .0.0.1:6379> ping
PONG
127 .0.0.1:6379> set k1 helloworld
OK
127 .0.0.1:6379> get k1
"helloworld"
# shell ps 显示系统当前进程信息
[root@192 myredis] # ps -ef|grep redis
root 16005 1 0 04 :45 ? 00 :00:00 redis-server
127 .0.0.1:6379
root 16031 15692 0 04 :47 pts/0 00 :00:00 redis-cli -p 6379
root 16107 16076 0 04 :51 pts/2 00 :00:00 grep --color = auto redis
# redis 】关闭连接
127 .0.0.1:6379> shutdown
not connected> exit
# shell ps 显示系统当前进程信息
[root@192 myredis] # ps -ef|grep redis
root 16140 16076 0 04 :53 pts/2 00 :00:00 grep --color = auto redis

基础知识说明

准备工作:开启 redis 服务,客户端连接
redis 压力测试工具 -----Redis-benchmark
Redis-benchmark 是官方自带的 Redis 性能测试工具,可以有效的测试 Redis 服务的性能。
 
redis 性能测试工具可选参数如下所示:
序号选项描述默认值
1
-h
指定服务器主机名
127.0.0.1
2
-p
指定服务器端口
6379
3
-s
指定服务器 socket
4
-c
指定并发连接数
50
5
-n
指定请求数
10000
6
-d
以字节的形式指定 SET/GET 值的数据大小
2
7
-k
1=keep alive 0=reconnect
1
8
-r
SET/GET/INCR 使用随机 key, SADD 使用随机值
9
-P
通过管道传输 请求
1
10
-q
强制退出 redis 。仅显示 query/sec
11
--csv
CSV 格式输出
12
-l
生成循环,永久执行测试
13
-t
仅运行以逗号分隔的测试命令列表。
14
-I
Idle 模式。仅打开 N idle 连接并等待。
# 测试一: 100 个并发连接, 100000 个请求,检测 host localhost 端口为 6379 redis 服务器性
redis-benchmark -h localhost -p 6379 -c 100 -n 100000
# 测试出来的所有命令只举例一个!
====== SET ======
100000 requests completed in 1 .88 seconds # 对集合写入测试
100 parallel clients # 每次请求有 100 个并发客户端
3 bytes payload # 每次写入 3 个字节的数据,有效载荷
keep alive: 1 # 保持一个连接,一台服务器来处理这些请求
17 .05% < = 1 milliseconds
97 .35% < = 2 milliseconds
99 .97% < = 3 milliseconds
100 .00% < = 3 milliseconds # 所有请求在 3 毫秒内完成
53248 .14 requests per second # 每秒处理 53248.14 次请求

 

基本数据库常识
默认 16 个数据库,类似数组下标从零开始,初始默认使用零号库
查看 redis.conf ,里面有默认的配置
databases 16
# Set the number of databases. The default database is DB 0, you can select
# a different one on a per-connection basis using SELECT <dbid> where
# dbid is a number between 0 and 'databases'-1
databases 16

 

Select 命令切换数据库
127 .0.0.1:6379> select 7
OK
127 .0.0.1:6379[7]>
# 不同的库可以存不同的数据
Dbsize 查看当前数据库的 key 的数量
127 .0.0.1:6379> select 7
OK
127 .0.0.1:6379[7]> DBSIZE
(integer) 0
127 .0.0.1:6379[7]> select 0
OK
127 .0.0.1:6379> DBSIZE
(integer) 5
127 .0.0.1:6379> keys * # 查看具体的 key
1 ) "counter:__rand_int__"
2 ) "mylist"
3 ) "k1"
4 ) "myset:__rand_int__"
5 ) "key:__rand_int__"
Flushdb :清空当前库
Flushall :清空全部的库
127 .0.0.1:6379> DBSIZE
(integer) 5
127 .0.0.1:6379> FLUSHDB
OK
127 .0.0.1:6379> DBSIZE
(integer) 0
为什么默认端口是 6379 ?粉丝效应!
为什么 redis 是单线程
我们首先要明白, Redis 很快!官方表示,因为 Redis 是基于内存的操作, CPU 不是 Redis 的瓶颈, Redis的瓶颈最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且 CPU 不会成为瓶颈,那就 顺理成章地采用单线程的方案了!

 

Redis 采用的是基于内存的采用的是单进程单线程模型的 KV 数据库,由 C 语言编写,官方提供的数据是 可以达到 100000+ QPS (每秒内查询次数)。这个数据不比采用单进程多线程的同样基于内存的 KV 数据库 Memcached 差!

Redis为什么这么快?

1 )以前一直有个误区,以为:高性能服务器 一定是多线程来实现的
原因很简单因为误区二导致的:多线程 一定比 单线程 效率高,其实不然!
在说这个事前希望大家都能对 CPU 、 内存 、 硬盘的速度都有了解了!
2 redis 核心就是 如果我的数据全都在内存里,我单线程的去操作 就是效率最高的,为什么呢,因为多线程的本质就是 CPU 模拟出来多个线程的情况,这种模拟出来的情况就有一个代价,就是上下文的切 换,对于一个内存的系统来说,它没有上下文的切换就是效率最高的。 redis 用 单个 CPU 绑定一块内存 的数据,然后针对这块内存的数据进行多次读写的时候,都是在一个 CPU 上完成的,所以它是单线程处 理这个事。在内存的情况下,这个方案就是最佳方案。
因为一次 CPU 上下文的切换大概在 1500ns 左右。从内存中读取 1MB 的连续数据,耗时大约为 250us 假设 1MB 的数据由多个线程读取了 1000 次,那么就有 1000 次时间上下文的切换,那么就有 1500ns * 1000 = 1500us ,我单线程的读完 1MB 数据才 250us , 你光时间上下文的切换就用了 1500us 了,我还不 算你每次读一点数据的时间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值