当前位置:   article > 正文

redis和mongodb使用_mongo redis结合

mongo redis结合

一  redis

 1 连接

无密码连接

  1. 连接redis
  2. redis-cli -h 127.0.0.1 -p 6379
  3. [root@redis ~]# redis-cli
  4. 127.0.0.1:6379> ping
  5. PONG
  6. 127.0.0.1:6379> get key
  7. 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

  1. 查询精度是秒:
  2. 127.0.0.1:6379> ttl key
  3. 查询精度是毫秒:
  4. 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

  1. #查询APP:COST:GET开头的所有key
  2. /usr/local/redis/bin/redis-cli -a password -n 9 --scan --pattern 'APP:COST:GET*'
  3. #查大的key,能到看key类型和大小
  4. /usr/local/redis/bin/redis-cli -a password -n 9 --bigkeys
  5. #查询APP:COST:GET开头的所有key数量
  6. /usr/local/redis/bin/redis-cli -a password -n 9 --scan --pattern 'APP:COST:GET*' |wc -l
  7. #在主库执行删除操作--在主库
  8. /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
  9. #看内存
  10. free -h

2 redis动态增加内存,动态配置,不需要重启

内存碎片率优化

https://blog.csdn.net/gjc592/article/details/106543132

  1. redis 127.0.0.1:6379> config get maxmemory
  2. 1) "maxmemory"
  3. 2) "3221225472"
  4. redis 127.0.0.1:6379> config set maxmemory 4g
  5. OK
  6. redis 127.0.0.1:6379> config get maxmemory
  7. 1) "maxmemory"
  8. 2) "4294967296"
  9. ##不重启redis从RDB持久化切换到AOF持久化 和调整内存
  10. 127.0.0.1:6379> CONFIG SET appendonly yes #启用AOF
  11. 127.0.0.1:6379> CONFIG SET save "" #关闭RDB
  12. #别忘了在 redis.conf 配置, 程序会按原来的配置来启动服务器。

3 Redis 内存过大排查

内存过大出现时,导致bgsave保存不了。

解决步骤:

1 如果内存不够了,添加交换内存

  1. #查看内存和硬盘
  2. free -h
  3. df -h
  4. #创建交换分区内存
  5. dd if=/dev/zero of=/data/swap1 bs=1024 count=8192000
  6. mkswap /app/swap1
  7. swapon /app/swap1
  8. swapon -s
  9. free -m
  10. vim /etc/fstab
  11. /data/swap1     swap   swap  defaults   0 0

2 rdr 工具分析dump.rdb文件key内存大小方式一推荐

下载地址:redis key内存分析器rdr

  1. #rz 上传
  2. mv rdr /usr/local/bin/
  3. #上传rdb文件和rdr同一目录下启动
  4. /usr/local/bin/rdr show -p 8080 *.rdb
  5. #浏览器访问
  6. 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 解析工具方式二

  1. cd $HOME/go
  2. go get github.com/xueqiu/rdr
  3. cd src/github.com/xueqiu/rdr
  4. #修改端口 808058080
  5. vim main.go
  6. Value: 58080,
  7. go build .
  8. #启动rdr解析
  9. cp rdr /usr/bin/
  10. #启动
  11. rdr show ./dump.rdb

启停脚本

  1. #!/bin/bash
  2. . /etc/profile
  3. dumprdb_path="/data/software/redisdump"
  4. status(){
  5. port_pid=`netstat -tlunp | grep ':58080' | awk '{print $NF}' | awk -F '/' '{print $1}'`
  6. if [ "$port_pid" = "" ]; then
  7. echo -e "rdr已停止:\e[1;31m PID: $port_pid \e[0m"
  8. else
  9. echo -e "rdr已启动:\e[1;31m PID: $port_pid \e[0m"
  10. fi
  11. }
  12. start(){
  13. is_status_pid=`ps -eo pid,lstart,etime,cmd |grep -v grep| grep 'rdr show'|awk '{print $1}'`
  14. if [ "$is_status_pid" != "" ]; then
  15. echo -e "rdr已启动:\e[1;31m PID: $is_status_pid \e[0m"
  16. else
  17. echo -e "正在启动:\e[1;31m start rdr service \e[0m"
  18. rdr show $dumprdb_path/* >>/dev/null 2>&1 &
  19. sleep 8
  20. port_pid=`netstat -tlunp | grep ':58080' | awk '{print $NF}' | awk -F '/' '{print $1}'`
  21. if [ "$port_pid" = "" ]; then
  22. echo -e "rdr启动失败:\e[1;31m PID: $port_pid \e[0m"
  23. else
  24. echo -e "rdr已启动:\e[1;31m PID: $port_pid \e[0m"
  25. fi
  26. fi
  27. }
  28. stop(){
  29. is_status_pid=`ps -eo pid,lstart,etime,cmd |grep -v grep| grep 'rdr show'|awk '{print $1}'`
  30. if [ "$is_status_pid" = "" ]; then
  31. echo -e "rdr已停止:\e[1;31m PID: $is_status_pid \e[0m"
  32. else
  33. echo -e "正在停止:\e[1;31m stop rdr service \e[0m"
  34. netstat -tlunp | grep ':58080' | awk '{print $NF}' | awk -F '/' '{print $1}'|xargs kill
  35. sleep 3
  36. port_pid=`netstat -tlunp | grep ':58080' | awk '{print $NF}' | awk -F '/' '{print $1}'`
  37. if [ "$port_pid" = "" ]; then
  38. echo -e "rdr已停止:\e[1;31m PID: $port_pid \e[0m"
  39. else
  40. echo -e "rdr停止失败:\e[1;31m PID: $port_pid \e[0m"
  41. fi
  42. fi
  43. }
  44. restart(){
  45. stop
  46. start
  47. }
  48. help(){
  49. echo "参数: $0"
  50. echo " start"
  51. echo " stop"
  52. echo " restart"
  53. echo " status"
  54. }
  55. $1
  56. #浏览器访问
  57. http://localhost:58080/instance/dump.rdb

4 参数

redis 127.0.0.1:6379> config get *
  1. CONFIG SET
  2. CONFIG SET parameter value
  3. CONFIG SET 命令可以动态地调整 Redis 服务器的配置(configuration)而无须重启。
  4. 你可以使用它修改配置参数,或者改变 Redis 的持久化(Persistence)方式。
  5. CONFIG SET 可以修改的配置参数可以使用命令 CONFIG GET * 来列出,所有被 CONFIG SET 修改的配置参数都会立即生效。

5 rdb文件恢复

先停掉redis

find  / -name dump.rdb

将dump.rdb文件复制到所在文件目录下

重启redis

配置文件设置

appendonly no

二  mongodb

1 连接

  1. mongo --port 27017
  2. >use test
  3. >db.key

2 用户管理

  1. 创建超级用户管理,管理所有库。(必须use admin,再创建)
  2. $ mongo 27018
  3. use admin
  4. db.createUser(
  5. {
  6. user:"root",
  7. pwd:"root123456",
  8. roles:[{role:"root",db:"admin"}]
  9. }
  10. )
  11. 验证用户
  12. db.auth('root','root123456')
  13. 修改配置文件
  14. security:
  15. authorization: enabled
  16. javascriptEnabled: false
  17. 重启mongodb
  18. systemctl start mongod
  19. mongod -f /www/server/mongodb/config.conf (以root用户启动,参考下文故障)
  20. 登录验证
  21. mongo -uroot -proot123456 admin
  22. mongo -uroot -proot123456 43.248.189.234/admin

3 使用

  1. 查看当前数据中有多少数据库
  2. show dbs
  3. 切换数据库
  4. use conf
  5. 写入
  6. db.test_collection.insert({x:1})
  7. 查询表集合
  8. show collections
  9. 查询
  10. db.test_collection.find();
  11. 创建数据库()
  12. use runoob
  13. db
  14. 我们刚创建的数据库 runoob 并不在数据库的列表中, 要显示它,需要向 runoob 数据库插入一些数据。
  15. > db.runoob.insert({"name":"test"})
  16. 删除数据库
  17. use runoob
  18. db.dropDatabase()
  19. 删除集合
  20. > use runoob
  21. switched to db runoob
  22. > db.createCollection("runoob") # 先创建集合,类似数据库中的表
  23. > show tables # show collections 命令会更加准确点
  24. runoob
  25. > db.runoob.drop()
  26. true
  27. > show tables
  28. 参考
  29. 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

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/56211
推荐阅读
相关标签
  

闽ICP备14008679号