非关系型数据库Redis简介
一.Redis简介Redis简介Redis 全称 Remote Dictionary Server(即远程字典服务),它是一个基于内存实现的键值型非关系(NoSQL)数据库, 使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库。 Redis的特点 Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。 Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。 Redis支持数据的备份,即master-slave模式的数据备份。 Redis应用场景数据库的存储方式大体可分为两大类,基于磁盘存储和基于内存存储。磁盘存储的数据库,因为磁头机械运动以及系统调用等因素导致读写效率较低。Redis 基于内存来实现数据存取,相对于磁盘来说,其读写速度要高出好几个数量级。因此Redis一般用来缓存一些经常被访问的热点数据、或者需要耗费大量资源的内容,通过把这些内容放到 Redis...
如何做好CodeReview代码审查
1 review的好处代码review是代码质量保障的手段之一,同时开发成员之间代码review也是一种技术交流的方式,虽然会占用一些时间,但对团队而言,总体是个利大于弊的事情。如何借助现有工具在团队内部形成代码review的流程与规范,是team leader或技术管理者需要考虑的问题。 2 设置成员角色首先需要对你团队的成员分配角色,在Gitlab groups里选择一个group,然后左边菜单栏点击 Members,可在 Members 页面添加或编辑成员角色.其中角色包含如下几类: Guest:权限最小,基本查看功能 Reporter:只能查看,不能push Developer:能push,也能merge不受限制的分支 Master:除了项目的迁移、删除等管理权限没有,其它权限基本都有 Owner:权限最大,包括项目的迁移、删除等管理权限详细权限参考:...
Nginx代理转发实现域名访问并且隐藏端口号
docker 新建nginx 容器用于代理转发,这里必须要映射到80端口,因为访问宿主机会直接访问80端口 1docker run -d --name nginx_agent -p 80:80 nginx:latest 编辑nginx配置文件/etc/nginx/conf.d/default.conf 123456789101112131415161718192021222324server { listen 80; #监听的端口 server_name qinglong.cn; #监听的URL location / { proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For...
非关系型数据库Mongodb简介
一.MongoDB简介什么是NoSQLNoSQL:Not Only SQL ,本质也是一种数据库的技术,相对于传统数据库技术,它不会遵循一些约束,比如:sql标准、ACID属性,表结构等。优点: 满足对数据库的高并发读写; 对海量数据的高效存储和访问; 对数据库高扩展性和高可用性; 灵活的数据结构,满足数据结构不固定的场景; 缺点: 一般不支持事务; 运维人员数据维护相对复杂; 什么是MongoDBMongoDB 是一个基于分布式文件存储的数据库。由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成,MongoDB文档类似于json对象,字段值可以包含其他文档,数组及文档数组。 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。 MongoDB的特点MongoDB...
Flutter之常见控件
Flutter列表控件在 Flutter 中,ListView 可以沿一个方向(垂直或水平方向)来排列其所有子 Widget,常被用于需要展示一组连续视图元素的场景。ListView 构造方法: ListView:仅适用于列表中含有少量元素的场景 ListView.build:适用于子 Widget 比较多的场景 ListView.separated:适用于需要设置分割线的场景 构造方法名 特点 使用场景 ListView 一次性创建好所有子 Widget 适用于展示少量连续子 Widget 的场景。 ListView.build 提供了子 Widget 创建方法,仅在需要展示时才创建 适用于子 Widget 较多,且视觉效果呈现某种规律性的场景。 ListView.separated 提供了子 Widget 创建方法,仅在需要展示时才创建,且提供了自定义分割线的功能 适用于子 Widget 较多,且视觉效果呈现某种规律性、每个子 Widget 之间需要分割线的场景。 1.ListView可以通过设置 children 参数,将所有子 Widget...
Kotlin依赖注入框架Koin的使用
一.引入Koin依赖Koin是一款轻量级的依赖注入框架,根据官方的描述,它无代理,无代码生成,无反射。 12345678def koinVersion = "2.2.2" //Koin for android implementation "org.koin:koin-android:$koinVersion" //Koin for scope feature implementation "org.koin:koin-android-scope:$koinVersion" //Koin for viewModel feature implementation "org.koin:koin-android-viewmodel:$koinVersion" 二.Koin基础使用在application中来做startkoin初始化的动作 123456789101112class MyApp : Application() { override fun...
SpringBoot学习总结之二数据库相关
一.常见的数据库访问框架在Web项目开发中,数据库的访问是必不可少的。 ORM持久化技术 模板类 JDBC(JdbcTemplate) org.springframework.jdbc.core.JdbcTemplate JPA org.springfrmaework.orm.jpa.JpaTemplate IBatis(MyBatis) org.springframework.orm.ibatis.SqlMapClientTemplate 1.JdbcTemplateJdbcTemplate是Spring对JDBC的模板封装,提供了一套JDBC模板,能够让我们写持久层代码时减少冗余代码,简化JDBC代码,使代码更加简洁。Spring Boot默认支持JdbcTemplate(无需配置)。JdbcTemplate在实际开发中一般不会使用,通常都是使用MyBatis、Hibernate等更加成熟、优秀的数据持久层框架。 2.JPAJPA全称是Java Persistence...
Futter命令大全
Flutter常用命令 flutter:列出所有命令 flutter help/-h/–help:获取帮助信息,-h/–help可以作为别的命令的后缀使用 打印详细的命令使用指南 如 flutter run -h flutter doctor:检查flutter环境状态,了解环境配置的状态 flutter doctor -v:检查flutter环境状态,查看详细信息 flutter channel:查看flutter SDK所有分支 flutter channel stable:切换分支(例如切换到stable分支) flutter upgrade:更新flutterSdk(此命令会同时更新 Flutter SDK 和你的 Flutter 项目依赖包) flutter logs:查看日志 flutter create flutter_app:用默认配置创建项目,包名为com.example.flutter_app flutter create –org com.demo...
Web服务器之Nginx简介
一.Nginx简介Nginx (engine x) 是一个高性能的Web和反向代理服务器,同时也是一个 IMAP/POP3/SMTP 代理服器。Nginx处理高并发能力是十分强大的,能经受高负载的考验。而且支持热部署,几乎可以做到 7 * 24 小时不间断运行,即使运行几个月也不需要重新启动,还能在不间断服务的情况下对软件版本进行热更新 。性能是 Nginx 最重要的考量,其占用内存少、并发能力强、能支持高达 5w 个并发连接数,最重要的是, Nginx 是免费的并可以商业化,配置使用也比较简单。详细介绍nginx官网 二.Nginx的功能正向代理正向代理是客户端与正向代理客户端在同一局域网,客户端发出请求,正向代理...
Android富文本之Spannable使用总结
使用SpannableStringBuilder设置多个属性12345678910111213val builder = SpannableStringBuilder() builder.append("小明回复小红:你在干嘛呀。") val styleSpan = StyleSpan(Typeface.BOLD) //粗体 builder.setSpan(styleSpan, 0, 2, Spannable.SPAN_EXCLUSIVE_INCLUSIVE) val styleSpan2 = StyleSpan(Typeface.ITALIC) //斜体 builder.setSpan(styleSpan2, 4, 6, Spannable.SPAN_EXCLUSIVE_INCLUSIVE) val styleSpan3 = StyleSpan(Typeface.BOLD_ITALIC) //粗斜体 builder.setSpan(styleSpan3, 7,...