Redis常见命令和使用示例

目录

1.使用官方文档学习redis

2.核心命令

SET

GET

3.全局/通用命令

KEYS

EXISTS

DEL

EXPIRE

TTL

TYPE


1.使用官方文档学习redis

redis官网

 点击搜索,输入,比如输入ping,会显示Commands,是一个命令,点击ping,跳转到用法页面

有详细的解释

 左侧有非常多的命令可供学习,也有中文文档

2.核心命令

注意:redis的命令不区分大小写  

先进入redis-cli,才能输入redis命令

[root@localhost redis]# redis-cli
127.0.0.1:6379> 
127.0.0.1:6379> 
127.0.0.1:6379> 
127.0.0.1:6379> 

此时进入了redis-cli

get/set  这是redis最核心的两个命令。

SET

功能:存储K-V 。set可以填写两个参数(key-value),参数类型必须是字符串

127.0.0.1:6379> set 提示:key value [expiration EX seconds|PX milliseconds] [NX|XX]127.0.0.1:6379> set key1 value1
OK
127.0.0.1:6379> 

对于上述key-value,不需要加“”就是表示字符串的类型,给他们加上双引号或单引号都可以

[root@localhost redis]# redis-cli
127.0.0.1:6379> set key2 value2
OK
127.0.0.1:6379> set "key3" "value3"
OK

GET

功能:根据K获取V。get 后跟key,就可以得到value,并且是带双引号,是字符串类型的。如果不存在key,就会返回nil,和null一个意思

127.0.0.1:6379> get key1
"value1"
127.0.0.1:6379> get key3
"value3"
127.0.0.1:6379> get key100
(nil)

3.全局/通用命令

redis支持很多数据结构,整体上来说是键值对结构,k固定是字符串,v可以有多种类型,最常见的:字符串,哈希表,列表,集合,有序集合。都是value上的变化

操作不同的数据结构,都会有不同的命令

还有一些命令,在这些数据结构上都能使用,称作全局命令

KEYS

功能:用来查询当前服务器上匹配的key,通过一些特殊符号(通配符),用来描述key的模样,匹配上述摸样的key就能被查询出来

命令语法: :KEYS pattern(样式、模式,描述字符串的模样)

示例:

*:匹配任意字符序列(包括空字符序列)。KEYS * 匹配所有的键。

127.0.0.1:6379> KEYS *
1) "key3"
2) "key1"
3) "key2"
127.0.0.1:6379> 

?:匹配单个字符。KEYS key? 匹配以 "key" 开头,并且后面跟着一个字符的键,如 "key1"、"keyA"。

127.0.0.1:6379> KEYS key?
1) "key3"
2) "key1"
3) "key2"

[character]:匹配在括号内的任一字符。KEYS key[123] 匹配以 "key" 开头,并且后面跟着 "1"、"2" 或 "3" 的键,如 "key1"、"key2"、"key3"。

127.0.0.1:6379> KEYS key[123]
1) "key3"
2) "key1"
3) "key2"

[range]:匹配在范围内的任一字符。KEYS key[1-5] 匹配以 "key" 开头,并且后面跟着小写字母的键,如 "key1"、"key2"、"key3"。

127.0.0.1:6379> KEYS key[1-5]
1) "key3"
2) "key1"
3) "key2"

[^characters]:匹配不在括号内的任一字符。KEYS key[^abc] 匹配以 "key" 开头,并且后面跟着一个非 "a"、"b" 或 "c" 的字符的键。

127.0.0.1:6379> KEYS key[^123]
(empty list or set)
127.0.0.1:6379> KEYS key[^abc]
1) "key3"
2) "key1"
3) "key2"

\<prefix>*:匹配以指定前缀开头的键。KEYS prefix* 匹配以 "prefix" 开头的键,如 "prefix123"、"prefixabc"。

127.0.0.1:6379> KEYS key1
1) "key1"
127.0.0.1:6379> KEYS key*
1) "key3"
2) "key1"
3) "key2"

*\<suffix>:匹配以指定后缀结尾的键。KEYS *suffix 匹配以 "suffix" 结尾的键,如 "abcsuffix"、"defsuffix"。

127.0.0.1:6379> KEYS *3
1) "key3"

注意事项:keys 的时间复杂度是O(N),需要遍历所有的键,然后匹配出符合要求的键。因此再生产环境(线上环境,用户可以访问到的)下一般禁止使用keys,尤其是keys*,keys*是匹配redis中以keys开头的所有键,由于生产环境中key非常多,redis是一个单线程的服务器,就会导致执行keys*时间非常长,那么redis服务器就被阻塞,无法为其它客户端提供服了!会给用户体验造成影响

redis的一个经典用途就是作为数据冷热分离的热点数据缓存,热点数据首先是去查redis的,如果redis被阻塞了,此时其它的查询redis操作就超时了,此时这些请求只能去查数据库了,大量的数据同时请求数据库的查询,可能会导致过载,数据库也无法正常提供服务了,整个系统基本就处于瘫痪状态。

EXISTS

功能:用于检查给定键是否存在于数据库中。接受一个或多个键作为参数,并返回存在的键的数量。时间复杂度:O(1)

命令语法: :EXISTS key [key ...]

示例: 

EXISTS  key1:检查单个键key1是否存在,存在返回1

127.0.0.1:6379> EXISTS key1
(integer) 1
127.0.0.1:6379> EXISTS key2
(integer) 1
127.0.0.1:6379> EXISTS key3
(integer) 1

EXTIST key1 key2 ley3:同时检查多个键是否存在.返回存在的键的数量

127.0.0.1:6379> EXISTS key1 key2 key3
(integer) 3

注意:redis是一个基于客户端-服务器,通过网络通信的中间件。因此上述分开查询key是否存在和同时检查多个键是否存在是有区别的

同时检查多个键是否存在:

 单独检查多个键是否存在:

可以看出,分开的写法,会产生更多轮次的请求响应,也即网络通信。和直接操作内存来说,网络通信成本比较高,效率比较低

所以redis支持一个命令能操作多个key,减少网络通信。还提供了其它的机制来提高网络通信的效率

DEL

功能:删除指定的key

和EXISTS命令相同,也可以支持操作多个key

时间复杂度:O(1). 返回删除key的个数

命令语法: DEL key [key......]   

示例: 

 删除key4,key5

127.0.0.1:6379> set key4 1
OK
127.0.0.1:6379> set key5 1
OK
127.0.0.1:6379> del key4 key5
(integer) 2

这里的删除,和mysql中的删库删表来说危险性比较低, 作为缓存,如果丢失少量的数据,问题不大,但是如果丢失大批的数据,musql就会过载,导致系统瘫痪。mysql不能丢失数据,丢失了数据就查不到了。

EXPIRE

功能:用于为键设置过期时间。接受两个参数:键和以为单位的过期时间

设置键的过期时间  过期时间到达后,该键将自动被删除。

key必须已经存在,设置成功返回1,失败返回0.  时间复杂度:O(1)

命令语法: EXPIRE  key  seconds   

127.0.0.1:6379> set key6 1
OK
127.0.0.1:6379> expire key6 5
(integer) 1
127.0.0.1:6379> get key5
(nil)

基于redis实现的分布式锁,为了避免 出现不能正确解锁的情况,加锁时通常会设置一个过期时间,自动解锁。

TTL

功能:检查键的过期时间 

返回名为"key"的键的剩余过期时间,以秒为单位。如果键不存在或者没有设置过期时间,则返回-1。如果键已经过期,则返回-2。时间复杂度:O(1)

命令语法: TTL key 

示例: 

127.0.0.1:6379> set key7 1
OK
127.0.0.1:6379> expire key7 15
(integer) 1
127.0.0.1:6379> ttl key7
(integer) 10
127.0.0.1:6379> ttl key7
(integer) 1
127.0.0.1:6379> ttl key7
(integer) -2
127.0.0.1:6379> ttl key1
(integer) -1

redis的过期策略是如何实现的?

不能直接整体便利key,效率非常低,redis整体策略是:定期删除和惰性删除
定期删除:每次抽取一部分进行验证过期时间。保证抽取检查过程足够快。为了避免一次性删除大量过期键导致服务器阻塞,Redis将每次执行的删除数量限制在一个较小的范围内。

惰性删除:当客户端尝试访问一个键时,Redis会检查该键是否已过期。如果键已过期,则会立即删除该键并返回空结果。

通过惰性过期和定期过期策略的结合,Redis可以高效地管理键的过期,并保持内存的合理使

TYPE

功能:用于获取指定键的数据类型

可能返回的结果:none  string  list  hash  set  zset  stream(redis作为消息队列的时候,使用这个各类型的value)  时间复杂度:O(1)

命令语法: TYPE key

示例: 

返回值为"string",表示键"mykey"的数据类型是字符串(String)。
127.0.0.1:6379> type mykey
string返回值为"list",表示键"mylist"的数据类型是列表(List)。
127.0.0.1:6379> LPUSH mylist "value"
(integer) 1
127.0.0.1:6379> type mylist
list返回值为"set",表示键"myset"的数据类型是集合(Set)。
127.0.0.1:6379> SADD myset "value"
(integer) 1
127.0.0.1:6379> type myset
set返回值为"hash",表示键"myhash"的数据类型是哈希(Hash)。
127.0.0.1:6379> HSET myhash field "value"
(integer) 1
127.0.0.1:6379> type myhash
hash返回值为"zset",表示键"myzset"的数据类型是有序集合(Sorted Set)。
127.0.0.1:6379> ZADD myzset 1 "value"
(integer) 1
127.0.0.1:6379> type myzset
zset返回值为"nil",表示键"nonexistingkey"不存在。
127.0.0.1:6379> TYPE nonexistingkey
none

 

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

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

相关文章

「深度学习之优化算法」(十二)水波算法

1. 水波算法简介 (以下描述,均不是学术用语,仅供大家快乐的阅读)   水波算法(Water wave optimization)是根据水波理论提出的优化算法。什么是水波理论?简单来说就是水波的宽度越小,其频率越高,频率与水波宽度的平方根成反比(具体细节我也不懂,物理方面的)。水波…

Spring AOP

Spring AOP &#x1f50e;定义&#x1f50e;AOP 的组成切面(Aspect)切点(Pointcut)通知(Advice)连接点(Join Point)总结 &#x1f50e;Spring AOPSpring AOP 的创建Spring AOP 的使用切点表达式Spring AOP 的实现原理 &#x1f50e;&#x1f338;&#x1f338;&#x1f338;完结…

报名开启 | DolphinDB 粉丝节,与你相约上海

作为量化爱好者&#xff0c;你是否在寻找更多志同道合的朋友&#xff1f; 作为技术达人&#xff0c;想探索因子挖掘、深度学习、AI领域的前沿技术&#xff1f; 7月22日 机会来了&#xff01; DolphinDB 首届线下粉丝节将于7月22日下午在上海举行&#xff01; 来现场&#xf…

面向对象进阶一(static,继承,多态)

面向对象进阶一 一、static二、继承2.1 继承的定义和特点2.2 继承内容、成员变量和成员方法的访问特点2.2.1继承内容2.2.2 成员变量的访问特点2.2.3 成员方法的访问方法、方法的重写 2.3 继承中构造方法的访问特点 三、this、super使用总结四、多态4.1 多态的基本概念4.2 多态调…

系统架构设计师-软件工程(4)

一、软件测试 1、软件测试类型&#xff08;动态测试 / 静态测试&#xff09; ● 动态测试【计算机运行】 &#xff08;1&#xff09;白盒测试法【结构测试】&#xff1a;主要用于单元测试阶段。 a&#xff1a;控制流测试【逻辑覆盖测试&#xff08;语句覆盖最弱&#…

PHY芯片的使用(三)在U-boot下网络PHY的移植

1、概述 以太网 PHY 驱动移植&#xff0c;主要包括 Linux、 u-boot 及设备树等三个方面标准框架下的移植。本文以裕太8511PHY为例展开说明。一般国产芯片厂商会提供在uboot/linux下PHY的驱动。在uboot/linux的PHY框架是有区别的&#xff0c;这点要注意。 YT8511 PHY 驱动的移…

【C语言初阶(14)】扫雷游戏(优化:标记地雷+自动展开)

文章目录 Ⅰ游戏规则Ⅱ 游戏实现思路Ⅲ 游戏实现步骤⒈菜单界面⒉创建棋盘① 创建两个棋盘② 防止数组越界 ⒊棋盘初始化⒋棋盘的打印⒌布置地雷⒍玩家排查雷实现步骤⒎计算 x&#xff0c;y 周围有多少雷⒏展开非雷区⒐标记地雷⒑取消标记 Ⅳ 模块化代码实现⒈test.c⒉game.h⒊…

6.1Java EE——Spring介绍

一、Spring概述 String框架的核心技术 Spring是由Rod Johnson组织和开发的一个分层的Java SE/EE一站式&#xff08;full-stack&#xff09;轻量级开源框架。它最为核心的理念是IoC&#xff08;控制反转&#xff09;和AOP&#xff08;面向切面编程&#xff09;&#xff0c;其中&…

《前端开发 实践之 腾讯地图API 学习》

目录 腾讯地图基础入门方式一方式二 事件监听监听地图瓦片加载完成事件 移除缩放控件 & 旋转控件 & 比例尺控件初始化marker图层创建信息窗点击地图拾取坐标打点标记反解析成详细地址根据输入详细地址 反解析成经纬度 腾讯地图 腾讯地图API学习-官方地址&#xff1a;ht…

RabbitMQ系列(14)--Topics交换机的简介与实现

1、Topics交换机的介绍 Topics交换机能让消息只发送往绑定了指定routingkey的队列中去&#xff0c;不同于Direct交换机的是&#xff0c;Topics能把一个消息往多个不同的队列发送&#xff1b;Topics交换机的routingkey不能随意写&#xff0c;必须是一个单词列表&#xff0c;并以…

23款奔驰GLE450动感型升级柏林之声音响系统,体验不一样的感觉

奔驰GLE450动感型升级柏林之声的音响效果自然非同凡响&#xff0c;在人声、交响乐音乐厅感受方面都有非常逼真的现场感受&#xff0c;结合柏林之声的界面调整&#xff0c;可以在不同方位体验的高保真的音乐之享&#xff01; 小柏林音响总共13个喇叭1台功放由4个高音、4个中音、…