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学习笔记 的相关文章

  • AWS DynamoDB 写后读一致性 - 理论上它是如何工作的?

    大多数nosql解决方案仅使用最终一致性 并且考虑到DynamoDB将数据复制到三个数据中心 如何保持写后读一致性 解决此类问题的通用方法是什么 我认为这很有趣 因为即使在 MySQL 复制中 数据也是异步复制的 我将详细告诉您 Dynam
  • Redis+Docker+Django - 错误 111 连接被拒绝

    我正在尝试使用 Redis 作为使用 Docker Compose 的 Django 项目的 Celery 代理 我无法弄清楚我到底做错了什么 但尽管控制台日志消息告诉我 Redis 正在运行并接受连接 事实上 当我这样做时 docker
  • 如何将“.csv”数据文件导入Redis数据库

    如何将 csv 数据文件导入 Redis 数据库 csv 文件中包含 id 时间 纬度 经度 列 您能否向我建议导入 CSV 文件并能够执行空间查询的最佳方法 这是一个非常广泛的问题 因为我们不知道您想要什么数据结构 您期望什么查询等等 为
  • Spring Redis删除不删除key

    我正在尝试删除一个 Redis 键 但由于某种原因它没有删除 但也没有抛出异常 这是我要删除的代码 import com example service CustomerService import com example model Cu
  • 如何同步nosql db(ravendb)中的更改

    我已经开始在 RavenDB 的示例上学习 NoSQL 我从一个最简单的模型开始 假设我们有由用户创建的主题 public class Topic public string Id get protected set public stri
  • NoSQL(MongoDB)与 Lucene(或 Solr)作为数据库[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 随着基于文档数据库的 NoSQL 运动的发展 我最近关注了 MongoDB 我注意到如何将项目视为 文档 就像 Lucene 以及 Solr 用
  • Firestore从集合中获取文档ID

    我正在尝试使用 id 检索我的文档 但无法弄清楚 目前我像这样检索我的文档 const racesCollection AngularFirestoreCollection
  • 如何配置Lettuce Redis集群异步连接池

    我正在配置我的生菜重新分配池 当我按照官方文档配置时 连接池无法正常初始化 无法获取连接 官方文档指出 RedisClusterClient clusterClient RedisClusterClient create RedisURI
  • 超出 Redis 连接/缓冲区大小限制

    在对我们的应用程序服务器进行压力测试时 我们从 Redis 中得到以下异常 ServiceStack Redis RedisException 无法连接到 redis host 6379 处的 redis 实例 gt System Net
  • MongoDB 嵌套数组查询

    我问这个作为评论another https stackoverflow com questions 5250652 query a nested array in mongodb问题 还发了一个question https groups g
  • 没有适用于机器人的 Laravel 会话

    我在大型 Laravel 项目和 Redis 存储方面遇到问题 我们将会话存储在 Redis 中 我们已经有 28GB 的 RAM 然而 它的运行速度仍然相对较快 达到了极限 因为我们有来自搜索引擎机器人的大量点击 每天超过 250 000
  • Web API 缓存 - 如何使用分布式缓存实现失效

    我有一个 API 目前不使用任何缓存 我确实有一个正在使用的中间件 它可以生成缓存标头 Cache Control Expires ETag Last Modified 使用https github com KevinDockx HttpC
  • 使用通配符查找键

    我已经使用分号保存了数据 redis gt keys party 1 party congress president 2 party bjp president 3 party bjp 4 party sena 是否有任何命令可以列出所有
  • 在 MongoDB 中查找 7 天前的记录

    我有一个包含对象的集合 如下所示 1 id ObjectId 551c6605e4c6ac495c923aab sender id ObjectId 551c6605e4c6ac495c923aac rep sender id 38 sen
  • 如何决定使用哪种NoSQL技术? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 MongoDB 基于文档 HBase 基于列 和 Neo4j 对象图 的优缺点是什么 我特别有兴趣了解
  • 在 Redis 中存储 IP 范围

    我有很多不同提供商的 IP 范围 例如 P1 192 168 1 10 192 168 1 50 192 168 2 16 192 168 2 49 P2 17 36 15 34 17 36 15 255 P3 我将此 IP 转换为 int
  • 修订:算法和数据结构

    我需要通过修订来构建和处理数据的想法 例如 我有一个对象数据库 例如汽车 每个对象都有许多属性 这些属性可以是任意的 因此没有一个固定的模式来描述这些对象 这些对象可能保存为键值对 现在我需要更改对象的属性 我不想完全重写它 我希望能够返回
  • Mongodump之后,调用MongoRestore挂起

    我们正在尝试在相对较小的数据库上做一个简单的 MongoDump 我们的步骤很简单 export 从目标机器上删除现有数据库 在目标机器上导入 MongoDump 完美执行 mongodump out root mongo prod DB
  • 如何在Redis中使用HSCAN命令?

    我想在我的作业中使用 Redis 的 HSCAN 命令 但我不知道它是如何工作的 Redis 的官方页面 http redis io commands hscan http redis io commands hscan 这个命令给了我空白
  • 如何按键中的值对 Redis 哈希进行排序

    Redis 有没有一种好方法来获取按值排序的哈希中的键 我查看了文档 但没有找到直接的方法 另外有人可以解释一下redis中的排序是如何实现的 以及什么吗 本文档 http redis io commands SORT using hash

随机推荐

  • 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 原子性