redis和mongodb使用

一  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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值