redis

在广大场地,我们须求在线编辑HTML内容,然后在页面上或者其余终端上(如小程序、APP应用等)展现,编辑HTML内容的插件有诸多,本篇介绍基于Bootstrap的 summernote插件完成HTML文档的编写和图片插入操作,这几个控件的利用尤其有利,并且用户群也很大。

Nosql  == not only sql

Summernote
是一个不难利落,所见即所得(WYSIWYG)的编辑器,Summernote是一个轻量级、灵活基于Bootstrap和jQuery的HTML文本编辑器,拥有强劲的API配置效益,多国语言帮忙支持Bootstrap2.x和3.0,帮忙视频和图片上传以及代码的高亮呈现,多种
后台语言版本示例以及多主体协理,在浏览器兼容方面,援救IE9+以及现代的浏览器Chrome,Firefox,Safari等,在活动端应该有不易的变现,仍然很科学的,值得使用。

非关系型数据库    redis 和 mongodb

该插件是开源的,官网地址:http://summernote.org/,GitHub地址:https://github.com/summernote/summernote/、安装调整都很有益。

解决:

1、Summernote的简短利用

使用办法:

1)、加载JS和CSS

<!-- include libraries(jQuery, bootstrap) -->
<link href="http://netdna.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.css" rel="stylesheet">
<script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.js"></script> 
<script src="http://netdna.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.js"></script> 

<!-- include summernote css/js-->
<link href="http://cdnjs.cloudflare.com/ajax/libs/summernote/0.8.7/summernote.css" rel="stylesheet">
<script src="http://cdnjs.cloudflare.com/ajax/libs/summernote/0.8.7/summernote.js"></script>

基于MVC的Asp.net应用程序中,大家一般在BundleConfig.cs里面起头化我们的引入JS文件,如下所示。

            //添加对bootstrap-summernote的支持
            css_metronic.Include("~/Content/metronic/assets/global/plugins/bootstrap-summernote/summernote.css");
            js_metronic.Include("~/Content/metronic/assets/global/plugins/bootstrap-summernote/summernote.min.js");
            js_metronic.Include("~/Content/metronic/assets/global/plugins/bootstrap-summernote/lang/summernote-zh-CN.min.js");

            bundles.Add(css_metronic);
            bundles.Add(js_metronic);

 

2)、编写HTML内容

在HTML页面代码增添上边的记号。

<div id="summernote">Hello Summernote</div>

 

3)、开头化调用

粗略的起先化代码如下所示。

$(document).ready(function() {
  $('#summernote').summernote();
});

若是伸张控件高度的定义,则如下所示。

$('#summernote').summernote({
  height: 300,   
  focus: true    
});

而详细的开始化界面,一般还包含语言国际化、图片上传等拍卖代码,如下所示

function initEditor() {
    $('#Note').summernote({
        lang: 'zh-CN',       // default: 'en-US'
        height: 600,         // set editor height                
        minHeight: null,    // set minimum height of editor
        maxHeight: null,    // set maximum height of editor
        focus: true,         // set focus to editable area after initializing summe
        callbacks: {
            onImageUpload: function (files) { //the onImageUpload API  
                img = sendFile(files[0]);
            }
        }
    });
}

4)、获取内容

var markupStr = $('#summernote').summernote('code');

 

5)、设置情节

安装情节和获得内容相近,在code前边伸张内需写入的HTML内容即可。

var markupStr = 'hello world';
$('#summernote').summernote('code', markupStr);

 

  1. High performance   高并发读写
  2. Huge storage   海量数据的高效能存储和做客
  3. High scalability & High availability 高可扩大性和高可用性

2、 summernote插件在实际项目中的使用

地点介绍了健康 summernote插件的行使进程,一般情形下,大家应用它除了编辑HTML内容外,还亟需对图片上传举行拍卖,以管教大家得以一直把公文上传来后台文件系统里面去,而不是把它们转换为Base64的编码放在页面内。

一般的开首化代码如下所示。

        function initEditor() {
            $('#Note').summernote({
                lang: 'zh-CN',       // default: 'en-US'
                height: 600,         // set editor height                
                minHeight: null,    // set minimum height of editor
                maxHeight: null,    // set maximum height of editor
                focus: true,         // set focus to editable area after initializing summe
                callbacks: {
                    onImageUpload: function (files) { //the onImageUpload API  
                        img = sendFile(files[0]);
                    }
                }
            });
        }

中间的sendFile的函数如下所示,首如若调用附件管理模块进行文件的囤积。

        //提交文件到服务器处理
        function sendFile(file) {
            data = new FormData();
            data.append("file", file);
            //增加额外的参数
            data.append("folder", '商品信息');
            data.append("guid", $("#ID").val());

            $.ajax({
                data: data,
                type: "POST",
                url: "/FileUpload/Upload",
                cache: false,
                contentType: false,
                processData: false,
                success: function (json) {
                    var data = $.parseJSON(json);
                    var url = data.urls[0];
                    $("#Note").summernote('insertImage', url, 'image name'); // the insertImage API  
                }
            });
        }

貌似的话,我们的文本为了在八个应用之间共享处理,一般提出以FTP方式展开处理,那方面可以参见随笔《在附件管理模块中增添对FTP
上传和预览的支持
》,FTP上传文件可以选拔FluentFTP这么些组件(GitHub地址:https://github.com/hgupta9/FluentFTP ),那些是一个施用很广,成效很强劲的FTP组件。

上传附件到服务器上的后台控制器代码如下所示,主倘使构建文件音讯,上传后再次回到对应的URL,然后就可以在 summernote插件上呈现图片了。

        /// <summary>
        /// 上传附件到服务器上
        /// </summary>
        /// <param name="fileData">附件信息</param>
        /// <param name="guid">附件组GUID</param>
        /// <param name="folder">指定的上传目录</param>
        /// <returns></returns>
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Upload(string guid, string folder)
        {
            //如果需要修改字段显示,则参考下面代码处理
            dynamic obj = new ExpandoObject();
            List<string> urls = new List<string>();
            var result = new CommonResult();

            HttpFileCollectionBase files = HttpContext.Request.Files;
            if (files != null)
            {
                foreach (string key in files.Keys)
                {
                    try
                    {
                        #region MyRegion
                        HttpPostedFileBase fileData = files[key];
                        if (fileData != null)
                        {
                            HttpContext.Request.ContentEncoding = Encoding.GetEncoding("UTF-8");
                            HttpContext.Response.ContentEncoding = Encoding.GetEncoding("UTF-8");
                            HttpContext.Response.Charset = "UTF-8";

                            string fileName = Path.GetFileName(fileData.FileName);      //原始文件名称
                            string fileExtension = Path.GetExtension(fileName);         //文件扩展名

                            FileUploadInfo info = new FileUploadInfo();
                            info.FileData = ReadFileBytes(fileData);
                            if (info.FileData != null)
                            {
                                info.FileSize = info.FileData.Length;
                            }
                            info.Category = folder;
                            info.FileName = fileName;
                            info.FileExtend = fileExtension;
                            info.AttachmentGUID = guid;

                            info.AddTime = DateTime.Now;
                            info.Editor = CurrentUser.Name;//登录人
                            //info.Owner_ID = OwerId;//所属主表记录ID

                            result = BLLFactory<FileUpload>.Instance.Upload(info);
                            if (!result.Success)
                            {
                                LogTextHelper.Error("上传文件失败:" + result.ErrorMessage);
                            }
                            else
                            {
                                //返回具体路径地址
                                string serverRealPath = info.BasePath.UriCombine(info.SavePath);
                                if (!Path.IsPathRooted(info.BasePath) &&
                                    !info.BasePath.StartsWith("http://") &&
                                    !info.BasePath.StartsWith("https://"))
                                {
                                    //如果是相对目录,加上当前程序的目录才能定位文件地址
                                    var url = HttpContext.Request.Url;
                                    var baseurl = url.AbsoluteUri.Replace(url.PathAndQuery, "");
                                    serverRealPath = baseurl.UriCombine(serverRealPath).Replace('\\', '/');
                                }
                                urls.Add(serverRealPath);
                            }
                        }
                        #endregion
                    }
                    catch (Exception ex)
                    {
                        result.ErrorMessage = ex.Message;
                        LogTextHelper.Error(ex);
                    }
                }
                obj.urls = urls;
            }
            else
            {
                result.ErrorMessage = "fileData对象为空";
            }

            var newResult = new { Success = result.Success, ErrorMessage = result.ErrorMessage, urls = urls };
            return ToJsonContent(newResult);
        }

界面效果如我在小说介绍的平等《微信小程序结合后台数据管理落实商品数量的动态体现、维护》。

案例对货品的详细音讯的富文本举行编制,来展开图片文字的编制处理,如下界面所示。

图片 1

当大家插入图片的时候,弹出一个对话框界面,采用文件上传后再次回到URL展现在SummerNote插件上。

 图片 2

上传文件成功后,通过上面的代码插入一个图纸,如下代码。

    $.ajax({
        data: data,
        type: "POST",
        url: "/FileUpload/Upload",
        cache: false,
        contentType: false,
        processData: false,
        success: function (json) {
            var data = $.parseJSON(json);
            var url = data.urls[0];
            $("#Note").summernote('insertImage', url, 'image name'); // the insertImage API  
        }
    });

 以上就是自个儿在其实的Bootstrap框架项目中利用
summernote插件完成HTML文档的编纂和图纸插入操作,全体性仍旧相比较便于上手的,经验供大家借鉴。

 其他相关小说可以参照阅读下:

结缘bootstrap
fileinput插件和Bootstrap-table表格插件,完毕文件上传、预览、提交的导入Excel数据操作流程

依照Metronic的Bootstrap开发框架经验总计(16)–
使用插件bootstrap-table完毕表格记录的查询、分页、排序等拍卖

按照Metronic的Bootstrap开发框架经验总计(15)– 更新使用Metronic
4.75版本

从开发框架进步开销功用说起 

据悉Metronic的Bootstrap开发框架经验统计(14)–条码和二维码的扭转及打印处理

据悉Metronic的Bootstrap开发框架经验统计(13)–页面链接收藏夹成效的兑现2

据悉Metronic的Bootstrap开发框架经验总计(12)–页面链接收藏夹功效的达成

据悉Metronic的Bootstrap开发框架经验计算(11)–页面菜单的两种表现形式 

据悉Metronic的Bootstrap开发框架经验总括(10)–优化Bootstrap图标管理 

在MVC控制器里面使用dynamic和ExpandoObject,达成数量转义的输出

基于Metronic的Bootstrap开发框架经验总结(9)–完结Web页面内容的打印预览和封存操作

按照Metronic的Bootstrap开发框架经验总括(8)–框架作用完全界面介绍

依照Metronic的Bootstrap开发框架经验总计(7)–数据的导入、导出及附件的查阅处理 

根据Metronic的Bootstrap开发框架经验计算(6)–对话框及指示框的拍卖和优化

依据Metronic的Bootstrap开发框架经验计算(5)–Bootstrap文件上传插件File
Input的应用

依据Metronic的Bootstrap开发框架经验计算(4)–Bootstrap图标的提取和行使

按照Metronic的Bootstrap开发框架经验总计(3)–下拉列表Select2插件的应用 

据悉Metronic的Bootstrap开发框架经验计算(2)–列表分页处理和插件JSTree的运用

据悉Metronic的Bootstrap开发框架经验总括(1)-框架总览及菜单模块的处理 

 

Nosql数据库的四大分类:

  1. k-v存储
  2. 列存储 Hbase
  3. 文档存储 Mongodb
  4. 图表数据库

对比图:

图片 3

 

Nosql 特性:

  1. 易扩展
  2. 利落的数据模型
  3. 命局据量高性能,高可用

 

redis是c语言开发的

 

redis应用场景:

  • 做缓存
  • 义务队列
  • 网站访问计算
  • 运用名次榜
  • 数码过期处理
  • 等等

 


redis的安装: 百度

 

安装好redis之后(linux)

修改配置文件来后台运行   

图片 4

./bin/redis-server
./redis.conf      用配置文件启动redis服务

 ps -ef | grep redis    
查看redis服务是还是不是起来

kill -9 <进程号>       
杀死进度来关闭redis-server

也得以用  ./bin/redis-cli
shutdown  来关闭redis

 


Jedis   java的连接redis的一个jar包

连接redis的例证,创建连接池的事例

图片 5

 

防火墙 6379 的端口打开

图片 6

 

连接池

图片 7

图片 8

 


Redis的数据结构:

  1. 字符串             String
  2. 字符串列表      list
  3. 哈希                 hash
  4. 字符串集合      set
  5. 稳步字符串      sorted-set

积存String常用命令:

  • set                建立
  • get                查看
  • getset          重返一个字符串,也就是键的旧值。
    假诺键不存在,则赶回nil
  • del               删除
  • incr             数字有增无减1
  • decr            数字压缩1
  • incrby         数字有增无减自定义
  • decrby       数字减少自定义
  • append      重临一个整数,在大增操作后的字符串的尺寸。

存储Hash:

  • hset key key_name values           
  • hset key key_name1 values1        建立hash,赋值单个
  • hmset key key_name value key_name1 value1       建立hash,赋值八个
  • hget key key_name             获得单个值
  • hmget key key_name key_name1     获得七个值
  • hgetall key       得到全套的key,value
  • hlen     得到长度
  • hkeys   获得键
  • hvals   获得值

存储List:

  • lpush
  • rpush
  • lrange   后更参数index  范围
  • lpop     取出后没有
  • rpop
  • llen
  • 等等

存储Set:

与list分化,不允许出现重复的因素

  • sadd  key     添加 
  • srem  key     删除
  • smembers key   查看成员值
  • scard key     再次来到成员个数
  • 等等

存储Sorted-Set

  • zadd myset 50 p 60 j 70 x     添加有序的set
  • zadd 100 p        要是value相同,分数会覆盖
  • zscore myset p     查询p的分数
  • zcard myset      查询长度
  • zrem  myset  p   删除p
  • 等等

Redis   key的通用操作

  • keys *
  • del key
  • exists key     再次来到1表示存在
  • get key
  • rename key    重命名

Redis特性:

  multi  事务块

  exec 执行工作

  discard 裁撤事务

图片 9


Redis 持久化:

  • RDB形式  可以指定多少秒写入磁盘五回
  • AOF方式 读取log
  • 无持久化
  • 同时RDB和AOF

redis默认是RDB方式:

  优势:

  劣势:

  配置:

    save 900 1

    save 300 10

    save 60 10000

    dbfilename dump.rdb  保存文件名

    dir ./  在当前目录保存

AOF方式:

  优势:

  劣势:

  配置:

    appendonly no/yes  是还是不是启用

    #appendfsync always  每修改一遍就共同四遍

    #appendfsync everysec  每秒同步五回

    #appendfsync no    不同步

  进入appendonly.aof文件删除最终的授命就可以完毕裁撤的目的


from:http://www.imooc.com/learn/839

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图