2022-2-19 Redis常用命令 135846
常用命令集
1)连接操作命令
quit:关闭连接(connection)
auth:简单密码认证
help cmd: 查看cmd帮助,例如:help quit
2)持久化
save:将数据同步保存到磁盘
bgsave:将数据异步保存到磁盘
lastsave:返回上次成功将数据保存到磁盘的Unix时戳
shundown:将数据同步保存到磁盘,然后关闭服务
3)远程服务控制
info:提供服务器的信息和统计
monitor:实时转储收到的请求
slaveof:改变复制策略设置
config:在运行时配置Redis服务器
4)对value操作的命令
exists(key):确认一个key是否存在
del(key):删除一个key
type(key):返回值的类型
keys(pattern):返回满足给定pattern的所有key
randomkey:随机返回key空间的一个
keyrename(oldname, newname):重命名key
dbsize:返回当前数据库中key的数目
expire:设定一个key的活动时间(s)
ttl:获得一个key的活动时间
select(index):按索引查询
move(key, dbindex):移动当前数据库中的key到dbindex数据库
flushdb:删除当前选择数据库中的所有key
flushall:删除所有数据库中的所有key
5)String
set(key, value):给数据库中名称为key的string赋予值value
get(key):返回数据库中名称为key的string的value
getset(key, value):给名称为key的string赋予上一次的value
mget(key1, key2,…, key N):返回库中多个string的value
setnx(key, value):添加string,名称为key,值为value
setex(key, time, value):向库中添加string,设定过期时间time
mset(key N, value N):批量设置多个string的值
msetnx(key N, value N):如果所有名称为key i的string都不存在
incr(key):名称为key的string增1操作
incrby(key, integer):名称为key的string增加integer
decr(key):名称为key的string减1操作
decrby(key, integer):名称为key的string减少integer
append(key, value):名称为key的string的值附加value
substr(key, start, end):返回名称为key的string的value的子串
-
设置数据具有指定的生命周期
setex key seconds value(秒) psetex key milliseconds value(毫秒)
如果设置了一个键的值为10秒,然后在十秒内给这键设置新的值,生命周期就会失效
String操作数据有的返回值是0 或者1 ,. 0代表失败,1代表成功
也可能返回运行结果值,注意识别
一次存多个值,
在redis中为大V用户设定用户信息,以用户主键和属性值作为key,后台设定定时刷新策略即可
-
- eg: user:id:3506728370:fans → 12210947 - eg: user:id:3506728370:blogs → 6164 - eg: user:id:3506728370:focuss → 83
在redis中以json格式存储大V用户信息,定时刷新(也可以使用hash类型)
-
eg: user:id:3506728370 → {"id":3506728370,"name":"春晚","fans":12210862,"blogs":6164, "focus":83}
一般是按照规范存储数据 [表名]:[主键名]:[主键值]:[字段名]
6)List
rpush(key, value):在名称为key的list尾添加一个值为value的元素
lpush(key, value):在名称为key的list头添加一个值为value的 元素
llen(key):返回名称为key的list的长度
lrange(key, start, end):返回名称为key的list中start至end之间的元素
ltrim(key, start, end):截取名称为key的list
lindex(key, index):返回名称为key的list中index位置的元素
lset(key, index, value):给名称为key的list中index位置的元素赋值
lrem(key, count, value):删除count个key的list中值为value的元素
lpop(key):返回并删除名称为key的list中的首元素
rpop(key):返回并删除名称为key的list中的尾元素
blpop(key1, key2,… key N, timeout):lpop命令的block版本。
brpop(key1, key2,… key N, timeout):rpop的block版本。
rpoplpush(srckey, dstkey):返回并删除名称为srckey的list的尾元素,并将该元素添加到名称为dstkey的list的头部
添加/修改数据
lpush key value1 [value2] ……
从左边添加数据,存(a b c),取(c b a)
rpush key value1 [value2] ……
从右边添加数据,存(a b c),取(a b c)
如果不知道元素个数的情况下,要查询所有元素使用 0(第一个元素) ~ -1(倒数第一个元素)
获取数据
lrange key start stop
获取key中 start~stop 之间的元素,索引从0开始
lindex key index
获取key中指定所有位置的元素
llen key
获取指定key的长度
获取并移除数据
lpop key
从左边出
rpop key
从右边出
规定时间内获取并移除数据
任务队列实现的基础操作
blpop key1 [key2] timeout
指定时间内,如果该key增加了元素就删除,没有就不删除(我可以等你加元素再删除)
brpop key1 [key2] timeout
brpoplpush source destination timeout
移除指定元素
lrem key count value
删除多个指定元素
适用于日志统一,消息队列之类的操作
1.每台服务器向同一台redis存储日志的时候,都是按照顺序存入
2.可以利用栈模型,(先进后出),实现查看最新消息功能
7)Set
sadd(key, member):向名称为key的set中添加元素member
srem(key, member) :删除名称为key的set中的元素member
spop(key) :随机返回并删除名称为key的set中一个元素
smove(srckey, dstkey, member) :移到集合元素
scard(key) :返回名称为key的set的基数
sismember(key, member) :member是否是名称为key的set的元素
sinter(key1, key2,…key N) :求交集
sinterstore(dstkey, (keys)) :求交集并将交集保存到dstkey的集合
sunion(key1, (keys)) :求并集
sunionstore(dstkey, (keys)) :求并集并将并集保存到dstkey的集合
sdiff(key1, (keys)) :求差集
sdiffstore(dstkey, (keys)) :求差集并将差集保存到dstkey的集合
smembers(key) :返回名称为key的set的所有元素
srandmember(key) :随机返回名称为key的set的一个元素
添加数据
sadd key member1 [member2]
获取全部数据
smembers key
删除数据
srem key member1 [member2]
获取集合数据总量
scard key
判断集合中是否包含指定数据
sismember key member
随机获取集合中指定数量的数据
srandmember key [conut]
(集合名称)(获取数量,默认为1)
随机获取集合中某个数据并将改数据移除集合
spop key [count]
(集合名称)(获取数量,默认为1)
应用于随机推荐类信息检索,例如热点歌单推荐,热点新闻推荐,热卖旅游线路,应用APP推荐等类似场景
解决方案
求两个集合的交. , 并 , 差集
sinter key1 [key2]
交
sunion key1 [key2]
并
sdiff key1 [key2]
差(谁在前就减去另外一个)
求两个集合的交, 并, 差,集,并存储到指定集合中
sinterstore destination key1 [key2]
sunionstore destination key1 [key2]
sdiffstore destination key1 [key2]
将指定数据从原始集合中移动到目标集合中
smove source destination member
8)Hash
hset(key, field, value):向名称为key的hash中添加元素field
hget(key, field):返回名称为key的hash中field对应的value
hmget(key, (fields)):返回名称为key的hash中field i对应的value
hmset(key, (fields)):向名称为key的hash中添加元素field
hincrby(key, field, integer):将名称为key的hash中field的value增加integer
hexists(key, field):名称为key的hash中是否存在键为field的域
hdel(key, field):删除名称为key的hash中键为field的域
hlen(key):返回名称为key的hash中元素个数
hkeys(key):返回名称为key的hash中所有键
hvals(key):返回名称为key的hash中所有键对应的value
hgetall(key):返回名称为key的hash中所有的键(field)及其对应的value
添加/修改数据
hset key field value
(对象名)(属性名)(属性值)
获取数据
hget key field
hgetall key
删除数据
hdel key field1 [field2]
(对象名)(属性名)(属性值,可选)
存,取
删除
添加/修改多个数据
hmset key field1 value1 field2 value2 …
获取多个数据
hmget key field1 field2 …
获取哈希表中字段的数量
hlen key
获取哈希表中是否存在指定的字段
hexists key field
获取所有字段名或值
hkeys key
hvals key
设置指定字段的数值数据增加指定访问的值
hincrby key field increment
()
hincrbyfloat key field increment
- hash类型下的value只能存储字符串,不允许存储其他数据类型,不存在嵌套现象。如果数据未获取到, 对应的值为(nil) hash 类型数据操作的注意事项
- 每个 hash 可以存储 2 32 - 1 个键值对
- hash类型十分贴近对象的数据存储形式,并且可以灵活添加删除对象属性。但hash设计初衷不是为了存 储大量对象而设计的,切记不可滥用,更不可以将hash作为对象列表使用
- hgetall 操作可以获取全部属性,如果内部field过多,遍历整体数据效率就很会低,有可能成为数据访问 瓶颈
适用于需要对象的存储
9) Sorted_set
sorted_set 类型数据的基本操作
添加数据
zadd key score1 member1 [score2 member2]
获取全部数据
zrange key start stop [WITHSCORES]
zrevrange key start stop [WITHSCORES]
删除数据
zrem key member [member ...]
按条件获取数据
zrangebyscore key min max [WITHSCORES] [LIMIT]
zrevrangebyscore key max min [WITHSCORES]
条件删除数据
zremrangebyrank key start stop
zremrangebyscore key min max
注意:
- min与max用于限定搜索查询的条件
- start与stop用于限定查询范围,作用于索引,表示开始和结束索引
- offset与count用于限定查询范围,作用于查询结果,表示开始位置和数据总量
获取集合数据总量
zcard key
zcount key min max
集合交、并操作
zinterstore destination numkeys key [key ...]
zunionstore destination numkeys key [key ...]
获取数据对应的索引(排名)
zrank key member
zrevrank key member
score值获取与修改
zscore key member
zincrby key increment member
AB压力测试
安装ab工具
yum install httpd-tools
参数说明
-n:执行的请求个数,默认时执行一个请求
-c:一次产生的请求个数,即并发个数
-p:模拟post请求,文件格式为gid=2&status=1,配合-T使用
-T:post数据所使用的Content-Type头信息,如果-T 'application/x-www-form-urlencoded'
1.模拟get请求
直接在url后面带参数即可
ab -c 10 -n 10 http://www.test.api.com/?gid=2
2.模拟post请求
在当前目录下创建一个文件post.txt
编辑文件post.txt写入
cid=4&status=1
相当于post传递cid,status参数
ab -n 100 -c 10 -p post.txt -T application/x-www-form-urlencoded http://test.api.com/ttk/auth/info/
Linux 常用命令
查看redis进程
ps -ef | grep -i redis
杀掉redis进程
kill -9 [进程号]
重新启动redis
如果开启的是后台启动就是给redis后台启动
redis-server /home/hmc/myredis/conf/redis.conf
redis-server redis.conf
连接:
redis-cli -h [ip] -p 39001
redis-cli -h 127.0.0.1 -p 10000
新建文件夹:
mkdir 文件名
新建一个名为test的文件夹在home下
mkdir /home/test
新建文本
在home下新建一个test.sh脚本,得 wq 保存退出
vi /home/test.sh
删除文件或文件夹
1、删除home目录下的test目录
rm /home/test
2、这种不带参数的删除方法经常会提示无法删除,因为权限不够。
rm -r /home/test
3、-r是递归的删除参数表中的目录及其子目录。 目录将被清空并且删除。 当删除目录包含的具有写保护的文件时用户通常是被提示的。
rm -rf /home/test
-4、f是不提示用户,删除目录下的所有文件。请注意检查路径,输成别的目录就悲剧了。
rm -ir /home/test
5、-i是交互模式。使用这个选项,rm命令在删除任何文件前提示用户确认。
6、.复制文件或文件夹
cp 源文件地址 目标文件地址
7、查看防火墙状态
systemctl status firewalld
Active:active(running)就是开启状态,
service firewalld stop 关闭防火墙,
Active: inactive (dead) 关闭状态
好像是本次关闭,重启就没用了
8.允许外部ip连接
redis.conf中注释掉bind 127.0.0.1 ,然后 protected-mode no
持久化操作
RDB
介绍:
在指定的时间间隔内,将内存中的数据集快照写入磁盘,
RDB的缺点是最后一次持久化后的数据可能丢失。
使用流程:
在redis.conf中配置缓存间隔时间
save 20 3
当20秒内进行了三次及三次以上的key操作,就进行缓存 20秒缓存一次
测试:
清空redis中数据:
查看dum.rdb文件大小
增加数据
查看文件大小
关闭redis
,重新启动连接
发现文件都在
AOP
1.默认
appendonly no 改为 yes
2.在dump.rdb目录下新建一个 appendonly.aof文件夹
vi appendonly.aof
3.重启redis,添加数据,然后再重启redis
发现数据都在
进行flushdb,清空内容
查看appendonly.aof文件内容
发现之前的操作都在,说明aof会记录用户所有的操作,还可以给用户的操作进行压缩,具体查看word文档
AOP与RDB同时开启,会优先读取AOP持久化的结果,RDB也会按照他的规则进行持久化
RDB就相当于一个备胎,AOP来了以后就是AOP的规则读取数据,但是RDB还是在默默付出
主从复制
1.复制一份redis.conf 到/myredis目录下
2.新建三个配置文件,用于主从复制 redis10001.conf , redis10002.conf , redis10003.conf
配置文件中内容如下
include /myredis/redis.conf
pidfile /myredis/rdb/redis10001.pid
port 10001
dbfilename dump10001.rdb
myredis目录结构如下
3.运行
redis-server redis10001.conf
ps -ef | grep -i redis
4.启动每一个客户端
redis-cli -h [ip] -p 10001
我们把10001作为主 10002与10003作为从
5.相关信息
info replication
设置主从关系:
在10002,10003设置这个命令
slaveof 81.69.254.114 10001
10002,10003信息
10001信息
6.测试
1.在主服务器增加三条数据,查看从服务器是否存在
2.在从服务器增加数据
3.主机重启一切如初,如果从机重启则需要重新配置主机
slaveof [ip] 10001
4.也可以配置配置文件,保证每次从机启动都依赖主机
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)