redis介绍
一、简介
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配置命令
一:HCSA-VM-Linux安装虚拟机后的基础命令 1.代码命令 1.查看本机IP地址: ip addr 或者 ip a [foxbogon ~]$ ip addre [foxbogon ~]$ ip a 1:<Loopback,U,LOWER-UP> 为环回2网卡 2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP&g…...
Kafka:介绍和内部工作原理
展示Kafka工作方式的简单架构。 什么是Kafka?为什么我们要使用它?它是消息队列吗? 它是一个分布式流处理平台或分布式提交日志。 Kafka通常用于实时流数据管道,即在系统之间传输数据,构建不断流动的数据转换系统和构…...
在 EMR Serverless 上使用 Delta Lake
本文是一份开箱即用的全自动测试脚本,用于在 EMR Serverless 上提交一个 Delta Lake 作业。本文完全遵循《最佳实践:如何优雅地提交一个 Amazon EMR Serverless 作业?》 一文给出的标准和规范! 1. 导出环境相关变量 注意&#x…...
Stream流的使用详解(持续更新)
1. 对比两List集合数据某些字段一样的情况下取值: 一般简单方式我们会使用双重for循环来处理判断数据取值(如下代码所示),但是数据量越大的情况下代码效率则越低,并且现在很多公司都会限制for循环层数所以更推荐strea…...
golang工程——gRpc 拦截器及原理
oauth2认证与拦截器 类似java spring中的拦截器。gRpc也有拦截器的说法,拦截器可作用于客户端请求,服务端请求。对请求进行拦截,进行业务上的一些封装校验等,类似一个中间件的作用 拦截器类型 一元请求拦截器流式请求拦截器链式…...
Python接口自动化之unittest单元测试
以下主要介绍unittest特性、运行流程及实际案例。 一、单元测试三连问 1、什么是单元测试? 按照阶段来分,一般就是单元测试,集成测试,系统测试,验收测试。单元测试是对单个模块、单个类或者单个函数进行测试。 将访…...
在亚马逊云科技Amazon SageMaker上部署构建聊天机器人的开源大语言模型
开源大型语言模型(LLM)已经变得流行起来,研究人员、开发人员和组织都可以使用这些模型来促进创新和实验。这促进了开源社区开展合作,从而为LLM的开发和改进做出贡献。开源LLM提供了模型架构、训练过程和训练数据的透明度ÿ…...
【51单片机】10-蜂鸣器
1.蜂鸣器的原理 这里的“源”不是指电源。而是指震荡源。 也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫。 而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。必须用2K~5K的方波去驱动它。 有源蜂鸣器往往比无源的贵ÿ…...
26377-2010 逆反射测量仪 知识梳理
声明 本文是学习GB-T 26377-2010 逆反射测量仪. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了逆反射测量仪的术语和定义、结构与分类、技术要求、计量学特性、试验方法、检验规 则以及标志、包装、运输与贮存。 本标准适用于…...
css实现渐变电量效果柱状图
我们通常的做法就是用echarts来实现 比如 echarts象形柱图实现电量效果柱状图 接着我们实现进阶版,增加渐变效果 echarts分割柱形图实现渐变电量效果柱状图 接着是又在渐变的基础上,增加了背景色块的填充 echarts实现渐变电量效果柱状图 其实思路是一…...
FileManager/本地文件增删改查, Cache/图像缓存处理 的操作
1. FileManager 本地文件管理器,增删改查文件 1.1 实现 // 本地文件管理器 class LocalFileManager{// 单例模式static let instance LocalFileManager()let folderName "MyApp_Images"init() {createFolderIfNeeded()}// 创建特定应用的文件夹func cr…...
vue中使用富文本编辑器
vue中使用富文本编辑器(wangEditor) wangEditor官网地址: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中状态适配
写一个函数,在函数中定义一个对象 用于存放键值对,最后返回指定状态所对应的的值,即对象[指定状态] 的 对象的值。 在模板中把状态传入 // vue3 setup语法糖中 const formatXXXState (xxxState)>{const stateMap {键1: 值1,键2: 值2,.…...
uniapp h5 端 router.base设置history后仍有#号
manifest.json文件设置: "h5": { "router": { "base": "./", "mode": "history" }, }按相对路径发行时路由模式强制为hash模式,不支持history模式(两者相悖)…...
上网行为监管软件(上网行为管理软件通常具有哪些功能)
在我们的日常生活中,互联网已经成为了我们获取信息、交流思想、进行工作和娱乐的重要平台。然而,随着互联网的普及和使用,网络安全问题也日益突出,尤其是个人隐私保护和网络行为的规范。在这个背景下,上网行为审计软件…...
C#中的for和foreach的探究与学习
一:语句及表示方法 for语句: for(初始表达式;条件表达式;增量表达式) {循环体 }foreach语句: foreach(数据类型 变量 in 数组或集合) {循环体 }理解 1.从程序逻辑上理解,foreach是通过指针偏移实现的(最初在-1位置,每循环一次,指针就便宜一个单位),而for循环是通...
【ES6知识】Promise 对象
文章目录 1.1 概述1.2 静态方法1.3 实例方法1.4 Promise 拒绝事件 1.1 概述 Promise 对象用于表示一个异步操作的最终完成(或失败)及其结果值。是异步编程的一种解决方案(可以解决回调地狱问题)。 一个 Promise 对象代表一个在这…...
【Git】配置SSH密钥实现Git操作免密
背景 在使用Git推送代码的时候,会默认需要输入密码。如果经常推送代码,那就需要经常输入密码,比较繁琐。所以Git也提供了免密登录的功能。 Git本身支持两种协议对远程Git仓库进行访问:HTTPS、SSH。两种方式有一定的区别…...
AI能给百融云带来什么?
一大堆有关ChatGPT的利好消息出现之后,市场的反应难得的跟投资者预期站在了一起,AIGC也终于有了跑赢CPO的苗头。二级市场的逻辑不用重复,毕竟AI已经炒了大半年,但有没有发现一个问题?就是在不知不觉中,AI应…...
AI创作系统ChatGPT商业运营版源码+AI绘画/支持GPT联网提问/支持Midjourney绘画+Prompt应用+支持国内AI提问模型
一、AI创作系统 SparkAi创作系统是基于国外很火的ChatGPT进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧&am…...
vue.draggable拖拽,项目中三个表格互相拖拽的实例操作,前端分页等更多小技巧~
vue.draggable中文文档 - itxst.com官网在这里,感兴趣的小伙伴可以看看。 NPM或yarn安装方式 yarn add vuedraggable npm i -S vuedraggable UMD浏览器直接引用JS方式 <script src"https://www.itxst.com/package/vue/vue.min.js"></script&…...
400G DR4 QSFP-DD光模块:数据中心应用全攻略
在当今数字化时代,对于企业和供应商来说,高速数据传输至关重要。随着对更快数据传输的需求不断攀升,400G DR4 QSFP-DD光模块已经成为高速网络的最新解决方案。本文将全面介绍400G DR4 QSFP-DD光模块在数据中心应用中的优势和技术规范。 什么…...
自动驾驶:路径规划概述
自动驾驶:路径规划概述 全局路径规划Dijkstra算法A*算法RRT(随机快速探索树)算法PRM(概率路线图)算法 局部路径规划DWA(动态窗口法)算法TEB(时间弹性带)算法Lattice Plan…...
vlc将本地文件推流成ts实时流
推流 打开vlc ,打开 媒体----打开网络串流 选择文件选项卡,打开本地文件 点击添加,选择本地的mp3文件 选择串流 点击下拉框,选择udp,点击右边的【添加】按钮 输入媒体流输出地址,点击【下一个】 选择正确的…...
在线音乐网站开发摘要/免费b站推广短视频
在本教程中,我们将学习44矩阵键盘以及Arduino键盘接口的工作原理。键盘是一种输入设备,用于输入密码,拨打号码,浏览菜单甚至控制机器人。您可能已经看到ATM上使用了键盘,安全系统,电话等,允许用…...
高端品牌衣服排行榜前十名/免费的seo网站
题库来源:安全生产模拟考试一点通公众号小程序 2021年车工(初级)考试题及车工(初级)复审模拟考试,包含车工(初级)考试题答案和解析及车工(初级)复审模拟考试…...
wordpress ip改域名/微信公众号推广方法有哪些
文章目录类C中可以使用struct、class来定义一个类变量名规范参考类实例化成为了对象,对象的内存空间由成员变量决定对象对象的内存布局代码段(代码区)数据段(全局区)栈空间堆空间thisthis指针必须用->,不能用. &…...
网站建设需要实现哪些目标/推广咨询服务公司
小弟此处只是记录一下参考的文章,因为我是用的两种方案结合的,没有别的意思 详细出处参考:http://blog.csdn.net/linghao00/article/details/8058730 以及http://blog.csdn.net/lqh4188/article/details/46828409 第一篇文章的内容࿱…...
建设电子商务网站的预期收益/手机免费建站系统
2019独角兽企业重金招聘Python工程师标准>>> 日期转换帮助类 博客分类: java /*** 转换微博时间的工具类* * * */ public class ConvertDateUtil {/*** 转换字符类型的时间为日期* * param time* 1. 60分钟前 * 2. 今天 13:05 *…...
广州越秀番禺最新通告/浙江seo推广
一、用户输入验证1、手工编程验证动作类中的所有方法进行验证:步骤:a、动作类继承ActionSupportb、覆盖调用public void validate()方法c、在validate方法中,编写不符合要求的代码判断,并调用父类的addFieldError(String fieldNam…...