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,最不经常使用)等.

相关推荐
o(╥﹏╥)42 分钟前
linux(ubuntu )卡死怎么强制重启
linux·数据库·ubuntu·系统安全
海海不掉头发1 小时前
苍穹外卖-day05redis 缓存的学习
学习·缓存
阿里嘎多学长1 小时前
docker怎么部署高斯数据库
运维·数据库·docker·容器
Yuan_o_1 小时前
Linux 基本使用和程序部署
java·linux·运维·服务器·数据库·后端
Sunyanhui11 小时前
牛客网 SQL36查找后排序
数据库·sql·mysql
老王笔记1 小时前
MHA binlog server
数据库·mysql
lovelin+v175030409662 小时前
安全性升级:API接口在零信任架构下的安全防护策略
大数据·数据库·人工智能·爬虫·数据分析
川石教育2 小时前
Vue前端开发-缓存优化
前端·javascript·vue.js·缓存·前端框架·vue·数据缓存
DT辰白3 小时前
基于Redis的网关鉴权方案与性能优化
数据库·redis·缓存