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 了,我还不 算你每次读一点数据的时间。
<think>好的,我现在需要帮助用户学习Redis的基础知识,包括入门教程、基础概念以及学习资料。首先,我应该整理用户提供的引用内容,看看里面有哪些有用的信息。 根据引用[1],Redis是2009年诞生的,全称是Remote Dictionary Server,基于内存的键值型NoSQL数据库。这一点很重要,是Redis的基本定义。接下来,引用[2]提到Jedis、Lettuce和Redisson这三个Java客户端,以及SpringDataRedis对他们的封装,还有Redisson的分布式数据结构。这可能对用户学习客户端工具有帮助。 引用[3]说明了Redis执行命令需要网络请求和响应延迟,这可能影响性能。引用[4]给出了启动Redis服务器的方法,特别是解决闪退的问题。引用[5]提到了持久化的配置,关闭RDB和AOF可以变成纯内存数据库,类似Memcached,还有事务处理。 用户需要入门教程、基础概念和学习资料。首先,我应该从基础概念开始,比如数据结构、持久化、事务、应用场景等。然后推荐学习路径,可能包括官方文档、书籍、视频教程等。还要注意引用中的内容,比如推荐的Java客户端,启动服务器的步骤,持久化的配置等。 需要确保回答结构清晰,分步骤介绍,并且引用相关的内容。例如,在讲基础概念时,提到键值存储和数据结构时引用[1],在讲Java客户端时引用[2],持久化部分引用[5]。同时,生成相关问题,帮助用户深入学习。 可能还需要检查是否有遗漏的重要概念,比如主从复制、哨兵、集群等,但根据引用内容,用户提供的资料里没有提到这些,所以可能需要简要提及,但重点放在引用提到的内容上。 最后,确保使用正确的中文表达,避免技术术语错误,并按照用户的格式要求,使用$...$和$$...$$来标记数学表达式,不过在这个问题中可能用不到数学公式,但需要遵守系统指令的其他要求,如引用标识的添加。</think>### Redis 基础知识入门指南 #### 一、基础概念 1. **核心定义** Redis(Remote Dictionary Server)是**基于内存的键值型NoSQL数据库**,支持字符串、哈希、列表等多种数据结构[^1]。其核心优势在于**高性能读写**(微秒级响应)和**分布式特性**。 2. **数据结构** 支持5种基础类型: - 字符串(String) - 哈希(Hash) - 列表(List) - 集合(Set) - 有序集合(ZSet) 额外支持流(Stream)、地理空间(GEO)等扩展类型。 3. **持久化机制** - **RDB**:定时生成内存快照 - **AOF**:记录所有写操作命令 可关闭持久化变为纯内存数据库(类似Memcached)[^5]。 4. **事务特性** 通过`MULTI`/`EXEC`命令实现简单事务,但**不保证原子性**(单条命令失败不影响后续执行)。 --- #### 二、学习路径与资源 1. **官方文档** [Redis官方文档](https://redis.io/docs/):权威指南,涵盖安装、配置、命令详解。 2. **快速入门教程** - **视频教程**:B站《20分钟搞定Redis基础》覆盖基础操作与客户端使用[^2] - **实践指南**: ```bash # 启动Redis服务器(Windows示例) redis-server.exe redis.windows.conf ``` 若遇到闪退问题可参考此方法[^4]。 3. **客户端工具** - **Java推荐**: - `Jedis`/`Lettuce`:直接操作Redis命令 - `SpringDataRedis`:对上述客户端的封装 - `Redisson`:实现分布式锁、队列等高级功能[^2] 4. **书籍推荐** - 《Redis设计与实现》:深入源码与设计原理 - 《Redis实战》:结合实际案例讲解应用 --- #### 三、应用场景 1. **缓存加速**:缓解数据库压力(如热点数据缓存) 2. **会话存储**:分布式系统共享Session 3. **排行榜**:通过ZSet实现实时排序 4. **消息队列**:使用List或Stream实现 --- #### 四、性能优化要点 1. **网络延迟**:批量操作(如`pipeline`)减少请求次数[^3] 2. **内存管理**:设置过期时间,避免内存溢出 3. **持久化选择**:根据业务需求平衡RDB与AOF ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值