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\]表示匹配范围内的字符,包括两侧的边界. ![](https://file.jishuzhan.net/article/1720652558038470658/0ee9bd44564eca55e34af5bbf1f706ac.webp) flushall表示清空redis上所有的键值对. ![](https://file.jishuzhan.net/article/1720652558038470658/9263f1c41ef12a02d338bfd4ca568cb2.webp) keys命令的时间复杂度是O(N),所以在生产环境上一般会进制使用keys命令,尤其是keys \*,keys \*表示查询redis上所有的key,可能会造成redis服务器的阻塞. *** ** * ** *** #### exists 用来判定key是否存在,可以同时判定多个key.返回值是key存在的个数. 时间复杂度是O(1),因为redis组织键值对是通过哈希表的方式来组织的. ![](https://file.jishuzhan.net/article/1720652558038470658/b78416e51b2d93a0494890a77e5c6f7f.webp) 一次写多个key是比分开写写多次的效率要高的. 因为redis是一个客户端服务器结构的程序,客户端和服务器之间是要通过网络来进行通信的. 因为一次网络通信就要涉及一次封装和分用,多次的网络通信就要涉及多次的封装和分用. redis自身已深知上述问题,所以redis的很多命令都支持一次操作多个key. *** ** * ** *** #### del 删除指定的key,可以一次删除一个也可以一次删除多个. 时间复杂度是O(1),返回值是删除掉的key的个数. ![](https://file.jishuzhan.net/article/1720652558038470658/7d1e4f305b44a2cf687b5e0f50049b8f.webp) 关于误删操作需要注意的是:如果redis作为缓存,此时误删几个数据问题是不大的,但是误删的太多了,就会导致大量的请求会直接发送给mysql,可能会导致mysql挂掉;如果redis作为数据库,此时误删数据的影响还是比较大的. *** ** * ** *** #### expire和ttl 给指定的key设置过期时间.设置的时间单位是秒.时间复杂度是O(1).此处设置过期时间,必须是针对已经存在的key进行设置.设置成功返回1,设置失败返回0. key存活的时间超过这个指定的时间,就会被自动删除. pexpire设置的过期时间单位是毫秒. ttl用来查看当前key的过期时间还剩多少.单位是秒. pttl也是查询过期时间但是单位是毫秒. ![](https://file.jishuzhan.net/article/1720652558038470658/81a160a320ded8e3c4f5b4e163f55a79.webp) ![](https://file.jishuzhan.net/article/1720652558038470658/f40d3e4f7129f6bedda29932e1f6b0f5.webp) *** ** * ** *** #### type 返回key对应value的数据类型. ![](https://file.jishuzhan.net/article/1720652558038470658/4a73883231bfff3ed1e20e872a0470ce.webp) *** ** * ** *** ### 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,最不经常使用)等.

相关推荐
TiDB 社区干货传送门43 分钟前
从开发者角度看数据库架构进化史:JDBC - 中间件 - TiDB
数据库·oracle·中间件·tidb·数据库架构
虾球xz1 小时前
游戏引擎学习第280天:精简化的流式实体sim
数据库·c++·学习·游戏引擎
uwvwko2 小时前
BUUCTF——web刷题第一页题解
android·前端·数据库·php·web·ctf
扶尔魔ocy2 小时前
【Linux C/C++开发】轻量级关系型数据库SQLite开发(包含性能测试代码)
linux·数据库·c++·sqlite
旋风菠萝2 小时前
项目复习(1)
java·数据库·八股·八股文·复习·项目、
w23617346012 小时前
Django框架漏洞深度剖析:从漏洞原理到企业级防御实战指南——为什么你的Django项目总被黑客盯上?
数据库·django·sqlite
小萌新~~~~2 小时前
Spark缓存---cache方法
spring·缓存·spark
2302_809798323 小时前
【JavaWeb】MySQL
数据库·mysql
drowingcoder3 小时前
MySQL相关
数据库
LDM>W<3 小时前
黑马点评-用户登录
java·redis