介绍Redis的各种用途以及使用场景

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: 介绍Redis的各种用途以及使用场景 Redis 一、为什么使用 解决应用服务器的cpu和内存压力 减少io的读操作,减轻io的压力 关系型数据库的扩展性不强,难以改变表结构 二、优点: nosql数据库没有关联关系,数据结构简单,拓展表比较容易 nosql读取速度快,对较大数据.

介绍Redis的各种用途以及使用场景

Redis

一、为什么使用

  1. 解决应用服务器的cpu和内存压力

  2. 减少io的读操作,减轻io的压力

  3. 关系型数据库的扩展性不强,难以改变表结构

二、优点:

  1. nosql数据库没有关联关系,数据结构简单,拓展表比较容易

  2. nosql读取速度快,对较大数据处理快

三、适用场景:

  1. 数据高并发的读写

  2. 海量数据的读写

  3. 对扩展性要求高的数据

四、不适场景:

  1. 需要事务支持(非关系型数据库)

  2. 基于sql结构化查询储存,关系复杂

五、Redis结构:

Redis是一个开源的key—value型数据库,支持string、list、set、zset和hash类型数据。对这些数据的操作都是原子性的,redus为了保证效率会定期持久化数据。

六、使用场景:

  1. 配合关系型数据库做高速缓存

  • 缓存高频次访问的数据,降低数据库io

  • 分布式架构,做session共享

  1. 可以持久化特定数据。

  • 利用zset类型可以存储排行榜

  • 利用list的自然时间排序存储最新n个数据

七、Linux下redis:

  1. redis目录:usr/local/bin

  2. linux下redis常用命令:

  1. redis-benchmark:性能测试工具

  2. redis-server:启动redis服务器

  3. redis-cli:启动redis客户端,操作入口

八、Redis基础知识

  1. 端口:6379

  2. 默认16个数据库,下标从0开始

  3. 单线程:redis是单线程+io多路复用:检查文件描述的就绪状态

Memchached:多线程+锁

  1. redis数据类型:String set list hash zset

九、Redis命令:

  1. key操作

keys * 查看当前库所有的键
exists <key> 判断是否存在key
del <key> 删除某个键
expire <key> <second> 设置键过期时间 单位是s秒
ttl <key> 查看还有多少秒过期 -1表示用不过期 -2表示已经过期
move <key> <db> 把键移到另一个库下
dbsize 查看数据库key的数量
flushdb 清空当前库
flushall 通杀所有库
  1. String类型:String是二进制安全的,可以包含任何数据源,最大512m

get <key> 查看对应的键值
set <key> <value> 添加键值对
append <key> <value> 将给定的value 追加到原值的末尾
strlen < key > 获取值得长度
setnx <key> <value> 当key 不存在的时候设置key值
incr <key> 将key中储存的数字加1,如果为空,则值为1
decr <key> 将key中储存的数字减1,如果为空,则值为-1
incrby/decrby <key> <步长> 将key中的数字增减

String批量处理:

mset <key1> <value1> <key2> <value2> 同时设置多个键值对
mget <key1> <key 2> 同时获得多个值
msetnx <key1> <value1> <key2> <value2> 当给定的key都不存在
getrange <key> <start> <stop> 类似sunstring
setrange <key> <start> <stop> 类似sunstring覆盖原始值
setex <key> <过期时间> <value> 设置键值的同时,给定过期时间
getset <key> <value> 以旧换新,设置了新的值同时得到旧值
  1. List:链表

1、特点:

单键多值

Redis列表是简单的字符串列表,从左或者从右插入

底层是双向链表,对两端的操作性能很高,通过下标查询性能很低

lpush/rpush <key> <value1> <value2> .. 从左或从右插入多个值
lpop/rpop <key> 从左边或右边吐出一个值,值光键亡
rpoplpush <key1> <key2> 从key1 右边吐出一个值到key2的左边
lrange <key> <index> 按照索引下标获取元素 从左到右
lindex <key> <index> 按照索引下标获取元素 从左到右
llen <key> 获取列表长度 获取列表长度
linsert <key> before <value> <newvalue> 在key中value前插入newvalue
  1. Set:类似list的无序集合,保证列表中不会有重复数据,底层是一个value为null的hash表

sadd <key> <value1> <value2> 将多个元素加入到key中,重复值忽略
smembers <key> 取出该集合的所有值
sismember <key> <value> 判断集合key中是否有该value值 有就1 没有0
scard <key> 返回该集合的元素个数
srem <key> <value1> <value2> 删除集合中的某个元素
spop <key> 随机吐出该集合一个值
srandmember <key> <n> 随机从集合中取出n个值,不会从集合中删除
smove <key1> <key2> <value> 将key1中的value 移动到key2 中
sinter <key1> <key2> 返回两个集合的交集元素
sunion <key1> <key2> 返回两个集合的并集
  1. hash:键值对集合,类似map<String,Object>

hset <key> <filed> <value> 给key 集合中的file 键赋值value
hget <key1> <field> 从key1 集合file取出value
hmset <key1> <field1> <value1> <field2> <value2> 批量设置hash的值
hexists <key> <field> 查看key中的field 是否存在
hkeys <key> 列出key中所有的filed
hvals <key> 列出该hash集合中所有的value
  1. zset:与set集合非常相似,每个成员都关联了score,可以用来排序

zadd<key><score1><value1><score2><value2> 将一个或多个元素以及score加入zset
zrange<key><start><stop> withscore 返回下标在区间内的集合,带有score
zrangebyscore <ket> <min> <max>[withscore] [limit offset count] 返回key中 score介于min和max中的成员,升序排列
zrevrangerbyscore <key> <min> <max> [withscore] [limit offset count] 降序
zincrby <key> <increment> <value> 在key集合中的value上增加increment
zrem <key> <value> 删除key集合下的指定元素
zcount <key> <min><max> 统计 区间内的元素个数
zcord <key> 获取集合中的元素个数
zrank <key><value> 查询value在key中的排名,从0开始

十、redis持久化:

  1. 两种方式:rdb(redis database)和aof(append of file)

  2. RDB:在指定时间间隔内,将内存中的数据作为一个快照文件(snapshot)写入到磁盘,读取的时候也是直接读取snapshot文件到内存中

①持久化过程:redis单独创建(fork)一个进程来持久化,会先将数据写入临时文件中,待上次持久化结束后,会将该临时文件替换上次持久化文件,比aof高效,但是最后一次数据可能会丢失

②Fork:在linux中,fork()会产生一个跟主进程一样的子进程,出于效率考虑,主进程和子进程会公用一段物理内存,当发生改变的时候,才会把主进程“”写时复制”一份给子进程

③Redis备份的文件:在redis.conf中设置,dbfilename默认为:dump.rdb

④ Rdb保存策略:

    1.  
    2. 900s 1 file change

    3. 300s 10file change

    4. 60s 10000file change

    5.  

⑤Rdb的备份:

    1.  
    2. config get dir 得到备份的文件夹

    3. 复制备份文件

    4.  

⑥Rdb恢复:

    1.  
    2. 关闭redis

    3. 将备份文件复制到工作目录下

    4. 启动redis,自动加载

    5.  
  1. AOF : 以日志形式记录每个写操作,启动时通过日志恢复操作

    1. 开启AOF:默认不开启,进入redis.conf找到appendonly yes打开

    2. 修复AOF:redis-check-aof –fix appendonly.aof

    3. 同步频率:每秒记录一次,如果宕机该秒记可能失效

    4. Rewrite:bgrewriteaof 因为日志是追加方式,文件会越来越大,当超过了设置的阈值时,日志文件会压缩,保留仅可以恢复的日志

    5.  
  2. RDB和AOF对比

    1.  
    2. 节省磁盘空间

    3. 恢复速度快

    4. RDB优点:

    5.  
    1. ROD缺点:

    1.  
    2. 数据太大时,比较消耗性能

    3. 一段时间保存一次快照,宕机时最后一次可能没有保存

    4.  
    5.  

c) AOF优点:

i. 备份机制更加稳健

ii. 可读的日志文件,通过aof恢复更加稳健,可以处理失误

d) AOF缺点:

i. 比RDB更占磁盘

ii. 备份速度较慢

    1. iii每次都同步日志,有性能压力

    2.  
  1. RDB和AOF哪个好

    1. 官方推荐都启用

    2. 对数据不敏感,单独用RDB

    3. 不建议单独使用AOF

    4. 若作为纯缓存使用,可以都不开启

    5.  

十一、Redis事务:输入multi,输入的命令都会依次进入到队列中,但不会执行,直到输入exec,redis会将之前命令队列中的命令依次执行,通过discard可以放弃组队。

  1. 主要作用:序列化操作,串联多个命令防止别的命令插队

  2. 悲观锁:每次拿到数据的时候都会上锁,或者等待别人处理完再去拿锁,传统的关系型数据库里边很多用到了这种锁机制,比如行锁、表锁、读锁、写锁

  3. 乐观锁:每次拿数据的时候总认为别人不会修改数据,所以不会上锁。但是更新的时候回去判断别人有没有更改数据,使用版本号机制。乐观锁适用于多读的应用类型,可以提高吞吐量。

  4. Redis使用乐观锁:redis就是利用check-and-set机制实现事务

  5. 三大特性:

    1. 单独的隔离操作:事务中的所有命令都会序列化,按顺序执行。不会被其他客户端打断

    2. 没有隔离级别概念:队列中的命令没有提交之前不会被执行,事务外不能查看事务内的更新

    3. 不能保证原子性:跳过错误,依旧执行,没有回滚

    4.  

十二、Redis订阅/发布:

是进程中的一种消息通信模式,发送者pub发送消息,订阅者sub接收消息 剩下的略。。。

十三、Redis主从复制:

  1. 是什么:主从复制就是主机数据更新后根据配置和策略,自动同步到备份机的master/slaver机制,master写为主,slave读为主

  2. 用处:

    1. 读写分离,性能拓展。

    2. 容灾快速恢复

    3.  
  3. 配置服务器(配从不配主):

    1. 拷贝多个redis.conf文件

    2. 开启daemonize yes

    3. Pid文件名字

    4. 指定端口

    5. Log文件名字

    6. Dump.rdb名字

    7. Appendonly 关掉或者换名字

    8.  

十四、Jedis:

  1. 所需jar包:

    1. common-pool-1.6jar包

    2. jedis-2.1

    3.  
  2. 获取jedis对象:Jedis jedis = new Jedis(“ip” ,端口号);

十五、集群分布:

实现对redis的水平拓展,启动n’的redis节点,将整个数据分布在这n个节点中

  1. 配置conf文件:

    1. 拷贝多个redis.conf文件

    2. 开启daemonize yes

    3. Pid文件名字

    4. 指定端口

    5. Log文件名字

    6. Dump.rdb名字

    7. Appendonly 关掉或者换名字

    8.  
  2. 配置cluster文件:

    1. cluster-enable yes 打开集群模式

    2. cluster-config-file xxx.conf 设置生成的节点配置文件名

    3. cluster-node-timeout 15000设置节点失联时间,超多该时间(毫秒),集群自动进入主从切换

    4. 原文地址https://blog.csdn.net/weixin_42786143/article/details/81205453

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
NoSQL Redis 数据安全/隐私保护
redis的 rdb 和 aof 持久化方式的区别及使用场景
redis的 rdb 和 aof 持久化方式的区别及使用场景
300 0
|
存储 NoSQL Java
蚂蚁金服Java研发岗二面:redis 常见数据结构以及使用场景分析
redis简单来说 就是一个数据库,不过与传统数据库不同的是 redis 的数据是存在内存中的,所以存写速度非常快,因此 redis 被广泛应用于缓存方向。另外,redis 也经常用来做分布式锁。redis 提供了多种数据类型来支持不同的业务场景。除此之外,redis 支持事务 、持久化、LUA脚本、LRU驱动事件、多种集群方案。所以在面试中我们经常可以看到redis的身影,今天给大家带来一道redis的面试真题以及解析,后面会给大家分享今年来redis常考试的一些真题。
182 0
|
3月前
|
消息中间件 存储 NoSQL
redis实战——go-redis的使用与redis基础数据类型的使用场景(一)
本文档介绍了如何使用 Go 语言中的 `go-redis` 库操作 Redis 数据库
165 0
redis实战——go-redis的使用与redis基础数据类型的使用场景(一)
|
4月前
|
canal 缓存 NoSQL
Redis常见面试题(一):Redis使用场景,缓存、分布式锁;缓存穿透、缓存击穿、缓存雪崩;双写一致,Canal,Redis持久化,数据过期策略,数据淘汰策略
Redis使用场景,缓存、分布式锁;缓存穿透、缓存击穿、缓存雪崩;先删除缓存还是先修改数据库,双写一致,Canal,Redis持久化,数据过期策略,数据淘汰策略
Redis常见面试题(一):Redis使用场景,缓存、分布式锁;缓存穿透、缓存击穿、缓存雪崩;双写一致,Canal,Redis持久化,数据过期策略,数据淘汰策略
|
5月前
|
存储 NoSQL Java
【超长文】Redis在项目中的17种使用场景
Redis 是一个开源的高性能键值对数据库,它以其内存中数据存储、键过期策略、持久化、事务、丰富的数据类型支持以及原子操作等特性,在许多项目中扮演着关键角色。以下是V哥整理的17个Redis在项目中常见的使用场景
287 0
|
缓存 NoSQL Java
Java 最常见的面试题:redis 是什么?都有哪些使用场景?
Java 最常见的面试题:redis 是什么?都有哪些使用场景?
|
6月前
|
存储 SQL NoSQL
Redis入门到通关之五大基本数据类型及其使用场景
Redis入门到通关之五大基本数据类型及其使用场景
53 0
|
6月前
|
存储 SQL NoSQL
Redis 入门、基础。(五种基本类型使用场景)
Redis 入门、基础。(五种基本类型使用场景)
35 0
|
6月前
|
缓存 NoSQL Java
lua脚本在redis中的使用场景
lua脚本在redis中的使用场景
229 0
|
NoSQL Java Redis
第一季:17redis在项目中使用场景【Java面试题】
第一季:17redis在项目中使用场景【Java面试题】
109 0
下一篇
无影云桌面