spring boot(学习笔记第十课)

spring boot(学习笔记第十课)

  • NoSQL(Redis),NoSQL(MongoDB)

学习内容:

  1. NoSQL(Redis)
  2. NoSQL(MongoDB)

1. NoSQL(Redis)

RedisNoSQL阵营中的一个常见DB Server,目前来看NoSQL和传统的RDS(Relation Database System)相比,是一个强有力的补充,但是NoSQL不能替代传统的关系型DB Server

  1. 搭建单serverredis
    因为是在windows上进行学习,所以首先在VMware做成了centos的虚拟机。

    • 下载最新版的redis
      https://download.redis.io/releases/
      这里选择了最新版redis-7.4-rc1.tar.gz
      在这里插入图片描述

    • 进入centos(VMware),进行安装。注意,最好在sudo下进行
      VMware需要设定成NAT的网络。
      在这里插入图片描述
      之后将NAT设定应用到该VM虚拟机。
      在这里插入图片描述

    • 准备进行安装。
      mkdir -p /data/install 将安装文件下载到这个文件夹。
      mkdir -p /data/local

    • redis-7.4-rc1.tar.gz解压到/data/local
      tar -zxvf /data/install/redis-5.0.7.tar.gz -C /data/local/

    • 安装需要的gcc等工具包。
      yum -y install gcc gcc-c++ tcl automake autoconf libtool make

    • 进行编译安装
      make && make install

    • service配置文件进行编辑,让他使用本地的redis.conf进行启动
      vim /data/local/redis-7.4-rc1/utils/systemd-redis_server.service

      [Service]
      #ExecStart=/usr/local/bin/redis-server --supervised systemd --daemonize no
      ## Alternatively, have redis-server load a configuration file:
      ExecStart=/usr/local/bin/redis-server /data/local/redis-7.4-rc1/redis.conf
      LimitNOFILE=10032
      NoNewPrivileges=yes
      

    其他地方都不用修改,就是ExecStart这里,/usr/local/bin/redis-server的后面加上/data/local/redis-7.4-rc1/redis.conf,让之后的自定义的redis.conf能够有效。

    • 之后将/data/local/redis-7.4-rc1/utils/systemd-redis_server.service拷贝到正式的service配置文件的路径下。注意,为了名字简单,重命名成redis.service
      cp systemd-redis_server.service /usr/lib/systemd/system/redis.service
    • /data/local/redis-7.4-rc1/redis.conf/进行修正。
      vim /data/local/redis-7.4-rc1/redis.conf
      • 如果有bind,那么注释掉。默认(0.0.0.0)让所有的地址都进行bind
        在这里插入图片描述
      • protected-mode进行no设定。
        #protected-mode yes
        protected-mode no
        
      • 设定访问密码,这里是练习,所以设定成123456
        requirepass 123456
        
      • 进行redis.service启动。注意,需要在sudo下进行。并且这里没有配置开机自动启动,所以每次重启vm虚拟机需要重新一次执行redis.service启动
        systemctl start redis.service
        检查redis.service的状态。
        systemctl status redis.service 如果active(running)状态,表明正常启动。
      • 在本地执行redis-cli(redis的客户端程序)来确认service状态。
        • redis-cli -a 123456 注意,密码就是上面设定的密码
        • localhost上可以执行如下的命令确认(get)和设定(set)各种参数。
          [finlay@master ~]$ redis-cli -a 123456
          Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
          127.0.0.1:6379> config get protected-mode
          1) "protected-mode"
          2) "no"
          127.0.0.1:6379> config get requirepass
          1) "requirepass"
          2) "123456"
          127.0.0.1:6379> config get bind
          1) "bind"
          2) "* -::*"
          127.0.0.1:6379>
          
  2. 进行spring boot的配置,访问redis server

    • application.properties进行配置之前, double shift快捷方式来看看RedisProperties.java的配置。
      @ConfigurationProperties(prefix = "spring.data.redis")
      public class RedisProperties {
      
    • application.properties进行配置
      spring.data.redis.database=0
      spring.data.redis.host=192.168.12.129
      spring.data.redis.port=6379
      spring.data.redis.password=123456
      spring.data.redis.lettuce.pool.max-active=8
      spring.data.redis.lettuce.pool.max-idle=8
      spring.data.redis.lettuce.pool.max-wait=-1ms
      spring.data.redis.lettuce.pool.min-idle=0
      
      其中spring.redis.databaseredis db的需要,可以配置一个以上。
      spring.redis.hostip地址,这里是VMware虚拟机的ip地址。
    • pom.xml中增加依赖。
       <dependency>
              <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-data-redis</artifactId>
              </dependency>
              <dependency>
                  <groupId>com.fasterxml.jackson.core</groupId>
                  <artifactId>jackson-databind</artifactId>
              </dependency>
      
    • controller中注入redisTemplatestringRedisTemplate
        @Autowired
        @Qualifier(value = "redisTemplate")
        private RedisTemplate<Object, Object> redisTemplate;
    
        @Autowired
        private StringRedisTemplate stringRedisTemplate;
    
    • controller中定义方法,对redis db`数据做成,取得操作。

          @GetMapping("/redis")
          @ResponseBody
          public String redis() {
              StringBuffer ret = new StringBuffer();
              ValueOperations<String, String> ops1
                      = stringRedisTemplate.opsForValue();
              ops1.set("name", "allen");
              String name = ops1.get("name");
              ret.append(name);
              ret.append("<br>");
      
              ValueOperations ops2 = redisTemplate.opsForValue();
              Book secondBook = new Book();
              secondBook.setName("finlay");
              secondBook.setPrice(17F);
              secondBook.setPublicatationDate(new Date());
              secondBook.setAuthor("finlay");
              ops2.set("second_book", secondBook);
              Book book = (Book) ops2.get("second_book");
              ret.append(book.toString());
      
              return ret.toString();
          }
      
    • 上面的执行之后,将set方法都去掉,重启redis db,再次执行,看到数据还是存在的,因此说明redis db对数据进行了disk persistence.

      @GetMapping("/redis")
          @ResponseBody
          public String redis() {
              StringBuffer ret = new StringBuffer();
              ValueOperations<String, String> ops1
                      = stringRedisTemplate.opsForValue();
      //        ops1.set("name", "allen");
              String name = ops1.get("name");
              ret.append(name);
              ret.append("<br>");
      
              ValueOperations ops2 = redisTemplate.opsForValue();
      //        Book secondBook = new Book();
      //        secondBook.setName("finlay");
      //        secondBook.setPrice(17F);
      //        secondBook.setPublicatationDate(new Date());
      //        secondBook.setAuthor("finlay");
      //        ops2.set("second_book", secondBook);
              Book book = (Book) ops2.get("second_book");
              ret.append(book.toString());
      
              return ret.toString();
          }
      

2. NoSQL(MongoDB)

  1. 在centos上安装MongoDB
    • 下载MongoDB到/data/mongodb
      wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-7.0.11.tgz
    • 解压之后mv/opt/mongodb文件夹
      mv mongodb-linux-x86_64-rhel70-7.0.11 /opt/mongodb/
    • 常见logsdb文件夹
      mkdir /opt/mongodb/db
      mkdir /opt/mongodb/logs
    • 进入bin文件夹,创建mongo.conf文件
      cd /opt/mongodb/mongodb-linux-x86_64-rhel70-7.0.11/bin
      dbpath=/opt/mongodb/db
      logpath=/opt/mongodb/logs/log
      port=27017
      fork=true
      
    • 启动mongodb server
      cd /opt/mongodb/mongodb-linux-x86_64-rhel70-7.0.11/bin
      ./mongod -f mongo.conf --bind_ip_all
      注意,在mongo.conf里面指定了fork=true,因此该命令会fork一个进程之后,结束当前命令行,类似于开启service
    • 之后检查27017端口,是否已经开始由mongodb监听。
      ss -ltnp |grep ":27017"
      LISTEN     0      128          *:27017                    *:*                   users:(("mongod",pid=21275,fd=15))
      
    • 安装mongodb客户端
      • 创建一个vim /etc/yum.repos.d/mongodb-org.repo
        [mongodb-org-4.4]
        name=MongoDB Repository
        baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.4/x86_64/
        gpgcheck=1
        enabled=1
        gpgkey=https://www.mongodb.org/static/pgp/server-4.4.asc
        
      • 执行yum安装
        yum install -y mongodb-org-shell mongodb-org-tools
      • 执行mongo客户端程序
        whereis mongo --> /usr/bin/mongo root用户不写绝对路径不好用,所以要提前whereis下,确定绝对路径
        [root@master bin]# /usr/bin/mongo
        MongoDB shell version v4.4.29
        connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
        Implicit session: session { "id" : UUID("631f4f15-38f5-4462-b1a6-685f8816e5d8") }
        MongoDB server version: 7.0.11
        WARNING: shell and server versions do not match
        ---
        The server generated these startup warnings when booting:
                2024-06-23T16:59:44.294+08:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
                2024-06-23T16:59:44.295+08:00: You are running this process as the root user, which is not recommended
                2024-06-23T16:59:44.295+08:00: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. We suggest setting it to 'never' in this binary version
                2024-06-23T16:59:44.295+08:00: /sys/kernel/mm/transparent_hugepage/defrag is 'always'. We suggest setting it to 'never' in this binary version
                2024-06-23T16:59:44.295+08:00: Soft rlimits for open file descriptors too low
                2024-06-23T16:59:44.295+08:00:         currentValue: 1024
                2024-06-23T16:59:44.295+08:00:         recommendedMinimum: 64000
        ---
        >
        
        执行db.version()确定版本。
      • 需要shutdown server的时候必须要切到admin数据库,默认进入的是test数据库。
        use admin;
        db.shutdownServer();
        exit
        
      • 切换到admin数据库,创建用户,赋予给test数据库。
        > use admin;
        switched to db admin
        > db.createUser({user:"finlay",pwd:"123456",roles[{role:"readWrite",db:"test"}]});
        uncaught exception: SyntaxError: missing : after property id :
        @(shell):1:47
        > db.createUser({user:"finlay",pwd:"123456",roles:[{role:"readWrite",db:"test"}]});
        Successfully added user: {
                "user" : "finlay",
                "roles" : [
                        {
                                "role" : "readWrite",
                                "db" : "test"
                        }
                ]
        }
        >
        
      • 切换到admin数据库,进行认证。
        > use admin;
        switched to db admin
        > db.auth("finlay","123456");
        1
        >
        
  2. 配置spring boot,连接mongo db
    • pom.xml中加入必要的依赖。
       <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-data-mongodb</artifactId>
       </dependency>
      
    • application.properties中加入mongdb的连接信息。
      spring.data.mongodb.authentication-database=admin
      spring.data.mongodb.database=test
      spring.data.mongodb.host=192.168.12.130
      spring.data.mongodb.port=27017
      spring.data.mongodb.username=finlay
      spring.data.mongodb.password=123456
      
    • controller使用mongoTemplate进行数据库操作。
          @Autowired
          private MongoTemplate mongoTemplate;
      
          @GetMapping("/mongo")
          @ResponseBody
          public String mongo() {
              List<Book> books = new ArrayList<>();
              Book b1 = new Book();
              b1.setId(1);
              b1.setAuthor("tom");
              b1.setName("spring boot");
              b1.setPrice(17F);
              books.add(b1);
      
              Book b2 = new Book();
              b2.setId(2);
              b2.setAuthor("allen");
              b2.setName("future");
              b2.setPrice(27F);
              books.add(b2);
      
              mongoTemplate.insertAll(books);
      
              Book book = mongoTemplate.findById(1, Book.class);
              if (book != null) {
                  return book.toString();
              }else{
                  return "";
              }
          }
      
    • 看到已经保存到mongo db了。
      在这里插入图片描述
  • 43
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值