Redis学习笔记

2023-10-31

Redis第一天

一、 NoSQL数据库介绍

NoSQL表示不仅仅是SQL,泛指非关系型数据库。NoSQL不依赖业务逻辑方式存储,而是以简单的key-value模式存储。因此大大增加了数据库的扩展能力

  • 不遵循SQL标准
  • 不支持ACID(原子性、隔离性、一致性、持久性)
  • 远超于SQL的性能

NoSQL适用场景

  • 对数据高并发的读写
  • 海量数据读写
  • 对数据高可扩展性

NoSQL不适用场景

  • 需要事务支持
  • 基于sql的结构话查询存储,处理复杂的关系,

(用不着sql,和用了sql也不能解决的情况,可以考虑NoSQL)

常见NoSQL数据库

  1. Memcache
  2. Redis(支持持久化、还支持多种数据结构的存储)
  3. MongoDB(文档型数据库,类似于json格式数据,存储数据更加多样)

二、Redis概述与安装

  • Redis 是一个开源的key-value存储系统
  • 支持更多数据结构的存储
  • Redis支持不同方式排序
  • 支持数据持久化
  • session共享
  • 多样数据结构存储持久化数据

通过List实现按自然排序的数据 --> 最新N个数据

利用zset(有序集合) --> 排行榜N

Expire 过期 --> 手机验证码

原子性自增方法 --> 计数器、秒杀

利用Set集合 --> 去除大量重复数据

利用list集合 --> 构建队列

1、linux环境下安装redis

  1. 上传redis文件

  2. 由于redis需要C语言环境支持,所以首先安装gcc

  3. 安装完成之后使用tar -zxvf redis-2.6.7.tar.gz 解压

  4. 进入加压好的文件目录执行 make 命令进行编译

  5. 使用make install命令进行安装

  6. 安装成功之后进入 /usr/local/bin目录查看安装文件

    redis-benchmark		性能测试工具,可以自己在本机运行,看看自己本机性能如何
    redis-check-aof		修复有问题的AOF文件,rdb和aof
    redis-cli			客户端,操作入口
    redis-sentinel 		Redis集群使用
    redis-server		Redis服务器启动命令
    

2、Redis前台启动

[root@CclSys bin]# redis-server

3、推荐Redis后台启动

[root@CclSys bin]# redis-server /etc/redis.conf 

4、远程连接虚拟机Redis

  1. 开放linux3679端口

    [root@CclSys bin]# firewall-cmd --permanent  --add-port=6379/tcp
    success
    [root@CclSys bin]# firewadd-cmd --reload
    success
    

    表示端口开放成功

  2. 更改redis配置文件

    [root@CclSys bin]# vim /etc/redis.conf
    

    将配置文件中的 protected-moodo yes 改成no 关闭保护

​ 将 bind 127.0.0.1 改为 0.0.0.0 允许所有ip访问

​ 将deamonize 改为yes 允许后台运行

​ 3. 使用可视化软件进行连接

Redis底层使用单线程+IO多路复用实现

三、常用五大数据类型

1、常用命令

  1. keys * 查看当前库中所有key
  2. existts key 查看当前库中某个key是否存在
  3. type key 查看 某个key是什么类型
  4. del key 删除某个key
  5. unlink key 根据value选择非阻塞删除(仅仅将keys从keyspace元数据中删除,真正的删除会在后续异步操作)
  6. expore key 10 为给定的key 设置过期时间
  7. ttl key 查看key还有多少秒过期 -1表示永不过期 -2表示已经过期
  8. select 0-15 切换redis默认的15个库
  9. dbsize 查看当前redis中存在多少个key
  10. flushdb 清空当前库
  11. fllushall 通杀全部库

2、Redis 字符串(String)

String是Redis最基本的类型,String类型 是二进制安全的.意味着Redis的String可以包含任何数据,比如jpg图片或者序列化对象

String类型是Redis最基本的数据类型,一个Redis中字符串value最多可以是512M

字符串操作常用命令

  1. set命令 set key value 设置值 ,设置相同的key会覆盖之前的值
  2. get命令 get key 取值
  3. append key value 追加
  4. strlen key 获得值的长度
  5. setnx key value 只有在key不存在时 ,才可以设置key的值
  6. incr key 让存储的数字值自增1
  7. decr key 让存储的数字值减1
  8. incrby / decrby key <步长> 让数字值增加/减少相应步长
    1. 原子性:所谓原子操作是指不会被线程调度机制打断的操作,这种操作一旦开始就一直运行到结束,中间切换到另一个线程。
  9. mset 设置多个键值对
  10. mget 获取多个值
  11. msetnx 只能设置多个不存在的值(有一个存在都不成功)
  12. getrange <起始位置><结束位置> 获得范围之内的值
  13. setrange <起始位置><结束位置> 设置范围的值
  14. setex <过期时间> 设置过期时间的值
  15. getset 新值换旧值

数据结构

​ String的数据结构为简单动态字符串(simpl Dynamic String)。是可以修改的字符串,内部结构实际上类似于Java的ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配。当字符串长度小于1M时,扩容是加倍现有的空间,如果超过1M,扩容时一次指挥多扩1M的空间。需要注意的是字符串最大长度为512M。

3、Redis 列表(List)

  • 单键多值
  • Redis列表是简单的字符串列表,按照插入顺序排序,你可以添加一个元素列表的头部或者尾部
  • 底层实际上是双向链表,对两端的操作性能很高,通过索引下标的操作,中间节点性能会较差。

列表常用命令操作

  1. lpush / rpush 从左/右插入一个或多个值.
  2. lpop / rpop 表示从左边或者右边移除一个值。
  3. lrange <起始位置><末尾位置>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Redis学习笔记 的相关文章

  • 使用 Django 会话存储登录用户

    我正在创建一个以 REST 为中心的应用程序 它将针对大多数特定于域的模型使用某种 NoSQL 数据存储 对于我打算围绕 REST 数据框架构建的主站点 我仍然希望对用户 计费信息和域数据模型范围之外的其他元数据使用传统的关系数据库 有人告
  • Redis 排序集和解决关系

    我正在使用 Redis 排序集来存储我正在处理的项目的排名 我们没有预料到 我们想要如何处理关系 Redis 按字典顺序对具有相同分数的条目进行排序 但我们想要做的是对具有相同分数的所有条目给予相同的排名 例如在以下情况 redis 127
  • 从redis中检索大数据集

    一台服务器上的应用程序查询另一台服务器上运行的 Redis 查询的结果数据集约为 250kzrangebyscore objects locations inf inf这在应用程序服务器上似乎需要 40 秒 当使用命令执行时redis cl
  • 适用于 Web 照片库的正确 NoSQL 数据架构

    我正在寻找为照片库的 NoSQL 存储构建合适的数据结构 在我的网络应用程序中 一张照片可以是一个或多个相册的一部分 我有使用 MySQL 的经验 但几乎没有使用键值存储的经验 使用 MySQL 我将设置 3 个表 如下所示 photos
  • 如何将 ActionController::Live 与 Resque + Redis 一起使用(用于聊天应用程序)

    我正在尝试为我的 Rails 应用程序构建聊天功能 我在用ActionController Live Puma Resque Redis为了这 所以基本上在这种情况下 redissubscribe方法正在后台运行 使用resque 到目前为
  • Mongoose:find() 忽略重复值

    我有一只 聊天 猫鼬Schema它具有以下属性 const schema mongoose Schema recipient type mongoose Types ObjectId required true ref User sende
  • Cassandra 集群 - 特定节点 - 特定表高丢弃突变

    我在生产中的压缩策略是 LZ4 压缩 但我将其修改为 Deflate 对于压缩更改 我们必须使用 nodetool Upgradesstables 强制升级所有 sstable 上的压缩策略 但是 一旦在集群中的所有 5 个节点上完成了 U
  • 如何测试我的 Redis 缓存是否正常工作?

    我已经安装了 django redis cache 和 redis py 我遵循了 Django 的缓存文档 据我所知 以下设置就是我所需要的 但我如何判断它是否正常工作 设置 py CACHES default BACKEND redis
  • 是否有 NoSQL 解决方案的比较(在某些情况下哪个更好?)[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 当我在 Linux PHP 架构中构建基于密钥的归档应用程序时 我正在尝试了解有关 NoSQL 的更多信息 谁能解释一下主要解决方案
  • 如何将node.js管道传输到redis?

    我有很多数据要插入 SET INCR 到redis DB 所以我正在寻找pipeline http redis io topics pipelining 质量插入 http redis io topics mass insert通过node
  • Redis SYNC 套接字上的错误情况:连接被拒绝

    在我的 django 应用程序中使用 celery 和 redis 一切都工作正常 直到我遇到了问题 redis 文件的位置已更改 redis 无法访问它们 经过查找 原来这是由于网络随机攻击造成的 需要添加confg 我添加文件后 一段时
  • 使用 Redis 命令 incr 和 expire 时的竞争条件

    根据redis文档 http redis io commands incr http redis io commands incr 在段落模式 速率限制器 2 较短的版本代码 value INCR ip IF value 1 THEN EX
  • socket.io 广播功能 & Redis pub/sub 架构

    如果有人能帮助我解决一个小疑问 我将不胜感激 使用socket io广播功能和在Redis上使用pub sub设计架构有什么区别 例如 在另一个示例中 node js 服务器正在侦听 socket io 针对 键 模型 todo 和值 数据
  • Redis Docker compose无法处理RDB格式版本10

    我无法在 docker compose 文件中启动 redis 容器 我知道docker compose文件没问题 因为我的同事可以成功启动项目 我读到有一个删除 dump rdb 文件的解决方案 但我找不到它 我使用Windows机器 任
  • 如何设置和获取Redis中存储的对象?

    我试图在 redis 中存储一个对象 当我获取该对象时 它似乎不起作用 I tried u User new u name blankman redis set test u x redis get test x name error 我想
  • 如何在Redis中进行持久化存储?

    关闭redis服务器后 使用set存储的值被破坏 在这里我找到了使用持久性存储的方法 有人帮助我 如何使用javascript实现这一点 我想将客户端的一些值存储在 redis 数据库中 并且必须在其他客户端中使用该值 您需要配置 Redi
  • Lua中按字符分割字符串

    我有像这样的字符串 ABC DEF 我需要将它们分开 字符并将两个部分分别分配给一个变量 在 Ruby 中 我会这样做 a b ABC DEF split 显然Lua没有这么简单的方法 经过一番挖掘后 我找不到一种简短的方法来实现我所追求的
  • ScyllaDB 是否支持 OR 运算符?

    scyladb 中 SELECT 语句的 WHERE 子句中的 OR 条件如何工作 我已经在电子邮件上创建了二级索引 下面的查询工作正常并返回结果 cqlsh gt select from test d emp where email em
  • 使用 Cassandra 进行单元版本控制

    我的应用程序使用 AbstractFactory 作为 DAO 层 因此一旦实现了 HBase DAO 系列 创建 Cassandra DAO 系列并从多个角度查看差异对我来说将是非常好的 不管怎样 试图做到这一点 我看到 Cassandr
  • redis dump.rdb / 保存小文件

    Context 我正在使用redis 数据库小于 100 MB 但是 我想进行每日备份 我也在 Ubuntu Server 12 04 上运行 当输入 redis cli save 我不知道 dump rdb 保存到哪里 因为 redis

随机推荐

  • maven打包出错:Failed to execute goal org.sp

    Failed to execute goal org springframework boot spring boot maven plugin 2 2 13 RELEASE repackage default on project bla
  • 数学建模——数据分析方法

    一 常见数据分析软件 Excel office三件套之一 R语言 Eviews origin 图形分析工具 SPSS 统计分析与数据挖掘 MATLAB 墙裂推荐 python 墙裂推荐 SAS 二 统计性描述 均值 mean x
  • 第一次参加蓝桥杯的心得

    随着我的4道题的答案提交后 蓝桥杯第十届比赛落下帷幕 这其中我也是参赛者 对于这次比赛 虽然我是一位小白 但是我也有不少的感悟 因为这一次也是我从小到大参加的第一次大型竞赛 所以我做了以下的总结 这次的比赛是在长沙理工大学比赛 所以对于我来
  • Swin-Unet:Swin Transformer在医学分割上的首次尝试

    Swin Unet Swin Transformer在医学分割上的首次尝试 前言 最近小编主要在搞一些医学图像分割的工作 也跑了一下Swin Unet 之前看到也看到过这篇Swin Unet 其实五月份就看到了hhhh 决定搬运过来 实际上
  • 前端报错500

    后台代码错误无法返回值 检查后台代码
  • log4j:WARN No appenders could be found for logger 的解决方法

    一 SSH在使用Log4j进行日志管理时常会遇到这个异常 log4j WARN No appenders could be found for logger org springframework web context ContextLo
  • STM32F103使用硬件IIC驱动SHT30温湿度传感器

    文章目录 前言 一 SHT30温湿度传感器原理图 二 代码部分 1 SHT30 c文件 2 SHT30 h文件 总结 前言 SHT30是一种常见的温湿度传感器 该传感器广泛应用于各种场景 小米的温湿度传感器就是使用的SHT30 本文是已硬件
  • java Consumer接口与示例

    目录 一 consumer使用 示例代码1 示例代码2 示例代码3 示例代码4 二 BiConsumer使用 示例代码一 示例代码二 三 其他和Consumer相关的接口 Java 8 中的 Consumer 是一个函数接口 它可以接受一个
  • opc matlab gui,OPC Server/Client Demo

    Hi thanks a lot for posting this app I m a student and my assignment is to create a simple OPC client server application
  • 牛顿法/递归法实现开方的函数功能

    Filename sqrt method cpp Description Version 1 0 Created 12 27 2016 03 15 18 PM Revision none Compiler gcc Author YOUR N
  • 英语口语413之每日二十个英语单词

    2020 09 01每日二十个英语单词 synchronization 同步化 synchronization multiprocessor 多处理器同步化 synchronized multimedia integration langu
  • buctoj-python 2022.6.19

    A 对指定r计算圆的面积 题目描述 编写函数getCircleArea 对给定的参数r计算圆的面积 并返回 首先读入n n gt 0 然后依次读入n个半径r1 r2 rn 以这些半径为参数依次调用getCircleArea函数 得到对应圆的
  • 管理员权限运行批处理的几种方法

    废话不说 解决win7运行批处理出错不能注册dll等问题 1 在批处理的第一行加入 cd d dp0 然后在批处理上右键选择使用管理员权限运行 2 右键任务栏 选择资源管理器 进程选项卡 显示所有用户的进程 结束explorer 文件 新建
  • HJ59 找出字符串中第一个只出现一次的字符

    描述 找出字符串中第一个只出现一次的字符 数据范围 输入的字符串长度满足 1 le n le 1000 1 n 1000 输入描述 输入一个非空字符串 输出描述 输出第一个只出现一次的字符 如果不存在输出 1 示例1 输入 asdfasdf
  • linux下查看文件大小:ls或du

    方法1 ls lh 参数解释 l 除文件名称外 亦将文件型态 权限 拥有者 文件大小等资讯详细列出 h human readable 与 l 一起 以易于阅读的格式输出文件大小 例如 1K 234M 2G t 文件显示以修改时间排序 最新修
  • Android 中的CreatePackageContext()

    http blog csdn net wangbole article details 22876179 java view plain copy print Return a new Context object for the give
  • Opencv4基于C++基础入门笔记:图像 颜色 事件响应 图形 视频 直方图

    效果图 opencv人脸识别效果图 请叫我真爱粉 先看一下效果图勾起你的兴趣 文章目录 一 环境配置搭建 二 图像 1 图像读取与显示 main cpp 运行结果 2 图像色彩空间转换 2 1 换色彩 test h test cpp mai
  • nginx location proxy_pass后面加不加/的区别

    以下是通过运行两个nginx测试的结果 通过查看访问日志得到 其中第一行为访问第一个nginx 172 16 78 5 时的地址 然后第一个nginx反向代理第二个nginx 172 16 30 59 分别在第一个nginx修改locati
  • Linux:shell脚本 正则表达式与AWK

    目录 一 正则表达式 1 2元字符 1 3表示次数 1 4位置锚定 1 5分组或其他 1 6扩展正则表达式 1 7grep 二 AWK awk F 编辑三 sed 1 sed简介 2 sed工作流程 3 sed命令格式 3 1打印全部内容
  • Redis学习笔记

    Redis第一天 一 NoSQL数据库介绍 NoSQL表示不仅仅是SQL 泛指非关系型数据库 NoSQL不依赖业务逻辑方式存储 而是以简单的key value模式存储 因此大大增加了数据库的扩展能力 不遵循SQL标准 不支持ACID 原子性