【Redis 系列】redis 学习二

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 【Redis 系列】redis 学习二

【Redis 系列】redis 学习二

Redis 是什么?

Redis(Remote Dictionary Service),远程字典服务

是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API

Redis 是免费且开源的,是当下最热门的 Nosql 技术之一,他也被成为结构化数据库

Redis 支持的语言有这么多

Redis 会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并在此基础上实现 master - slave (主从同步)

Redis 能干嘛?

Redis 能干的事情非常的多,咱们列举一些:

  • 内存存储,持久化。 数据存储在内存中,若服务崩溃或者服务器宕机,内存中的数据就会丢失, 持久化相当重要,Redis 里面的持久化有 RDB,AOF
  • 可以用于高速缓存,Redis 效率很高
  • 做发布订阅系统
  • 做地图信息分析
  • 做计数器,计时器 等等

Redis 有啥特性

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

学习 Redis 需要用到的资料

如何安装 Redis

window 下安装 Redis

1、官网上下载 windows Redis 的安装包:https://github.com/tporadowski/redis/releases

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 keyget 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 通过管道传输 请求 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 的上下文切换,对于内存而言,没有上下文切换系统效率是最高的

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是小魔童哪吒,欢迎点赞关注收藏,下次见~

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
6月前
|
存储 NoSQL Redis
Redis系列学习文章分享---第十六篇(Redis原理1篇--Redis数据结构-动态字符串,insert,Dict,ZipList,QuickList,SkipList,RedisObject)
Redis系列学习文章分享---第十六篇(Redis原理1篇--Redis数据结构-动态字符串,insert,Dict,ZipList,QuickList,SkipList,RedisObject)
85 1
|
2月前
|
NoSQL 数据可视化 Linux
redis学习四、可视化操作工具链接 centos redis,付费Redis Desktop Manager和免费Another Redis DeskTop Manager下载、安装
本文介绍了Redis的两个可视化管理工具:付费的Redis Desktop Manager和免费的Another Redis DeskTop Manager,包括它们的下载、安装和使用方法,以及在使用Another Redis DeskTop Manager连接Redis时可能遇到的问题和解决方案。
133 1
redis学习四、可视化操作工具链接 centos redis,付费Redis Desktop Manager和免费Another Redis DeskTop Manager下载、安装
|
2月前
|
NoSQL Linux Redis
Docker学习二(Centos):Docker安装并运行redis(成功运行)
这篇文章介绍了在CentOS系统上使用Docker安装并运行Redis数据库的详细步骤,包括拉取Redis镜像、创建挂载目录、下载配置文件、修改配置以及使用Docker命令运行Redis容器,并检查运行状态和使用Navicat连接Redis。
274 3
|
2月前
|
NoSQL Java Redis
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
这篇文章介绍了如何使用Spring Boot整合Apache Shiro框架进行后端开发,包括认证和授权流程,并使用Redis存储Token以及MD5加密用户密码。
31 0
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
|
6月前
|
NoSQL Java Redis
Redis系列学习文章分享---第十八篇(Redis原理篇--网络模型,通讯协议,内存回收)
Redis系列学习文章分享---第十八篇(Redis原理篇--网络模型,通讯协议,内存回收)
86 0
|
6月前
|
存储 消息中间件 缓存
Redis系列学习文章分享---第十七篇(Redis原理篇--数据结构,网络模型)
Redis系列学习文章分享---第十七篇(Redis原理篇--数据结构,网络模型)
97 0
|
6月前
|
存储 NoSQL 算法
Redis系列学习文章分享---第十篇(Redis快速入门之附近商铺+用户签到+UV统计)
Redis系列学习文章分享---第十篇(Redis快速入门之附近商铺+用户签到+UV统计)
44 0
|
6月前
|
存储 NoSQL Redis
Redis系列学习文章分享---第九篇(Redis快速入门之好友关注--关注和取关 -共同关注 -Feed流实现方案分析 -推送到粉丝收件箱 -滚动分页查询)
Redis系列学习文章分享---第九篇(Redis快速入门之好友关注--关注和取关 -共同关注 -Feed流实现方案分析 -推送到粉丝收件箱 -滚动分页查询)
70 0
|
6月前
|
消息中间件 负载均衡 NoSQL
Redis系列学习文章分享---第七篇(Redis快速入门之消息队列--List实现消息队列 Pubsub实现消息队列 stream的单消费模式 stream的消费者组模式 基于stream消息队列)
Redis系列学习文章分享---第七篇(Redis快速入门之消息队列--List实现消息队列 Pubsub实现消息队列 stream的单消费模式 stream的消费者组模式 基于stream消息队列)
74 0
|
6月前
|
消息中间件 NoSQL Java
Redis系列学习文章分享---第六篇(Redis实战篇--Redis分布式锁+实现思路+误删问题+原子性+lua脚本+Redisson功能介绍+可重入锁+WatchDog机制+multiLock)
Redis系列学习文章分享---第六篇(Redis实战篇--Redis分布式锁+实现思路+误删问题+原子性+lua脚本+Redisson功能介绍+可重入锁+WatchDog机制+multiLock)
230 0