Redis常见的全局命令

Redis中最核心的两个命令set和get

两个最核心的命令就是get和set.

redis是按照键值对的方式来存储数据的,所以set就表示把key-value存储进去,get表示根据key来查询对应的value.

需要注意的是,必须进入redis客户端才能输入redis命令.

此处的key和value都是字符串类型.对于上述的key和value不需要加上引号就是表示字符串类型.如果要给key和value加上引号也是可以的,单引号和双引号都可以.

redis中的命令是不区分大小写的.

redis支持多种数据类型是针对value来说的.

redis自身的键值对是通过哈希表的方式来组织的.

get命令直接输入key就能得到value,如果key不存在,就会返回nil(就是null 的意思).


Redis的全局命令

redis是支持多种数据结构的.redis是键值对的结构,key固定就是字符串,而value会有多种数据类型,比如字符串,哈希表,列表,集合,有序集合等,操作不同的数据类型就会有不同的命令.

全局命令,就是能够搭配任意一个数据类型来使用的命令.

keys

用来查询当前服务器上匹配的key.

通过一些特殊字符(通配符)来描述key的墨阳,匹配上述模样的key就会被查询出来.

支持的通配符有?,*,[abcd],[^e].[a-c].

?表示匹配一个字符.

*表示匹配0个或者多个任意字符.

[abcd]表示只能匹配到a,b,c,d,别的不行,相当于给出固定的选项.

[^e]表示排除e,只有e匹配不了.

[a-c]表示匹配范围内的字符,包括两侧的边界.

flushall表示清空redis上所有的键值对.

keys命令的时间复杂度是O(N),所以在生产环境上一般会进制使用keys命令,尤其是keys *,keys *表示查询redis上所有的key,可能会造成redis服务器的阻塞.


exists

用来判定key是否存在,可以同时判定多个key.返回值是key存在的个数.

时间复杂度是O(1),因为redis组织键值对是通过哈希表的方式来组织的.

一次写多个key是比分开写写多次的效率要高的.

因为redis是一个客户端服务器结构的程序,客户端和服务器之间是要通过网络来进行通信的.

因为一次网络通信就要涉及一次封装和分用,多次的网络通信就要涉及多次的封装和分用.

redis自身已深知上述问题,所以redis的很多命令都支持一次操作多个key.


del

删除指定的key,可以一次删除一个也可以一次删除多个.

时间复杂度是O(1),返回值是删除掉的key的个数.

关于误删操作需要注意的是:如果redis作为缓存,此时误删几个数据问题是不大的,但是误删的太多了,就会导致大量的请求会直接发送给mysql,可能会导致mysql挂掉;如果redis作为数据库,此时误删数据的影响还是比较大的.


expire和ttl

给指定的key设置过期时间.设置的时间单位是秒.时间复杂度是O(1).此处设置过期时间,必须是针对已经存在的key进行设置.设置成功返回1,设置失败返回0.

key存活的时间超过这个指定的时间,就会被自动删除.

pexpire设置的过期时间单位是毫秒.

ttl用来查看当前key的过期时间还剩多少.单位是秒.

pttl也是查询过期时间但是单位是毫秒.


type

返回key对应value的数据类型.


Redis的key的过期策略是怎么实现的?

一个redis中可能同时存在很多很多的key,这些key中可能有很大一部分都带有过期时间,此时redis服务器是如何知道哪些key已过期要被删除,哪些key还没过期呢>

如果直接遍历所有的key,效率十分低,是行不通的.

redis的整体策略是定期删除和惰性删除.

定期删除:每隔一段时间抽取一部分key,进行过期时间的验证,但是要保证这个抽取检查的过程要足够快,所以抽取的key的个数也不能太多,因为要保证redis服务器的正常运行,防止被阻塞.

惰性删除:假设这个key已经到过期时间了,但是redis暂时还没有删除它,key还存在.紧接着,后面的有一次访问,正好使用到了这个key.于是此次访问就会让redis服务器触发删除key的操作,同时在返回一个nil.

虽然有了上述两种策略的结合,但是整体的效果还是一般,还是有很多残留的key没有被及时删除掉.

所以redis针对上述问题还提供了一系列的内存淘汰机制,比如LRU(Least Recently Used,最近最少使用),LFU(Least Frequently Used,最不经常使用)等.

相关推荐
Dylanioucn2 分钟前
【分布式微服务云原生】探索Redis:数据结构的艺术与科学
数据结构·redis·分布式·缓存·中间件
Code成立19 分钟前
1、深入理解Redis线程模型
数据库·redis·bootstrap
缘友一世2 小时前
macos安装mongodb
数据库·mongodb·macos
万事大吉CC3 小时前
mysql单表查询·3
数据库·mysql
bin91534 小时前
【EXCEL数据处理】000010 案列 EXCEL文本型和常规型转换。使用的软件是微软的Excel操作的。处理数据的目的是让数据更直观的显示出来,方便查看。
大数据·数据库·信息可视化·数据挖掘·数据分析·excel·数据可视化
Miqiuha4 小时前
lock_guard和unique_lock学习总结
java·数据库·学习
一 乐5 小时前
学籍管理平台|在线学籍管理平台系统|基于Springboot+VUE的在线学籍管理平台系统设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·学习
Java探秘者9 小时前
Maven下载、安装与环境配置详解:从零开始搭建高效Java开发环境
java·开发语言·数据库·spring boot·spring cloud·maven·idea
2301_786964369 小时前
3、练习常用的HBase Shell命令+HBase 常用的Java API 及应用实例
java·大数据·数据库·分布式·hbase
千年死缓10 小时前
go+redis基于tcp实现聊天室
redis·tcp/ip·golang