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.也可以配置配置文件,保证每次从机启动都依赖主机

集群

posted @   疯自*  阅读(65)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示