redis 带密码连接
redis-cli -h 1270.0.01 -p 6379
# 带端口连接,进入交互页面
auth 123456
# 输入密码
redis set集合(增删改查)
sadd key value value ...
# 向 Set 中存储一个或多个值,如果要添加的值以及存在该 Set 中则不会重复添加。
srem key value value ...
# 删除指定 key 中的一个或多个元素,如果值不存在不作任何操作。
smembers key
# 获取该 key 中的所有元素
sismember key element
# 判断 element 是否存在于 key 中,存在返回 1,不存在返回 0,或者 key 不存在也返回 0。
scard key
# 获取一个集合中的元素数量
sranmember key
# 随机获得元素(srandmember)
查看,重启redis
systemctl restart redis_6379
# 重启
systemctl status redis_6379
# 查看状态
String
命令 | 解释 |
---|---|
get key | 获取key的值 |
set key v | 设置key的值 |
del key | 删除key的值 |
incr key | 将储值加1 |
decr key | 将储值减1 |
List
命令 | 解释 |
---|---|
rpush key [v…] | 将一个或多个加入列表右端 |
lpush key [v…] | 将一个或多个加入列表左端 |
rpop key | 移除并返回最右端的元素 |
lpop key | 移除并返回列表最左端的元素 |
Redis 主从机配置
Redis主从复制特点
1.master可以拥有多个slave
2.多个slave可以连接同一个master外,还可以连接到其他slave
3.主从复制不会阻塞master,在同步数据时,master可以继续处理client请求
4.提高系统的伸缩性
5.可以在master禁用数据持久化,注释掉master配置文件中的所有save配置,只需在slave上配置数据持久化
Redis主从复制过程
当配置好slave后,slave与master建立连接,然后发送sync命令。无论是第一次连接还是重新连接,master都会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存。后台进程完成写文件后,master就发送文件给 slave,slave将文件保存到硬盘上,再加载到内存中,接着master就会把缓存的命令转发给slave,后续master将收到的写命令发送给 slave。如果master同时收到多个slave发来的同步连接命令,master只会启动一个进程来写数据库镜像,然后发送给所有的slave。
Redis常用指令
1. Connection(连接)
AUTH(auth password)
#设置密码
127.0.0.1:6379> config set requirepass 654321 #将密码设置为654321
OK
127.0.0.1:6379> quit #退出再连接,让新密码对客户端生效
[root@iZ283jrawloZ bin]# ./redis-cli -p 6379
127.0.0.1:6379> ping #未验证密码,提示错误,需要验证
(error) NOAUTH Authentication required.
127.0.0.1:6379> auth 123456 #密码错误,提示无效的密码
(error) ERR invalid password
127.0.0.1:6379> auth 654321 #密码正确,连接成功
OK
127.0.0.1:6379> ping #ping操作命令成功
PONG
ECHO (echo message)
127.0.0.1:6379> echo "hello"
"hello"
# 双引号可以去除
127.0.0.1:6379> echo "goodbye"
"goodbye"
PING (测试链接是否正常)
#客户端与服务器连接正常
127.0.0.1:6379> ping
PONG
#客户端与服务器连接不正常(网络不正常或服务器未能正常运行)
127.0.0.1:6379> ping
Could not connect to Redis at 127.0.0.1:6379: Connection refused
SELECT (select index)
127.0.0.1:6379> set db_number 0 #默认使用0号数据库
OK
127.0.0.1:6379> select 1 #使用1号数据库
OK
127.0.0.1:6379[1]> get db_number #已切换至1号数据库,命令提示符多了[1]
(nil)
127.0.0.1:6379[1]> set db_number 1
OK
127.0.0.1:6379[1]> get db_number
"1"
127.0.0.1:6379[1]> select 3 #切换至3号数据库
OK
127.0.0.1:6379[3]> select 0 #命令提示符从[1]变成[3],再切换回默认数据库
OK
127.0.0.1:6379>
2.Server(服务器)
CLIENT GETNAME:返回连接设置的名字
127.0.0.1:6379> client getname #新连接默认没有名字
(nil)
127.0.0.1:6379> client setname connection1 #设置名字
OK
127.0.0.1:6379> client getname #返回名字
"connection1"
CLIENT LIST : 返回所有连接到服务器的客户端的信息和统计数据
127.0.0.1:6379> client list
id=2221941 addr=115.28.**.**:34696 fd=321 name= age=76816 idle=76816 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=ping
id=2221942 addr=115.28.**.**:34698 fd=322 name= age=76816 idle=76799 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=get
id=2111339 addr=115.28.**.**:54388 fd=87 name= age=251748 idle=251748 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=ping
CLIENT KILL IP : PORT 关闭地址的客户端。因为 Redis 使用单线程设计,所以当 Redis 正在执行命令的时候,不会有客户端被断开连接。如果要被断开连接的客户端正在执行命令,那么当这个命令执行之后,在发送下一个命令的时候,它就会收到一个网络错误,告知它自身的连接已被关闭。
CONFIG GET(CONFIG GET PARAMETER): 用于获取redis服务器的配置参数。在2.4版本中,有些参数无法通过CONFIG GET访问,但在2.6版本中,所有的配置参数都可以用CONFIG GET访问。
# 查询所有的配置项
127.0.0.1:6379> config get *
#查询所有以s开头的配置项
127.0.0.1:6379> config get s*
#获取指定配置项
127.0.0.1:6379> config get save
1) "save"
2) "900 1 300 10 60 10000"
# 上面 save 参数的三个值表示:在 900 秒内最少有 1 个 key 被改动,
# 或者 300 秒内最少有 10 个 key 被改动,又或者 60 秒内最少有 1000 个 key 被改动,
# 以上三个条件随便满足一个,就触发一次保存操作。
CONFIG RESTART : 重置info命令的某些统计数据
CONFIG REWRITE :对启动 Redis 服务器时所指定的 redis.conf 文件进行改写:因为 CONFIG SET 命令可以对服务器的当前配置进行修改, 而修改后的配置可能和 redis.conf 文件中所描述的配置不一样, CONFIG REWRITE 的作用就是通过尽可能少的修改, 将服务器当前所使用的配置记录到 redis.conf 文件中。
对 redis.conf 文件的重写是原子性的, 并且是一致的: 如果重写出错或重写期间服务器崩溃, 那么重写失败, 原有 redis.conf 文件不会被修改。 如果重写成功, 那么 redis.conf 文件为重写后的新文件。
CONFIG SET :可以动态地调整 Redis 服务器的配置(configuration)而无须重启。
DBSIZE :返回当前数据库的 key 的数量。
FLUSHALL:清空整个 Redis 服务器的数据(删除所有数据库的所有 key )。此命令从不失败。
FLUSHDB :清空当前数据库中的所有 key。此命令从不失败。
INFO [section]:返回关于 Redis 服务器的各种信息和统计数值。通过给定可选的参数 section ,可以让命令只返回某一部分的信息.
FLUSHDB :清空当前数据库中的所有 key。此命令从不失败。
Key(键)
Keys pattern:查找所有符合给定模式 pattern 的 key 。
DEL key [key …] :删除给定的一个或多个 key 。不存在的 key 会被忽略。
Type key :返回 key 所储存的值的类型。
EXISTS key :检查指定key是否存在
EXPIRE key seconds:为给定 key 设置生存时间,当 key 过期时(生存时间为 0 ),它会被自动删除。
DUMP key :序列化给定 key ,并返回被序列化的值,如果值不存在,返回nil,否则,返回序列化之后的值。
RESTORE key ttl serialized-value:反序列化给定的序列化值,并将它和给定的 key 关联。参数 ttl 以毫秒为单位为 key 设置生存时间;如果 ttl 为 0 ,那么不设置生存时间。
#匹配数据库中所有key
127.0.0.1:6379> keys unreadAskForPriceCache*
1) "unreadAskForPriceCache:8748"
2) "unreadAskForPriceCache:386"
3) "unreadAskForPriceCache:37"
#匹配以unreadAskForPriceCache开头的key
127.0.0.1:6379> keys unreadAskForPriceCache*
1) "unreadAskForPriceCache:8748"
2) "unreadAskForPriceCache:386"
3) "unreadAskForPriceCache:37"
#查看key的类型
127.0.0.1:6379> type unreadAskForPriceCache:295
zset
#删除指定key
127.0.0.1:6379> del unreadAskForPriceCache:295
(integer) 1
#序列化给定 key
127.0.0.1:6379> dump userAccount:w256
"\x00\xc3A\x83B0\x11{\"employeeId\":305,\xe0\x00\x10\x0eCity\":\"9\",\"ding@\x03\x0fName\":null,\"shor\x80\x0f\x00\" !\x04isUse A\x001 \n\nnsertPerson \x1c\x000@\x1d`\x12\x01Ti\xe0\x01=\x05update\x
e0\x04$\x80\x12\xe0\x03$\x0bisShipper\":0`\r\x02ell\xe0\x01\x0c\x06torehou l\xa0\x1e\x04Manag\xa0\r\x05deptKe \xbf\x80\xac\x00n`\xb8\t\"\xe9\x82\xb1\xe6\xb5\xa9\xe6\xa5\xa0 \x93\x02cod \xcb\x04\"w256 \r\x06address\xc0/\x06postalC`\"\x80A\tofficePhon 5\x80\x12\x04mobil\xc0\x12\n\"1367696187@O\x04email\xc0( K\x00t\xe0\x005@\x99Ak\x02\"10A\x1a\x03regiA'\x80R\x06provinc\xe0\x00,\x06orderNo`\xe0\x02sex\xc0&\x03area@\x9c\xe0\x00\xaf\x02mem $\x80C@\x0b\x001\xe0\x03\x0c\x002\xe0\x03\x0c\x003\xe0\x03\x0c\x004\xe0\x03\x0c\x02num\xc0\x0eAT@\xa3\x02293A(\x04mpany@\x0f\x010}\b\x00\xbc%\xce\xe4yN\xdb\x95"
#反序列化给定的序列化值
127.0.0.1:6379> restore userAccout:256 0 "\x00\xc3A\x83B0\x11{\"employeeId\":305,\xe0\x00\x10\x0eCity\":\"9\",\"ding@\x03\x0fName\":null,\"shor\x80\x0f\x00\" !\x04isUse A\x001 \n\nnsertPerson \x1c\
x000@\x1d`\x12\x01Ti\xe0\x01=\x05update\xe0\x04$\x80\x12\xe0\x03$\x0bisShipper\":0`\r\x02ell\xe0\x01\x0c\x06torehou l\xa0\x1e\x04Manag\xa0\r\x05deptKe \xbf\x80\xac\x00n`\xb8\t\"\xe9\x82\xb1\xe6\xb5\xa9\xe6\xa5\xa0 \x93\x02cod \xcb\x04\"w256 \r\x06address\xc0/\x06postalC`\"\x80A\tofficePhon 5\x80\x12\x04mobil\xc0\x12\n\"1367696187@O\x04email\xc0( K\x00t\xe0\x005@\x99Ak\x02\"10A\x1a\x03regiA'\x80R\x06provinc\xe0\x00,\x06orderNo`\xe0\x02sex\xc0&\x03area@\x9c\xe0\x00\xaf\x02mem $\x80C@\x0b\x001\xe0\x03\x0c\x002\xe0\x03\x0c\x003\xe0\x03\x0c\x004\xe0\x03\x0c\x02num\xc0\x0eAT@\xa3\x02293A(\x04mpany@\x0f\x010}\b\x00\xbc%\xce\xe4yN\xdb\x95"OK
127.0.0.1:6379> get userAccount:256
"{\"employeeId\":220,\"employeeCity\":\"22\",\"dingdingName\":\"\",\"shorName\":\"\xe4\xbc\x81\xe9\xb9\x85\",\"isUsed\":0,\"insertPerson\":\"70\",\"insertTime\":null,\"updatePerson\":\"70\",\"updat
eTime\":null,\"isShipper\":0,\"isSeller\":0,\"isStorehouser\":0,\"isManager\":0,\"deptKey\":null,\"name\":\"\xe9\x82\xb1\xe6\xb5\xa9\xe6\xa5\xa0\",\"code\":\"256\",\"address\":\"\",\"postalCode\":null,\"officePhone\":\"\",\"mobilePhone\":\"13676961876\",\"email\":\"\",\"state\":null,\"deptId\":\"185\",\"region\":null,\"province\":null,\"orderNo\":0,\"sex\":null,\"areaCodes\":null,\"memo\":null,\"memo1\":null,\"memo2\":null,\"memo3\":null,\"memo4\":null,\"memonum\":null,\"userId\":208,\"companyId\":0}"
#批量删除所有匹配的key
redis-cli -a uqiauto -p 7001 -n 0 keys "unreadAskForPriceCache*" | xargs redis-cli -a uqiauto -p 7001 -n 0 del
官网下载连接
linux下配置
- 选择Stable(5.0)下的Download 5.0.0 链接进行下载 (stable是稳定版本,默认下载的是linux版本)
- 下载完毕后,通过 xftp 传输到 /opt 文件夹
- 进入opt文件夹,解压文件,进入到解压文件夹
4.修改.conf 文件,1.将bind 127.0.0.1注释。2.关闭保护模式 protected-mode:yes改为no 3.daemonize 改为 yes(表示可以后台运行)
5.启动客户端指令 ./redis-server ./redis.conf 启动服务端 ./redis-cli
遇到的问题:
错误1:
Bad directive or wrong number of arguments
解决:
环境变量的问题,解决方案:1.添加环境变量 2 指令面前表明文件位置:进入文件所在文件夹,命令前加 ./
错误2:
由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败
解决:
关闭防火墙//这个是一次性的,如果重启了需要重新设置
systemctl stop firewalld.service
禁用防火墙//这个命令需要重启才能生效
systemctl disable firewalld.service
错误3:
redis由于目标计算机积极拒绝,无法连接
解决:
配置文件没有更改,ip为本机ip,非redisip
错误4:
主从配置,输入info,分别显示master slave角色,但是master的connected-slave一直为0
解决:
修改完配置文件后,要使用路径启动,redis-server /opt/redis-6.2.3/redis.conf(自己的路径),然后在启动redis-cli, 主从都要服务端和客户端. 然后info查看主服务器,set 和 get 命令检测。
如何配置环境变量
1.进入管理者模式输入密码(su)
2.查看现有环境变量(echo
P
A
T
H
)
,
编
写
环
境
变
量
(
v
i
m
/
e
t
c
/
p
r
o
f
i
l
e
)
3.
编
写
增
添
环
境
变
量
的
路
径
,
并
保
存
。
(
先
a
进
入
编
写
模
式
,
然
后
写
入
指
令
e
x
p
o
r
t
P
A
T
H
=
"
PATH),编写环境变量(vim /etc/profile) 3.编写增添环境变量的路径,并保存。(先 a 进入编写模式,然后写入指令 export PATH="
PATH),编写环境变量(vim/etc/profile)3.编写增添环境变量的路径,并保存。(先a进入编写模式,然后写入指令exportPATH="PATH:/opt/python38/bin" 按esc退出,输入 :wq! 进行强制保存)
4.保存环境变量(source /etc/profile)
组件redis集群
- master开启服务端和客户端.
- slave只开启服务端,输入指令slaveof ip port (主机的)
- 查看主从指令(info replication)
主节点挂掉,从节点自动升级成主节点
a) sentinel.conf配置文件,修改sentinel monitor host6379 127.0.0.1 6379 1,其它使用默认即可 host6379 主机名称,随便起 主机IP 端口 1表示选举,某个slaver得到超过1票则成成为Master节点
b) 启动sentinel: ./redis-sentinel …/sentinel.conf