Redis研学-五种基本类型的常用命令

一 String一些命令

flushdb//清空当前库的所有key
flushall//清空所有库
move name 1//将name 自本数据库移动到1号数据库
expire name 10//name 10秒过期
exists name//name  是否存在
ttl name//name 剩余时间
type name//查看当前key的类型
append name hello//为name的value追加hello字符串 若name不存在 则相当于set 返回为字符串的长度
strlen name//获取当前字符串长度
set name longs//设置值
get name//获得值
keys *//获得所有key
incr age//自动加1
decr age//自动减1
incrby age 10//+10(步长)
decrby age 10//-10
getrange name 0 3//获取字符串的区间子串(从0开始)
getrange name 0 -1//获取全部的字符串
setrange name 1 xx//替换从1开始 adbc→axxc
setex name 30 long//设置name过期时间30秒(set with expire)
setnx name hai//若name不存在设置value为hai 存在则创建失败(分布式锁常用)(set if not exist)
mset k1 v1 k2 v2//批量设置
mget k1 k2//批量获取
msetnx k1 v1 k3 v3//若有一个重复的key存在则整体设置失败(k3也失败)(原子性操作一起成功或者一起失败)
set user:1 {name:zhangsan,age:3}//设置user:1对象 值为json格式的{name:zhangsan,age:3}
//这种设计可以做到细粒度的查询,如果对象有很多属性但只需要读取其中一个属性,不用返回整个json对象
mset user:1:name zhangsan user:1:age 2//设置两个属性
getset name long//如果不存在值,则返回nil 同时将name设置好值 若存在则不会覆盖value

String应用场景:value除了是我的的字符串还可以是我们的数字

  • 计数器
  • 统计多单位的数量
  • 粉丝数
  • 对象缓存存储

二 List一些命令-队列 栈 阻塞队列

//所有的list命令都是以l开头的
lpush list one//123的顺序存入list
lpush list two//将一个或多个值插入列表头部(左)
lpush list three//插入list的值可以重复
lrange list 0 -1//0 -1取出所有 类似栈 顺序为321
lrange list 0 1//区间取值 three two 类似栈
rpush list four//将一个或多个值插入列表尾部(右) lrange顺序为 3214
lpop list//移除list的第一个元素three (左)
rpop list//移除list的最后一个元素four (右) 
lindex list 1//通过下标获取值(从0开始) one
llen list//获取链表的长度
lrem list 1 one//移除指定的集合中的1个值(one)改为2就是移除两个one(可以多于实际数量不报错)
ltrim list 0 4//修剪集合 集合只保留修剪后的值 该list已经被改变
rpoplpush list newlist//移除列表最后一个元素(栈底) 并移动到新的列表中
lset list 0 item//指定列表下标赋值 更新操作(列表要存在) 若有值则覆盖 没有值则报错
exists list//判断列表是否存在
clear//清空cmd 看着整洁  入栈顺序与lrange查询的数据是相反的(lrange从栈顶往下数)
linsert list before 1 5//向指定值的后面插入值(右边) list原来为123 之后为1523(入栈顺序)
linsert list after 1 7//向指定值的前面插入值(左边) 71523 有重复会按顺序插在最近的后面

List:实际上是一个链表,before Node after,left,right都可以插入值

  • key不存在,创建新的链表
  • key存在,新增内容
  • 如果移除了所有值,空链表也代表不存在
  • 在两边插入或改动值效率最高,中间元素相对来说效率会低一点
  • 消息排队 消息队列(Lpush Rpop),栈(Lpush Lpop)

三 set(集合)一些命令:值不能重复

sadd test 2233//添加test集合2233(value)
smembers test//查看test集合元素
sismember test 2233//判断value是否在集合中存在2233 有返回1没有返回0
scard test//获取数据元素个数
srem test 2233//移除集合中的指定元素
srandmember test//随机获取集合中的一个元素 srandmember test 2获取2个
spop test//随机删除一些set集合中的元素
smove test test1 111//移动指定值到另一个set集合中 test中111移动test1中
sdiff key1 key2//返回第一个集合与其他集合的差异 第一个集合(key1)中的独有元素
sinter key1 key2//取两个集合的交集 例如共同好友
sunion key1 key2//取两个集合的并集

set应用场景:微博a用户将所有关注的人放在一个set集合中(不会重复),将他的粉丝也放在一个集合中,共同关注,共同爱好,二度好友,推荐好友(六度分割理论)

四 Hash(哈希)一些命令:

map集合,key-map集合→key-<key-value>,此时的值是map集合 哈希更适合存对象 string适合字符串
hset hash q1 w1//set一个具体的key-value <hash,<q1,w1>>
hget hash q1//获取一个字段值
hmset myhash q2 w2 q3 w3//设置多个kv
hmget myhash q2 q3//获取多个字段值
hgetall myhash//获取全部的数据(kv都要)结果为:1.q2 2.w2 3.q3 4.w3
hdel myhash q2//删除hash指定的字段q2 对应的value也会被删除
hlen myhash//获取当前hash表的键值对长度
hexists myhash q3//判断hash中指定字段是否存在
hkeys myhash//获得所有字段(q2,q3)
hvals myhash//获得所有value(w2,w3)
hset myhash q4 4//设置<hash,<q4,4>>
hincrby myhash q4 1//q4自增1(也可以是其他数字 正负都行)指定增量
hsetnx myhash q3 w3//不存在则创建成功,存在则创建失败

hash变更的数据user name age,尤其是用户信息之类的,经常变动的信息,hash更适合对象的存储,String更适合字符串存储

五 Zash(有序集合)一些命令:

在set的基础上增加了一个值,zset k1 score1 v1(通过score1进行排序)

zadd myset 1 one//添加一个值 (k1 score1 v1)
zadd myset 2 two 3 three//添加多个值
zrange myset 0 -1//获取所有值(由小到大)
zrevrange salary 0 -1//获取所有值(由大到小)
zadd salary 2500 xiaohong//xiaohong发了2500工资
zadd salary 5000 zhangsan//zhangsan发了5000工资
//工资排序 -inf +inf为负无穷到正无穷(由小到大) 是一个数值范围 返回为:1xiaohong 2zhangsan
zrangebyscore salary -inf +inf
//带上工资(score)显示 xiaohong 2500 zhangsan 5000 默认为闭区间 使用开区间需要加半边括号(
zrangebyscore salary -inf +inf withscores
//工资排序由大到小要使用zrevrangebyscore salary 7000 1 (withscores仍然可用)例:(5 (10
zrevrangebyscore salary 7000 1
zrem salary xiaohong//移除有序集合中的指定元素
zcard salary//获取有序集合中的个数
zcount salary 1 7000//获取指定区间的成员数量 闭区间

可以进行工资表排序,或带权重判断(普通消息1,重要消息2),排行榜应用实现,取topN测试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/196620.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python如何在多线程中使用异步

这是一个异步爬虫&#xff0c;上代码 headers {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}async def fetch(url, semaphore):async with semaphore:async w…

【Linux】初识云服务器 -- 使用 XShell 远程登录 Linux

Linux 是一款企业级后台操作系统&#xff0c;命令行方式交互&#xff0c;开源。 搭建属于自己的 Linux 服务器&#xff1a;我是直接选择购买的腾讯云轻量级服务器&#xff08;CentOS 7.6&#xff09;&#xff0c;不贵又相对方便&#xff0c;可以直接上手使用&#xff0c;不需要…

Elasticsearch:为现代搜索工作流程和生成式人工智能应用程序铺平道路

作者&#xff1a;Matt Riley Elastic 的创新投资支持开放的生态系统和更简单的开发者体验。 在本博客中&#xff0c;我们希望分享 Elastic 为简化你构建 AI 应用程序的体验而进行的投资。 我们知道&#xff0c;开发人员必须在当今快速发展的人工智能环境中保持灵活性。 然而&a…

JavaEE之多线程编程(一):基础篇

文章目录 一、关于操作系统一、认识进程 process二、认识线程三、进程和线程的区别&#xff08;重点&#xff01;&#xff09;四、Java的线程和操作系统线程的关系五、第一个多线程编程 一、关于操作系统 【操作系统】 驱动程序&#xff1a; 如&#xff1a;我们知道JDBC的驱动程…

Python 潮流周刊#29:Rust 会比 Python 慢?!

△请给“Python猫”加星标 &#xff0c;以免错过文章推送 你好&#xff0c;我是猫哥。这里每周分享优质的 Python、AI 及通用技术内容&#xff0c;大部分为英文。本周刊开源&#xff0c;欢迎投稿[1]。另有电报频道[2]作为副刊&#xff0c;补充发布更加丰富的资讯。 &#x1f43…

【数据结构】手撕排序NO.1

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《Linux》《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 文章目录 一、排序的概念及其运用1.1 排序的概念1.2 常见的算法排序 二、 冒泡排序三、直接插入排…

【电源专题】什么是电源管理

电源管理为什么重要? 在电子系统和电路的设计中,负载往往需要恒定的电流电压,所以最先考虑的就是电源电路的设计。电源管理所考虑的问题是如何将电源有效分配给系统的不同组件,保障系统不同的负载正常运行。 如电源的输入是交流 (AC) 或直流 (DC)?输入电压是高于或低于输…

RedHat8 安装部署DzzOffice协同办公平台+onlyoffice(docker)以及问题解决(亲测可用,花费2天)

一、基础配置(MysqlDzzoffice) 1&#xff1a;安装软件需要的环境&#xff0c;我们用LAMP的环境。基本上CentOS8自带的软件版本都达到安装DzzOffice的要求。 2&#xff1a;关闭防火墙&#xff08;不关的话需要开放80端口自行决定&#xff09;。 systemctl disable --now fire…

HarmonyOS引入其他包,以引入请求axios为例

安装文件 安装文件位置: 总目录的oh-package.json5文件 dependencies&#xff1a;生产环境–上线运行时候必须需要的包 devDependencies&#xff1a;开发环境–开发适合为了方便提高效率的包。 包管理工具 OHPM CLI 作为鸿蒙生态三方库的包管理工具&#xff0c;支持OpenHar…

python3实现对neo4j图数据库的增删改查操作

可以使用 neo4j Python 驱动程序来执行对 Neo4j 数据库的增删改查操作。首先&#xff0c;确保已经安装了 neo4j Python 驱动程序。 pip install neo4j具体实现代码如下&#xff1a; from neo4j import GraphDatabase# 连接到 Neo4j 数据库 uri "bolt://localhost:7687&…

Facebook引流怎么做?写个脚本就好!

在当今的数字化时代&#xff0c;流量对于任何一个网站或应用程序来说都至关重要&#xff0c;Facebook&#xff0c;作为全球最大的社交网络平台&#xff0c;无疑是一个获取流量的绝佳场所&#xff0c;但是&#xff0c;如何有效地从Facebook引流呢?写个脚本就好了! 在本文中&am…

Python字符串模糊匹配工具:TheFuzz 库详解

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 在处理文本数据时&#xff0c;常常需要进行模糊字符串匹配来找到相似的字符串。Python的 TheFuzz 库提供了强大的方法用于解决这类问题。本文将深入介绍 TheFuzz 库&#xff0c;探讨其基本概念、常用方法和示例代…

什么是Overlay网络?Overlay网络与Underlay网络有什么区别?

你们好&#xff0c;我的网工朋友。 在传统历史阶段&#xff0c;数据中心的网络是以三层架构&#xff08;核心、汇聚、接入&#xff09;为基本标准。 但是随着技术的发展&#xff0c;不同的厂家有不同的组建方式&#xff0c;比如说在核心层、汇聚层和接入层增加虚拟化技术。 …

Maven项目目录结构

项目结构 目录说明.ideaIDEA工具的配置文件.mvn用于运行Maven项目src源码文件夹target字节码文件夹.gitignore配置git忽略文件HELP.md自述文件mvnw运行Maven命令&#xff08;Linux&#xff09;mvnw.cmd运行Maven命令&#xff08;Windows&#xff09;pom.xml依赖管理文件 如图…

从零开始入门Zapier:与ChatGPT双剑合璧,手把手教程让你进入AI与自动化新纪元

coments 1. 1. 打开Zapier的官方界面 登录之后&#xff0c;会出现一个调查表&#xff0c;可以根据自己的情况进行选择。 第一次注册成功&#xff0c;会送你14天的免费体验

经验分享|MySQL分区实战(RANGE)

概述 分区概述 在 MySQL 中&#xff0c; InnoDB存储引擎长期以来一直支持表空间的概念。在 MySQL 8.0 中&#xff0c;同一个分区表的所有分区必须使用相同的存储引擎。但是&#xff0c;也可以为同一 MySQL 服务器甚至同一数据库中的不同分区表使用不同的存储引擎。 通俗地讲…

网络初识:局域网广域网网络通信基础

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、局域网LAN是什么&#xff1f;二、广域网是什么&#xff1a;三. IP地址四.端口号五.认识协议5.1五元组 总结 前言 一、局域网LAN是什么&#xff1f; 局域网…

flask web开发学习之初识flask(三)

文章目录 一、flask扩展二、项目配置1. 直接配置2. 使用配置文件3. 使用环境变量4. 实例文件夹 三、flask命令四、模版和静态文件五、flask和mvc架构 一、flask扩展 flask扩展是指那些为Flask框架提供额外功能和特性的库。这些扩展通常遵循Flask的设计原则&#xff0c;易于集成…

CUDA简介——Grid和Block内Thread索引

1. 引言 前序博客&#xff1a; CUDA简介——基本概念CUDA简介——编程模式CUDA简介——For循环并行化 Thread Index&#xff1a; 每个Thread都有其thread index。 在Kernel中&#xff0c;可通过内置的threadIdx变量来获取其thread index。threadIdx为三维的&#xff0c;有相…