一 redis
1 连接
无密码连接
连接redis
redis-cli -h 127.0.0.1 -p 6379
[root@redis ~]# redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> get key
127.0.0.1:6379> info
带密码连接
redis-cli -h 127.0.0.1 -p 6379 -a xxx
或者
redis-cli -h 127.0.0.1 -p 6379
redis 127.0.0.1:6379>auth password
选择redis db库,这个应用服务的配置文件里配置的。
选择db8库
redis 127.0.0.1:6379>select 8
redis 127.0.0.1:6379>get key
设置过期时间
redis 127.0.0.1:6379>expire key 10
看key的有效期
redis 127.0.0.1:6379>ttl key
查询精度是秒:
127.0.0.1:6379> ttl key
查询精度是毫秒:
127.0.0.1:6379> pttl key
清理过期可以
redis 127.0.0.1:6379> persist key
重命名key
redis 127.0.0.1:6379> rename key key2
查看key类型
redis 127.0.0.1:6379>type key
查key总数
redis 127.0.0.1:6379>dbsize
删除key
redis 127.0.0.1:6379>del key
批量删除sting key
/usr/local/redis/bin/redis-cli -a password -n 9 scan 0 match 'wantong:ZC*' COUNT 500000 | /usr/bin/xargs /usr/local/redis/bin/redis-cli -a password -n 9 del
批量操作 -a 密码 -n选择库
参考https://redis.io/topics/rediscli#scanning-for-big-keys
#查询APP:COST:GET开头的所有key
/usr/local/redis/bin/redis-cli -a password -n 9 --scan --pattern 'APP:COST:GET*'
#查大的key,能到看key类型和大小
/usr/local/redis/bin/redis-cli -a password -n 9 --bigkeys
#查询APP:COST:GET开头的所有key数量
/usr/local/redis/bin/redis-cli -a password -n 9 --scan --pattern 'APP:COST:GET*' |wc -l
#在主库执行删除操作--在主库
/usr/local/redis/bin/redis-cli -a password -n 9 --scan --pattern 'APP:COST:GET*' | /usr/bin/xargs /usr/local/redis/bin/redis-cli -a password -n 9 del
#看内存
free -h
2 redis动态增加内存,动态配置,不需要重启
内存碎片率优化
https://blog.csdn.net/gjc592/article/details/106543132
redis 127.0.0.1:6379> config get maxmemory
1) "maxmemory"
2) "3221225472"
redis 127.0.0.1:6379> config set maxmemory 4g
OK
redis 127.0.0.1:6379> config get maxmemory
1) "maxmemory"
2) "4294967296"
##不重启redis从RDB持久化切换到AOF持久化 和调整内存
127.0.0.1:6379> CONFIG SET appendonly yes #启用AOF
127.0.0.1:6379> CONFIG SET save "" #关闭RDB
#别忘了在 redis.conf 配置, 程序会按原来的配置来启动服务器。
3 Redis 内存过大排查
内存过大出现时,导致bgsave保存不了。
解决步骤:
1 如果内存不够了,添加交换内存
#查看内存和硬盘
free -h
df -h
#创建交换分区内存
dd if=/dev/zero of=/data/swap1 bs=1024 count=8192000
mkswap /app/swap1
swapon /app/swap1
swapon -s
free -m
vim /etc/fstab
/data/swap1 swap swap defaults 0 0
2 rdr 工具分析dump.rdb文件key内存大小方式一推荐
下载地址:redis key内存分析器rdr
#rz 上传
mv rdr /usr/local/bin/
#上传rdb文件和rdr同一目录下启动
/usr/local/bin/rdr show -p 8080 *.rdb
#浏览器访问
http://localhost:8080/instance/dump.rdb
批量删除sting key,-a 密码 -n选择库从0-9库扫描,
/usr/local/redis/bin/redis-cli -a password -n 9 scan 0 match 'app_xt:XC0000*' COUNT 500000 | /usr/bin/xargs /usr/local/redis/bin/redis-cli -a password -n 9 del
安装rdr 解析工具方式二
cd $HOME/go
go get github.com/xueqiu/rdr
cd src/github.com/xueqiu/rdr
#修改端口 8080为58080
vim main.go
Value: 58080,
go build .
#启动rdr解析
cp rdr /usr/bin/
#启动
rdr show ./dump.rdb
启停脚本
#!/bin/bash
. /etc/profile
dumprdb_path="/data/software/redisdump"
status(){
port_pid=`netstat -tlunp | grep ':58080' | awk '{print $NF}' | awk -F '/' '{print $1}'`
if [ "$port_pid" = "" ]; then
echo -e "rdr已停止:\e[1;31m PID: $port_pid \e[0m"
else
echo -e "rdr已启动:\e[1;31m PID: $port_pid \e[0m"
fi
}
start(){
is_status_pid=`ps -eo pid,lstart,etime,cmd |grep -v grep| grep 'rdr show'|awk '{print $1}'`
if [ "$is_status_pid" != "" ]; then
echo -e "rdr已启动:\e[1;31m PID: $is_status_pid \e[0m"
else
echo -e "正在启动:\e[1;31m start rdr service \e[0m"
rdr show $dumprdb_path/* >>/dev/null 2>&1 &
sleep 8
port_pid=`netstat -tlunp | grep ':58080' | awk '{print $NF}' | awk -F '/' '{print $1}'`
if [ "$port_pid" = "" ]; then
echo -e "rdr启动失败:\e[1;31m PID: $port_pid \e[0m"
else
echo -e "rdr已启动:\e[1;31m PID: $port_pid \e[0m"
fi
fi
}
stop(){
is_status_pid=`ps -eo pid,lstart,etime,cmd |grep -v grep| grep 'rdr show'|awk '{print $1}'`
if [ "$is_status_pid" = "" ]; then
echo -e "rdr已停止:\e[1;31m PID: $is_status_pid \e[0m"
else
echo -e "正在停止:\e[1;31m stop rdr service \e[0m"
netstat -tlunp | grep ':58080' | awk '{print $NF}' | awk -F '/' '{print $1}'|xargs kill
sleep 3
port_pid=`netstat -tlunp | grep ':58080' | awk '{print $NF}' | awk -F '/' '{print $1}'`
if [ "$port_pid" = "" ]; then
echo -e "rdr已停止:\e[1;31m PID: $port_pid \e[0m"
else
echo -e "rdr停止失败:\e[1;31m PID: $port_pid \e[0m"
fi
fi
}
restart(){
stop
start
}
help(){
echo "参数: $0"
echo " start"
echo " stop"
echo " restart"
echo " status"
}
$1
#浏览器访问
http://localhost:58080/instance/dump.rdb
4 参数
redis 127.0.0.1:6379> config get *
CONFIG SET
CONFIG SET parameter value
CONFIG SET 命令可以动态地调整 Redis 服务器的配置(configuration)而无须重启。
你可以使用它修改配置参数,或者改变 Redis 的持久化(Persistence)方式。
CONFIG SET 可以修改的配置参数可以使用命令 CONFIG GET * 来列出,所有被 CONFIG SET 修改的配置参数都会立即生效。
5 rdb文件恢复
先停掉redis
find / -name dump.rdb
将dump.rdb文件复制到所在文件目录下
重启redis
配置文件设置
appendonly no
二 mongodb
1 连接
mongo --port 27017
>use test
>db.key
2 用户管理
创建超级用户管理,管理所有库。(必须use admin,再创建)
$ mongo 27018
use admin
db.createUser(
{
user:"root",
pwd:"root123456",
roles:[{role:"root",db:"admin"}]
}
)
验证用户
db.auth('root','root123456')
修改配置文件
security:
authorization: enabled
javascriptEnabled: false
重启mongodb
systemctl start mongod
或
mongod -f /www/server/mongodb/config.conf (以root用户启动,参考下文故障)
登录验证
mongo -uroot -proot123456 admin
mongo -uroot -proot123456 43.248.189.234/admin
3 使用
查看当前数据中有多少数据库
show dbs
切换数据库
use conf
写入
db.test_collection.insert({x:1})
查询表集合
show collections
查询
db.test_collection.find();
创建数据库()
use runoob
db
我们刚创建的数据库 runoob 并不在数据库的列表中, 要显示它,需要向 runoob 数据库插入一些数据。
> db.runoob.insert({"name":"test"})
删除数据库
use runoob
db.dropDatabase()
删除集合
> use runoob
switched to db runoob
> db.createCollection("runoob") # 先创建集合,类似数据库中的表
> show tables # show collections 命令会更加准确点
runoob
> db.runoob.drop()
true
> show tables
参考
https://www.runoob.com/mongodb/mongodb-create-database.html
4 关闭mongo
先通过shell连上服务器:
mongo
use admin
db.shutdownServer()
或者直接kill -15 <pid>,注意kill -9 可能会导致数据文件损坏
故障
mongod -f /www/server/mongodb/config.conf 启动后,ps -ef|grep mongo 发现是root用户启动的。
然后用kill -9 结束mongo程。
systemctl start mongod 重启出现以下错误:
Job for mongod.service failed because the control process exited with error code. See "systemctl status mongod.service" and "journalctl -xe"
解决方法
chkconfig network off
chkconfig network on
service NetworkManager stop
service NetworkManager start
以下的分析过程,没有解决问题
1 查看日志
tail -100f /var/log/mongodb/mongod.log
提示
[main] ERROR: Cannot write pid file to /var/run/mongodb/mongod.pid: Permission denied
2 查看数据目录和用户
ll /var/lib/mongo
chown -R mongod.mongod /var/lib/mongo
3 删除mongod.lock
find / -name mongod.lock
rm -rf /var/lib/mongo/mongod.lock