网站关键词重要性/西安百度公司
Redis
命令中心
【golang工程中间件——redisxxxxx】这些篇文章专门以应用为主,原理性的后续博主复习到的时候再详细阐述
string结构以及应用
字符数组,redis字符串是二进制安全字符串,可以存储图片等二进制数据,同时也可以存储经过 messagepack 或者 protobuffer 等工具压缩后的二进制数据; 内部实际存储根据 string 的数据特征可采用 int 、 embstr 、 raw 存储;(长度,是否能化为整数等条件,主要是长度)
基础命令
# 设置 key 的 value 值
SET key val
# 获取 key 的 value
GET key
# 执行原子加一的操作
INCR key
# 执行原子加一个整数的操作
INCRBY key increment
# 执行原子减一的操作
DECR key
# 执行原子减一个整数的操作
DECRBY key decrement
# 如果key不存在,这种情况下等同SET命令。 当key存在时,什么也不做
SETNX key value
# 删除 key val 键值对
DEL key
# 设置或者清空key的value(字符串)在offset处的bit值。
SETBIT key offset value
# 返回key对应的string在offset处的bit值
GETBIT key offset
# 统计字符串被设置为1的bit数.
BITCOUNT key
应用
对象存储
常用存储json字符串,或者protobuffer序列化二进制。
SET role:10001 '{["name"]:"mark",["sex"]:"male",["age"]:30}'
GET role:10001
# 固定不变或者几乎不会修改它采用
程序读取后反序列化为对象即可
累加器
# 统计访问数 累计加1
incr accessCount
# 累计加100
incrby accessCount 100
分布式锁
- 排他性
- 定义获取锁行为
- 定义释放锁行为
# 加锁
setnx lock 1
# 释放锁
del lock
位运算
# 月签到功能 10001 用户id 202107 2021年7月份的签到 7月份的第1天
setbit sign:10001:202107 1 1
# 计算 2021年7月份 的签到情况
bitcount sign:10001:202107
# 获取 2021年7月份 第二天的签到情况 1 已签到 0 没有签到
getbit sign:10001:202107 2
list结构以及应用
首尾相接的双向链表,链表首尾操作时间复杂度为O(1) ;查找中间元素时间复杂度为O(n) ;
列表中数据可能会被压缩:
- 元素长度小于 48,不压缩;
- 元素压缩前后长度差不超过 8,不压缩;
基础命令
# 从队列的左侧入队一个或多个元素
LPUSH key value [value ...]
# 从队列的左侧弹出一个元素
LPOP key
# 从队列的右侧入队一个或多个元素
RPUSH key value [value ...]
# 从队列的右侧弹出一个元素
RPOP key
# 返回从队列的 start 和 end 之间的元素 0, 1 2
LRANGE key start end
# 从存于 key 的列表里移除前 count 次出现的值为 value 的元素
LREM key count value
# 它是 RPOP 的阻塞版本,因为这个命令会在给定list无法弹出任何元素的时候阻塞连接
# block right pop
BRPOP key timeout #
应用
栈
LPUSH + LPOP
# 或者
RPUSH + RPOP
队列
LPUSH + RPOP
# 或者
RPUSH + LPOP
异步队列
redis队列存储应用日志,再落盘到ES索引中
类似异步队列,一些后台服务往redis队列里写日志,专门起日志落盘程序,读取redis队列中的日志json字符串(对象),格式化落盘到ES索引中。
阻塞队列(blocking queue)
LPUSH + BRPOP
# 或者
RPUSH + BLPOP
实际应用过程中,需要保证命令的原子性,所以需要使用 lua 脚本或者使用 pipeline 命令 + 事 务;
# 在某些业务场景下,需要获取固定数量的记录;比如获取最近50条战绩;这些记录需要按照插入的先
后顺序返回;
lpush says '{["name"]:"狐金道长", ["text"]:"镇山河!",
["picture"]:["url://image-20230601232741434.jpg", "url://image202306asxx741435.jpg"], timestamp = 1699241288}'
lpush says '{["name"]:"六红军爷", ["text"]:"任驰骋!",
["picture"]:["url://image-20230601134742434.jpg", "url://image20230asff72741436.jpg"], timestamp = 1699241288}'
lpush says '{["name"]:"蹩脚毒萝", ["text"]:"化蝶!",
["picture"]:["url://image-20230601172543434.jpg", "url://image2021060123a41437.jpg"], timestamp = 1699241288}'
lpush says '{["name"]:"sb弓", ["text"]:"我是傻狗",
["picture"]:["url://image-20230601172744678.jpg", "url://image20230601146272741438.jpg"], timestamp = 1699241288}'
# 裁剪最近5条记录 例如聊天记录
ltrim says 0 4
# 获取队列所有内容
lrange says 0 -1
问题
可能会有很多连接去对list进行操作。但是redis是单线程的,只会处理一个命令。但是在这两条命令之间,可能会有别的命令对list进行操作。所以需要保证这两个命令一起执行。
# 裁剪最近5条记录 例如聊天记录
ltrim says 0 4
# 获取队列所有内容
lrange says 0 -1
实际应用过程中,需要保证命令的原子性,所以需要使用 lua 脚本或者使用 pipeline 命令 + 事 务
hash结构以及应用
字典结构,通过 hash 函数来确定节点的位置,很多高级语言包含 这个数据结构,例如 c++ 中 unordered_map,go 语言当中的 map 结构;
基础命令
# 获取 key 对应 hash 中的 field 对应的值
HGET key field
# 设置 key 对应 hash 中的 field 对应的值
HSET key field value
# 设置多个hash键值对
HMSET key field1 value1 field2 value2 ... fieldn valuen
# 获取多个field的值
HMGET key field1 field2 ... fieldn
# 给 key 对应 hash 中的 field 对应的值加一个整数值
HINCRBY key field increment
# 获取 key 对应的 hash 有多少个键值对
HLEN key
# 删除 key 对应的 hash 的键值对,该键为field
HDEL key field
存储结构
当节点数量少的时候且字符串长度小的时候,内部采用压缩列表存储,否则采用字典实现;
10.62.122.23:7002> object encoding MyCart:10001
"ziplist"
应用
存储对象
hmset hash:10001 name qudaodao age 18 sex male
# 与 string 比较
set hash:10001 '{["name"]:"qudaodao",["sex"]:"male",["age"]:18,
["money"]:1000000}'
# 假设现在修改qudaodao的年龄为19岁
# hash:
hset hash:10001 age 19
# string:
get role:10001
# 将得到的字符串调用json.decode解密,取出字段,修改 age 值
# 再调用json加密
set role:10001 '{["name"]:"qudaodao",["sex"]:"male",["age"]:19}'
购物车
# 将用户id作为 key
# 商品id作为 field
# 商品数量作为 value
# 注意:这些物品是按照我们添加顺序来显示的;
# 添加商品:
hset MyCart:10001 40001 1
lpush MyItem:10001 40001
# 增加数量:
hincrby MyCart:10001 40001 1
hincrby MyCart:10001 40001 -1 // 减少数量1
# 显示所有物品数量:
hlen MyCart:10001
# 删除商品:
hdel MyCart:10001 40001
lrem MyItem:10001 1 40001
# 获取所有物品:
lrange MyItem:10001
# 40001 40002 40003
hget MyCart:10001 40001
hget MyCart:10001 40002
hget MyCart:10001 40003
相关文章:

golang工程中间件——redis常用结构及应用(string, hash, list)
Redis 命令中心 【golang工程中间件——redisxxxxx】这些篇文章专门以应用为主,原理性的后续博主复习到的时候再详细阐述 string结构以及应用 字符数组,redis字符串是二进制安全字符串,可以存储图片等二进制数据,同时也可以存…...

Java中数据结构(基本数据类型+引用数据类型)介绍+整理+例子+对比
一、Java数据类型分类 在Java中,数据类型可以分为两大类:内置数据类型(Primitive Data Types)和引用数据类型(Reference Data Types)。 **内置数据类型(Primitive Data Types)**是…...

SpringSecurity原理
Spring Security是Spring框架中的一个安全性框架,用于保护Web应用程序。以下是Spring Security的工作原理: 1.认证 认证是指验证用户身份。Spring Security使用过滤器链来拦截用户的请求。在对请求进行处理之前,它需要对用户进行认证。Spri…...

云表平台突破传统,企业级低代码让软件开发速度提升
随着数字化进程的加速推进,软件开发效率和成本的要求也在日益提高。在这个背景下,低代码技术的出现为企业软件开发提供了新的解决方案。低代码开发平台以其简单易用、高效灵活的特点,已经成为各行各业企业进行应用开发的首选工具。 企业中低代…...

三数之和(双指针)
15. 三数之和 - 力扣(LeetCode) 题目描述 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三…...

Linux-bluetooth蓝牙
蓝牙配对和蓝牙连接 蓝牙配对是指在两个蓝牙设备之间建立一种安全的关系,以确保只有已经通过授权的设备才能进行通信。在蓝牙配对过程中,设备之间将共享一个加密密钥,用于保护数据传输的安全性。通常需要在设备上输入一个PIN码或者进行手动确…...

mediasoup webrtc音视频会议搭建
环境ubuntu22.10 nvm --version 0.33.11 node -v v16.20.2 npm -v 8.19.4 node-gyp -v v10.0.1 python3 --version Python 3.10.7 python with pip: sudo apt install python3-pip gcc&g version 12.2.0 (Ubuntu 12.2.0-3ubuntu1) Make 4.2.1 npm install mediasoup3 sudo …...

【操作系统】操作系统的大端模式和小端模式
什么是大端模式、小端模式? 所谓的大端模式,是指数据的低位保存在内存的高地址中,而数据的高位保存在内存的低地址中; 所谓的小端模式,是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地…...

Oracle(13)Maintaining Data Integrity
目录 一、基础知识 1、Data Integrity 数据库的完整性 2、Types of Constraints 约束类型 3、Constraint States 约束状态 4、Guidelines for Constraints 约束准则 二、基础操作 1、Enabling Constraints 启用约束 2、命令方式创建约束 3、修改表创建的约束 4、删除约…...

工程(十二)Ubuntu20.04LSD_SLAM运行
博主创建了一个科研互助群Q:772356582,欢迎大家加入讨论。这是一个科研互助群,主要围绕机器人,无人驾驶,无人机方面的感知定位,决策规划,以及论文发表经验,以方便大家很好很快的科研…...

跨境电商,用指纹浏览器还是VPS?有何区别?
目前做跨境电商的小伙伴基本都是选择vps或者指纹浏览器来防关联。不过随着指纹浏览器的普及,越来越多人选择使用指纹浏览器,还没了解过指纹浏览器的小伙伴可能还在犹豫,vps和指纹浏览器到底哪个更好呢? Vps就是一个虚拟服务器&…...

R语言piecewiseSEM结构方程模型在生态环境领域实践技术应用
结构方程模型(Sructural Equation Modeling,SEM)可分析系统内变量间的相互关系,并通过图形化方式清晰展示系统中多变量因果关系网,具有强大的数据分析功能和广泛的适用性,是近年来生态、进化、环境、地学、…...

一站式解决方案:体验亚马逊轻量服务器/VPS的顶级服务与灵活性
文章目录 一、什么是轻量级服务器/VPS 二、服务器创建步骤 三、服务器连接客户端(私钥登录) 四、使用服务器搭建博客网站 五、个人浅解及总结 一、什么是轻量级服务器/VPS 亚马逊推出的轻量级服务器/VPS:是一种基于云计算技术的虚拟服务器解决方案。它允许用户…...

pda条码二维码扫描数据采集安卓手持终端扫码热敏标签打印一体机
HT800新一代移动物联终端是深圳联强优创信息科技有限公司自主研发的基于Android11操作系统的高性能、高可靠的工业级手持数据终端,能与其它设备进行无线通讯,提供良好的操作界面,支持条码扫描、RFID读写(NFC)、GPS定位…...

白上这么多年班,才知道数据可视化这么简单
写编程整理数据、做数据可视化分析,不仅难度大、易僵化,还效率低,不能及时响应业务的数据分析需求。那怎么办?换个BI数据可视化工具,套用BI方案,数据分析模型、BI数据可视化分析报表都一应俱全,…...

伊朗黑客对以色列科技和教育领域发起破坏性网络攻击
导语 近期,以色列的高等教育和科技领域遭受了一系列破坏性的网络攻击。这些攻击始于2023年1月,旨在部署以前未记录的数据清除恶意软件。在最近的攻击中,攻击者试图窃取个人身份信息和知识产权等敏感数据。本文将介绍这些攻击的具体细节&#…...

前端初始化项目切换镜像命令
不切换成国内镜像容易出现: idealTree:moni: sill idealTree buildDeps 一直卡着 命令如下: 一、 npm config get registry,查看当前镜像地址 二、出现 https://registry.npmjs.org/ 则表示在国外 三、使用以下命令切换成国内阿里…...

Springboot中解析JSON字符串(jackson库ObjectMapper解析JSON字符串)
1、ObjectMapper与JSONObject比较 1、ObjectMapper属于jackson库的一部分,JSONObject属于alibaba的fastjson,两者各有优劣,可根据自己的系统环境选择使用哪种技术。 2、目前来看,Jackson社区相对活跃,Spring MVC和Spring Boot都…...

QtC++与QToolButton详解
介绍 QToolButton 是 Qt 中的一个控件类,用于创建工具按钮,它有以下主要作用和特点: 工具按钮: QToolButton 用于创建工具按钮,允许用户执行各种操作,如启动功能、弹出菜单、打开文件等。工具按钮通常用于…...

Vue创建浅层响应式数据
shallowReactive:只处理对象第一层数据的响应式(浅响应式)。 shallowRef:只处理基本数据类型的响应式,不处理对象类型的响应式。 shallowReactive 适用于:如果有一个对象类型的数据,结构比较深…...

【Python 千题 —— 基础篇】判断列表是否为空
题目描述 题目描述 编写一个程序,给出一个列表,判断该列表是否为空。如果该列表为空,输出 “The list is empty”;如果不为空,输出 “The list is not empty”。 输入描述 无输入。 输出描述 根据该列表是否为空…...

基于Java+SpringBoot+Mybaties-plus+Vue+ElementUI 失物招领小程序 设计与实现
一.项目介绍 失物招领小程序 用户登录、忘记密码、退出系统 发布失物 和 发布招领 查看我发布的失物和招领信息 失捡物品模块可以查看和搜索所有用户发布的信息。 二.环境需要 1.运行环境:java jdk1.8 2.ide环境:IDEA、Eclipse、Myeclipse都可以&#…...

找到【SVM】中最优的惩罚项系数C
因为本来SVM是想找到间隔最大的分割面,所以C越大,SVC会选择边际更小的,能够更好的分类所有训练点的决策边界,不过模型的训练时间也会越长。如果C的设定值较小,那SVC会尽量最大化边界,决策功能会更简单&…...

Go 面向对象,多态
面向对象 工程结构 新建一个oop.go package _oop // Package _oop 引用名称import ("fmt""strconv" )// GIRL 常量 const (// GIRL 自增GIRL Gender iotaFIRSTSECONDTHIRD )type Gender uint8 // 无符号的8位整数类型// User 结构体 type User struct…...

Anaconda如何创建一个环境
activate env_name 激活环境,env_name:环境名 deactivate env_name 激活环境 conda list …...

【gerrit】【技巧】如何获取gerrit库入库统计信息之三——gerrit搜索之时间过滤条件
🐚作者简介:花神庙码农(专注于Linux、WLAN、TCP/IP、Python等技术方向)🐳博客主页:花神庙码农 ,地址:https://blog.csdn.net/qxhgd🌐系列专栏:善假于物&#…...

wpf Grid布局详解 `Auto` 和 `*` 是两种常见的设置方式 行或列占多个单元格,有点像excel里的合并单元格。使其余的列平均分配剩余的空间
比如只有行的界面 <Window x:Class"GenerateTokenApp.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.microsoft.com/exp…...

js 高效生成连续递增的小数数组
简介 JavaScript 按照指定间隔生成连续递增的数组。 1. 循环生成 function generateIncrementalArray(start, end, step) {const result [];for (let i start; i < end; i step) {result.push(parseFloat(i.toFixed(1))); // 使用 toFixed() 方法限定小数位数}return r…...

『昆仑天工』4款AI产品开源!提供API对接!
在文章开篇,小圈先介绍下 昆仑万维 公司旗下的AI大模型**『天工』**,它是由昆仑万维自研的双千亿级大语言模型, 也是国内首个对标ChatGPT的双千亿级大语言模型,可满足文案创作、知识问答、代码编程、逻辑推演、数理推算等需求。 …...

C语言--每日五道选择题--Day2
第一题: 1、有如下代码,则 *(p[0]1) 所代表的数组元素是( ) int a[3][2] {1, 2, 3, 4, 5, 6}, *p[3]; p[0] a[1]; A: a[0][1] B: a[1][0] C: a[1][1] D: a[1][2] 答案及解析:C 首先要明确p是一个指针数组 p[0] a[…...