当前位置: 首页 > news >正文

redis介绍

7171305851fa4edab260a9298a4cae48.gif一、简介

 

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

 

Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。

Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

Redis支持数据的备份,即master-slave模式的数据备份。

二、数据类型

Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

 

string(字符串)

string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。

 

string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。

 

string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。

 

hash(哈希)

Redis hash 是一个键值(key=>value)对集合。

 

Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。

 

list(列表)

Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。列表最多可存储 232 - 1 元素 (4294967295, 每个列表可存储40多亿)。

 

Set(集合)

Redis 的 Set 是 string 类型的无序集合。

 

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。

 

zset(sorted set:有序集合)

Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。

 

不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

 

zset的成员是唯一的,但分数(score)却可以重复。

 

三、事务

Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证:

 

批量操作在发送 EXEC 命令前被放入队列缓存。

收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。

在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。

一个事务从开始到执行会经历以下三个阶段:

 

开始事务。

命令入队。

执行事务。

单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的。

 

事务可以理解为一个打包的批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做。

 

 

四、redis常用命令及基本用法

1、redis连接

import redis

 

r =redis.Redis(host='127.0.0.1',port=6379)

2、也可以使用连接池连接

import redis

 

p = redis.ConnectionPool(host='127.0.0.1', port=6379)

3、基本命令string

复制代码

import redis

 

r =redis.Redis(host='127.0.0.1',port=6379)

 

#1、存储数据set(name, value, ex=None, px=None, nx=False, xx=False)

#ex,过期时间(秒)

#px,过期时间(毫秒)

#nx,如果设置为True,则只有name不存在时,当前set操作才执行

#xx,如果设置为True,则只有name存在时,当前set操作才执行

r.set('name','pt')

 

 

#2、批量设置值mset(*args, **kwargs)

r.mset(k1='v1', k2='v2')

 

#3.批量获取mget(keys, *args)

r.mget("k1","k2")

 

#4.修改值getset(name, value),将k1的值换成v2

r.getset("k1","v2"))

复制代码

4、基本命令hash

复制代码

import redis

 

r =redis.Redis(host='127.0.0.1',port=6379)

 

#1、单个增加--修改(单个取出)--没有就新增,有的话就修改

#hset(name, key, value)

#name对应的hash中设置一个键值对(不存在,则创建;否则,修改)

#参数:

#name,redis的name

#key,name对应的hash中的key

#value,name对应的hash中的value

r.hset("name_hash","k1","v1")

 

#2、hsetnx(name, key, value)只能新建

r.hsetnx("name_hash","k1","v1")

 

#3、批量增加(取出)

#hmset(name, mapping)

#在name对应的hash中批量设置键值对

#参数:

#name,redis的name

#mapping,字典,如:{'k1':'v1', 'k2': 'v2'}

r.hmset('xx', {'k1':'v1', 'k2': 'v2'})

 

#4、取出单个

#hget(name,key)

#在name对应的hash中获取根据key获取value

r.hget("name_hash","k2")

 

#5、批量取出

#hmget(name, keys, *args)

#在name对应的hash中获取多个key的值

#参数:

#name,reids对应的name

#keys,要获取key集合,如:['k1', 'k2', 'k3']

#*args,要获取的key,如:k1,k2,k3

r.hmget('xx', 'k1', 'k2')

 

#6、取出所有的键值对

#hgetall(name)

#获取name对应hash的所有键值

r.hgetall("name_hash")

 

#7、删除键值对

#hdel(name,*keys)

#将name对应的hash中指定key的键值对删除

r.hdel("name_hash","k1") 删除一个键值对

复制代码

5、基本命令list

复制代码

import redis

 

r =redis.Redis(host='127.0.0.1',port=6379)

 

#1、增加(类似于list的append,只是这里是从左边新增加)--没有就新建

#lpush(name,values)

#在name对应的list中添加元素,每个新的元素都添加到列表的最左边

r.lpush('oo', 11,22,33)

 

#2、增加(从右边增加)--没有就新建

r.lpush('oo', 11,22,33)

 

#3、新增(固定索引号位置插入元素)

linsert(name, where, refvalue, value))

#在name对应的列表的某一个值前或后插入一个新值

#参数:

#name,redis的name

#where,BEFORE或AFTER

#refvalue,标杆值,即:在它前后插入数据

#value,要插入的数据

r.linsert("foo_list1","before","22","33")

 

#4、修改

#lset(name, index, value)

#对name对应的list中的某一个索引位置重新赋值

#参数:

#name,redis的name

#index,list的索引位置

#value,要设置的值

r.lset("name_list",4,20)

 

#5、删除

#lrem(name, value, num)

#在name对应的list中删除指定的值

#参数:

#name,redis的name

#value,要删除的值

#num, num=0,删除列表中所有的指定值;

#num=2,从前到后,删除2个; num=1,从前到后,删除左边第1个

#num=-2,从后向前,删除2个

r.lrem("foo_list1","2",1)

 

#6、取值(根据索引号取值)

lindex(name, index)

在name对应的列表中根据索引获取列表元素

r.lindex("name_list",0)

复制代码

6、基本命令set

复制代码

import redis

 

r =redis.Redis(host='127.0.0.1',port=6379)

 

#1、新增

#sadd(name,values)

#name对应的集合中添加元素

r.sadd("set1",33,44,55,66)

 

#2、 获取元素个数 类似于len

scard(name)

#获取name对应的集合中元素个数

r.scard("set1")

 

#3、 获取集合中所有的成员

smembers(name)

#获取name对应的集合的所有成员

r.smembers("set1")

 

#4、删除,随机删除,返回被删除值

#spop(name)

r.spop("set1")

 

#5、指定删除

#srem(name, values)

r.srem("set1",66)

复制代码

7、基本命令有序集合

复制代码

import redis

 

r =redis.Redis(host='127.0.0.1',port=6379)

 

#1、新增

#zadd(name, *args, **kwargs)

#在name对应的有序集合中添加元素

r.zadd('zz', 'n1', 1, 'n2', 2)

 

#2、获取有序集合元素个数 类似于len

#zcard(name)

#获取name对应的有序集合元素的数量

r.zcard('zz')

 

#3、获取name对应的有序集合中分数 在 [min,max] 之间的个数

#zcount(name, min, max)

r.zcount("zz",11,22)

 

#4、删除--指定值删除

#zrem(name, values)

r.zrem('zz', ['s1', 's2'])

复制代码

8、其他常规操作

复制代码

#1 删除

delete(*names)

#根据删除redis中的任意数据类型(string、hash、list、set、有序set)

 

#2、检查名字是否存在

#exists(name)

#检测redis的name是否存在

r.exists("ste1") True 存在就是True, False 不存在就是False

 

#3、模糊匹配

#keys(pattern='*')

#根据模型获取redis的name

r.keys(pattern='ss')

 

#4、设置超时时间

#expire(name ,time)

#为某个redis的某个name设置超时时间

r.expire(name ,5)

 

#5、 重命名

#rename(src, dst)

#对redis的name重命名为

r.rename("name2","name1")

 

#6、获取类型

#type(name)

#获取name对应值的类型

r.type("set1")

 

#7、查看所有元素

#scan(cursor=0, match=None, count=None)

相关文章:

redis介绍

一、简介 Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。 Redis不仅仅支持简单的key-value类型的数据,同时还提供list,…...

数学建模常用模型

作为数学建模的编程手还掌握一些各类模型常用算法,数学建模评价类模型、分类模型、预测类模型比较常用的方法总结如下: 接下来对这些比较典型的模型进行详细进行介绍说明。 一、评价模型 在数学建模中,评价模型是比较基础的模型之一&#x…...

Linux 基本语句_5_创建静态库|动态库

静态库 创建主函数:main.c 应用函数:add.c、sub.c、mul.c 创建calc.h文件作为头文件 生成可执行文件*.o文件 gcc -c add.c -o add.o ....包装*.o文件为静态库 ar -rc libmymath.a add.o sub.o mul.o编译静态库并指明创建静态库的位置 sudo gcc mai…...

【每日一题】2703. 返回传递的参数的长度

2703. 返回传递的参数的长度 - 力扣(LeetCode) 请你编写一个函数 argumentsLength,返回传递给该函数的参数数量。 示例 1: 输入:args [5] 输出:1 解释: argumentsLength(5); // 1只传递了一个值…...

虚拟DOM详解

面试题:请你阐述一下对vue虚拟dom的理解 什么是虚拟dom? 虚拟dom本质上就是一个普通的JS对象,用于描述视图的界面结构 在vue中,每个组件都有一个render函数,每个render函数都会返回一个虚拟dom树,这也就意味…...

Linux配置命令

一&#xff1a;HCSA-VM-Linux安装虚拟机后的基础命令 1.代码命令 1.查看本机IP地址&#xff1a; ip addr 或者 ip a [foxbogon ~]$ ip addre [foxbogon ~]$ ip a 1&#xff1a;<Loopback,U,LOWER-UP> 为环回2网卡 2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP&g…...

Kafka:介绍和内部工作原理

展示Kafka工作方式的简单架构。 什么是Kafka&#xff1f;为什么我们要使用它&#xff1f;它是消息队列吗&#xff1f; 它是一个分布式流处理平台或分布式提交日志。 Kafka通常用于实时流数据管道&#xff0c;即在系统之间传输数据&#xff0c;构建不断流动的数据转换系统和构…...

在 EMR Serverless 上使用 Delta Lake

本文是一份开箱即用的全自动测试脚本&#xff0c;用于在 EMR Serverless 上提交一个 Delta Lake 作业。本文完全遵循《最佳实践&#xff1a;如何优雅地提交一个 Amazon EMR Serverless 作业&#xff1f;》 一文给出的标准和规范&#xff01; 1. 导出环境相关变量 注意&#x…...

Stream流的使用详解(持续更新)

1. 对比两List集合数据某些字段一样的情况下取值&#xff1a; 一般简单方式我们会使用双重for循环来处理判断数据取值&#xff08;如下代码所示&#xff09;&#xff0c;但是数据量越大的情况下代码效率则越低&#xff0c;并且现在很多公司都会限制for循环层数所以更推荐strea…...

golang工程——gRpc 拦截器及原理

oauth2认证与拦截器 类似java spring中的拦截器。gRpc也有拦截器的说法&#xff0c;拦截器可作用于客户端请求&#xff0c;服务端请求。对请求进行拦截&#xff0c;进行业务上的一些封装校验等&#xff0c;类似一个中间件的作用 拦截器类型 一元请求拦截器流式请求拦截器链式…...

Python接口自动化之unittest单元测试

以下主要介绍unittest特性、运行流程及实际案例。 一、单元测试三连问 1、什么是单元测试&#xff1f; 按照阶段来分&#xff0c;一般就是单元测试&#xff0c;集成测试&#xff0c;系统测试&#xff0c;验收测试。单元测试是对单个模块、单个类或者单个函数进行测试。 将访…...

在亚马逊云科技Amazon SageMaker上部署构建聊天机器人的开源大语言模型

开源大型语言模型&#xff08;LLM&#xff09;已经变得流行起来&#xff0c;研究人员、开发人员和组织都可以使用这些模型来促进创新和实验。这促进了开源社区开展合作&#xff0c;从而为LLM的开发和改进做出贡献。开源LLM提供了模型架构、训练过程和训练数据的透明度&#xff…...

【51单片机】10-蜂鸣器

1.蜂鸣器的原理 这里的“源”不是指电源。而是指震荡源。 也就是说&#xff0c;有源蜂鸣器内部带震荡源&#xff0c;所以只要一通电就会叫。 而无源内部不带震荡源&#xff0c;所以如果用直流信号无法令其鸣叫。必须用2K~5K的方波去驱动它。 有源蜂鸣器往往比无源的贵&#xff…...

26377-2010 逆反射测量仪 知识梳理

声明 本文是学习GB-T 26377-2010 逆反射测量仪. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了逆反射测量仪的术语和定义、结构与分类、技术要求、计量学特性、试验方法、检验规 则以及标志、包装、运输与贮存。 本标准适用于…...

css实现渐变电量效果柱状图

我们通常的做法就是用echarts来实现 比如 echarts象形柱图实现电量效果柱状图 接着我们实现进阶版&#xff0c;增加渐变效果 echarts分割柱形图实现渐变电量效果柱状图 接着是又在渐变的基础上&#xff0c;增加了背景色块的填充 echarts实现渐变电量效果柱状图 其实思路是一…...

FileManager/本地文件增删改查, Cache/图像缓存处理 的操作

1. FileManager 本地文件管理器&#xff0c;增删改查文件 1.1 实现 // 本地文件管理器 class LocalFileManager{// 单例模式static let instance LocalFileManager()let folderName "MyApp_Images"init() {createFolderIfNeeded()}// 创建特定应用的文件夹func cr…...

vue中使用富文本编辑器

vue中使用富文本编辑器&#xff08;wangEditor&#xff09; wangEditor官网地址&#xff1a;https://www.wangeditor.com/ 使用示例 <template><div class"app-container"><div class"box"><div class"editor-tool">&l…...

13.(开发工具篇github)如何在GitHub上上传本地项目

一:创建GitHub账户并安装Git 二:创建一个新的仓库(repository) 三、拉取代码 git clone https://github.com/ainier-max/myboot.git git clone git@github.com:ainier-max/myboot.git四、拷贝代码到拉取后的工程 五、上传代码 (1)添加所有文件到暂存...

vue3中状态适配

写一个函数&#xff0c;在函数中定义一个对象 用于存放键值对&#xff0c;最后返回指定状态所对应的的值&#xff0c;即对象[指定状态] 的 对象的值。 在模板中把状态传入 // vue3 setup语法糖中 const formatXXXState (xxxState)>{const stateMap {键1: 值1,键2: 值2,.…...

uniapp h5 端 router.base设置history后仍有#号

manifest.json文件设置&#xff1a; "h5": { "router": { "base": "./", "mode": "history" }, }按相对路径发行时路由模式强制为hash模式&#xff0c;不支持history模式&#xff08;两者相悖&#xff09;…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

深入浅出Diffusion模型:从原理到实践的全方位教程

I. 引言&#xff1a;生成式AI的黎明 – Diffusion模型是什么&#xff1f; 近年来&#xff0c;生成式人工智能&#xff08;Generative AI&#xff09;领域取得了爆炸性的进展&#xff0c;模型能够根据简单的文本提示创作出逼真的图像、连贯的文本&#xff0c;乃至更多令人惊叹的…...

论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving

地址&#xff1a;LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂&#xff0c;正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...

《Offer来了:Java面试核心知识点精讲》大纲

文章目录 一、《Offer来了:Java面试核心知识点精讲》的典型大纲框架Java基础并发编程JVM原理数据库与缓存分布式架构系统设计二、《Offer来了:Java面试核心知识点精讲(原理篇)》技术文章大纲核心主题:Java基础原理与面试高频考点Java虚拟机(JVM)原理Java并发编程原理Jav…...