redis是什么?
最简单的问题就最不好回答。
redis有什么用?
这个反而好回答。缓存,分布式锁等。
那么回到问题的原点,redis是什么?
是一款内存数据库,键值对(key-value结构)的数据库,高性能的数据库。
最常用的是远程缓存数据,例如用户机构树、分布式锁等。
这样答看起来稍微像那么回事。
文章目录
作用
缓存
缓存既是redis的特性,也是作用。
redis数据存在内存中,对比数据库来说。 性能高,支持并发等。
分布式锁
因为其远程的特性。 多应用可以通过连接一个redis,来实现分布式锁。
安装
yum命令安装
yum install epel-release;
yum install redis;
文章目录
命令
redis-cli命令
redis-cli是连接redis命令
例子:
redis-cli -h 10.12.168.1 -p 6379 -a '1234'
auth的使用,auth是指定密码。
一般有两种情况。
第一种(-a指定密码):
redis-cli -h 10.12.168.1 -p 6379 -a '1234'
那么,如果连接的时候忘记指定密码了,难道要退出重新连接吗? 当然不用。
再执行一条auth命令即可。
第二种(先连接,然后再执行auth命令):
redis-cli -h 10.12.168.1 -p 6379;
auth 123456;
redis-cli输入了密码还是提示没权限
1、密码错误了。
2、密码要加单引号,如:-p '1234'
。(实测确实如此)
不但要连接,而且要有权限
连接成功就能说明密码没问题吗?
并不能。
因为如果没设置密码,也是可以连通的,但是没有高级权限。例如只能info,不能select 0。
所以,校验密码的时候。连通之后一定加个select命令,确保密码是正确的。
注:select 0是非常重要的。
通过这个可以测试出防火墙是否正常。
之前吃过这个亏,info可以展示就认为没问题了。后来项目报错,连接不上,最后发现是方后墙的问题,真心。。。
查看版本号
不用进入redis命令行。 shell界面直接输入:
redis-server -v
redis-server --version
查看用到了哪些类型
这个没有办法,只能先keys,然后再type某个值。
scan命令
scan命令很有用。
语法:
SCAN 0 MATCH 'pattern' [WITHSCAN] [COUNT] [LIMIT] [OFFSET]
0:表示从键值对的头部开始扫描,而不是从尾部开始。
MATCH:用于指定扫描的键值对匹配模式。
'pattern':键值对匹配模式,可以是一个字符串,也可以是一个正则表达式。
WITHSCAN:可选参数,表示是否使用WITHSCAN模式。
COUNT:可选参数,表示返回的有序集合中的元素数量。
LIMIT:可选参数,表示返回的有序集合中的最大元素数量。
OFFSET:可选参数,表示从有序集合中的哪个元素开始返回。
示例:
scan 0 match userName* count 20 # 找出匹配的记录,并展示前20条
scan 0 # 从第一条开始,默认展示10条
删除和批量删除
用del命令。
语法:
DEL key [key ...]
一目了然,可以删除一条,也可删除多条(key用空格分隔)。
模糊匹配批量删除
很多小伙伴有这个需求,模糊匹配删除,很遗憾,redis没这个功能。
但是有办法可以变通实现。
命令:
redis-cli -h 192.168.0.1 -p 6379 -a ‘1234’ scan 0 match userName* count 10 | xargs redis-cli -h 192.168.0.1 -p 6379 -a ‘1234’ del
这个命令还可以分开执行,先执行|
之前的,看下结果对不对,如果正确,再把后面的语句加上执行。
keys命令和scan命的区别
keys命令是单线程的,会阻塞其他,scan命令是异步的,不会阻塞其他。
假设有几百万条数据,keys的处理时间约为几十秒,那么就会出现一种情况,此时其他操作进不来,是非常危险的。但是用scan就不会有这个问题。
查看超时时间
ttl命令即可,比较简单:
ttl keyName
# 返回的单位是秒(s)
redis内存相关
redis占用内存比较多,客户要求解决,怎么办呢?
1、memory命令。
2、redis内存工具。
3、redisTemplate写工具类,看字节大小。
memory命令
这个命令很好,但是需要4.0以上的版本,使用的redis可能不支持这个命令。
redis工具-insight
这个是官方推荐的。
https://redis.io/insight/