235_Redis_概述_常规操作

举报
alexsully 发表于 2021/11/24 19:48:44 2021/11/24
【摘要】 Redis概述&常用操作

1 Redis:Remote Dictionary Server(远程字典服务器)

是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的(Key/Value)分布式内存数据库,基于内存运行,并支持持久化的NoSQL数据库,是当前最热门的NoSQL数据库之一,也被人们称为数据结构服务器

Redis与其他key-value缓存产品有以下三个特点

  • Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用
  • Redis不仅仅支持简单的 key-value 类型的数据,同时还提供list、set、zset、hash等数据结构的存储
  • Redis支持数据的备份,即master-slave模式的数据备份

Redis-benchmark是官方自带的Redis性能测试工具,可以有效的测试Redis服务的性能

# 测试一: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 次请求

2、企业缓存产品介绍

Memcached:
优点:高性能读写、单一数据类型、支持客户端式分布式集群、一致性hash多核结构、多线程读写性能高。
缺点:无持久化、节点故障可能出现缓存穿透、分布式需要客户端实现、跨机房 数据同步困难、架构扩容复杂度高

Redis: 优点:高性能读写、多数据类型支持、数据持久化、高可用架构、支持自定义虚拟内存、支持分布式分片集群、单线程读写性能极高
缺点:多线程读写较Memcached慢

新浪、京东、直播类平台、网页游戏
memcache 与redis在读写性能的对比
memcached 适合,多用户访问,每个用户少量的rw
redis 适合,少用户访问,每个用户大量rw
Tair:
优点:高性能读写、支持三种存储引擎(ddb、rdb、ldb)、支持高可用、支
持分布式分片集群、支撑了几乎所有淘宝业务的缓存。
缺点:单机情况下,读写性能较其他两种产品较慢


3 Redis使用场景介绍

  • Memcached:多核的缓存服务,更加适合于多用户并发访问次数较少的应用场景
  • Redis:单核的缓存服务,单节点情况下,更加适合于少量用户,多次访问的应用场景
  • Redis一般是单机多实例架构,配合redis集群出现


4  Redis 单线程

Redis为什么这么快?

1误区1:高性能服务器 一定是多线程来实现的, 误区2:多线程 一定比单线程效率高

2)解释

  • redis的数据全都在内存里,单线程的去操作效率最高的
  • 多线程的本质就是CPU模拟出来多个线程的情况,模拟代价会导致上下文的切换,单对于一个内存的系统来说,它没有上下文的切换就是效率最高的
  • redis 用单个CPU绑定一块内存的数据,然后针对这块内存多次读写,都是在一个CPU上完成

例:

一次CPU上下文的切换大概在 1500ns 左右。从内存中读取1MB 的连续数据,耗时大约为 250us,

假设1MB的数据由多个线程读取了1000次,那么就有1000次时间上下文的切换,那么就有1500ns *1000 = 1500us ,

单线程的读完1MB数据才250us ,上下文的切换就用了1500us了,还不算每次读一部分数据的时间


5 Redis部署

yum install centos-release-scl
yum install devtoolset-7-gcc*
scl enable devtoolset-7 bash
$ wget http://download.redis.io/releases/redis?6.0.6.tar.gz
$ tar xzf redis-6.0.6.tar.gz
$ cd redis-6.0.6
$ make

启动:
redis-server &
连接测试:
redis-cli


6 常规操作

6.1 在线查看和修改配置

CONFIG GET *      # 查看所有配置参数
CONFIG GET requirepass
CONFIG GET r*
CONFIG SET requirepass 123   #在线改配置


6.2 数据库切换

默认16个数据库,类似数组下标从零开始,初始默认使用零号库
查看 redis.conf ,里面有默认的配置
databases 16

127.0.0.1:6379> select 7  #切换数据库
OK

127.0.0.1:6379> dbsize    # Dbsize查看当前数据库的key的数量
(integer) 12

Flushdb:清空当前库
Flushall:清空全部的库


6.3 KEY的通用操作

KEYS * keys a keys a* 查看已存在所有键的名字 ****
TYPE 返回键所存储值的类型 ****
EXPIRE\ PEXPIRE 以秒\毫秒设定生存时间  EXPIRE a 100 ; SETEX b bob 200 生成时候指定200S 生存时间
TTL\ PTTL 以秒\毫秒为单位返回生存时间 ***
PERSIST 取消生存时间设置 ***
DEL 删除一个key
EXISTS 检查是否存在   EXISTS a  判断a 是否存在
RENAME 变更KEY名
unlink key   根据value选择非阻塞删除
---例子:
127.0.0.1:6379> set name alex
127.0.0.1:6379> EXPIRE name 60
(integer) 1
127.0.0.1:6379> ttl name
(integer) 57
127.0.0.1:6379> set a bob ex 60  
OK
127.0.0.1:6379> ttl bob
(integer) 43  # 剩余多少时间过期

127.0.0.1:6379> PERSIST bob
(integer) 1

127.0.0.1:6379> set name alex 
127.0.0.1:6379> set name2 sully
127.0.0.1:6379> keys n*
1) "name2"
2) "name"
127.0.0.1:6379> type name
string
127.0.0.1:6379> EXISTS name 
(integer) 1    # 代表 true 
127.0.0.1:6379> exists name3
(integer) 0    #代表false

127.0.0.1:6379> TTL name2
(integer) -1  # 永不过期





【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。