javazx 发表于 2016-7-28 19:08:43

【java学习】java web Redis学习总结 经典

第一章 Redisredis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类keyvalue存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Python,Ruby,Erlang,PHP客户端,使用很方便。问题是这个项目还很新,可能还不足够稳定。一.1 LINUX下面安装redis   Redis是一种高级key-value数据库。它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富。有字符串,链表,集 合和有序集合。支持在服务器端计算集合的并,交和补集(difference)等,还支持多种排序功能。所以Redis也可以被看成是一个数据结构服务 器。Redis的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上(这称为“半持久化模式”);也可以把每一次数据变化都写入到一个append only file(aof)里面(这称为“全持久化模式”)。1. 下载地址:$ wget http://redis.googlecode.com/files/redis-2.6.13.tar.gz2. 解压缩$ tar xzf redis-2.6.13.tar.gz3. 编译$ cd redis-2.6.13$ make$make install$cp redis.conf /etc/
安装成功之后会在src文件夹内有redis-server和redis-cli两个命令建议将其放到bin下sudo cp redis-server /usr/local/bin/sudo cp redis-cli /usr/local/bin/
参数介绍:make install命令执行完成后,会在/usr/local/bin目录下生成本个可执行文件,分别是redis-server、redis-cli、redis-benchmark、redis-check-aof 、redis-check-dump,它们的作用如下:redis-server:Redis服务器的daemon启动程序redis-cli:Redis命令行操作工具。也可以用telnet根据其纯文本协议来操作redis-benchmark:Redis性能测试工具,测试Redis在当前系统下的读写性能redis-check-aof:数据修复redis-check-dump:检查导出工具一.2 配置文件参数redis.conf 文件配置如下:
daemonize yes#以后台daemon方式运行redis
pidfile "/var/run/redis.pid"#redis以后台运行,默认pid文件路径/var/run/redis.pid
port 6379#默认端口
bind 127.0.0.1 #默认绑定本机所有ip地址,为了安全,可以只监听内网ip
timeout 300 #客户端超时设置,单位为秒
loglevel verbose#设置日志级别,支持四个级别:debug、notice、verbose、warning
logfile stdout#日志记录方式,默认为标准输出,logs不写文件,输出到空设备/deb/null
logfile "/usr/local/redis/var/redis.log"#可以指定日志文件路径
databases 16#开启数据库的数量
save 900 1
save 300 10
save 60 10000
创建本地数据库快照,格式:save * *
900秒内,执行1次写操作
300秒内,执行10次写操作
60秒内,执行10000次写操作
rdbcompression yes #启用数据库lzf压缩,也可以设置为no
dbfilename dump.rdb#本地快照数据库名称
dir "/usr/local/redis/var/"   #本地快照数据库存放目录
requirepass 123456#设置redis数据库连接密码
maxclients 10000 #同一时间最大客户端连接数,0为无限制
maxmemory 1024MB #设定redis最大使用内存,值要小于物理内存,必须设置
appendonly yes#开启日志记录,相当于MySQL的binlog
appendfilename "appendonly.aof"   #日志文件名,注意:不是目录路径
appendfsync everysec #每秒执行同步,还有两个参数always、no一般设置为everysec,相当于MySQL事物日志的写方式
:wq! #保存退出一.3 启动和关闭启动redis服务    # pwd    /usr/local/redis-1.2.6    # redis-server /etc/redis.conf查看进程,确认redis已经启动    # ps -ef | grep redis    root       401 292220 18:06 pts/3    00:00:00 grep redis    root   29258   10 16:23 ?      00:00:00 redis-server /etc/redis.conf如果这里启动redis服务失败,一般情况下是因为redis.conf文件有问题,建议检查或找个可用的配置文件进行覆盖,避免少走弯路,这里建议,修改redis.conf,设置redis进程为后台守护进程    # By default Redis does not run as a daemon. Use 'yes' if you need it.    # Note that Redis will write a pid file in /var/run/redis.pid when daemonized.    daemonize yes一.4 测试redis    # redis-cli -a 33e9redis    redis> set name songbin    OK    redis> get name   "songbin"
redis-cli -a 123456#连接redis数据库,注意:-a后面跟redis数据库密码
set name 111cn.net#写数据
get name#读取数据
exit #退出redis数据库控制台 quit

5:关闭redis服务    redis-cli shutdownredis服务关闭后,缓存数据会自动dump到硬盘上,硬盘地址为redis.conf中的配置项dbfilename dump.rdb所设定强制备份数据到磁盘,使用如下命令redis-cli save 或者 redis-cli -p 6380 save(指定端口)一.5 redis启动脚本启动脚本(startRedis.sh):#/opt/redis-2.8.6/redis.conf为redis配置文件目录#nohup /usr/local/bin/redis-server/redis/redis-2.8.6/redis.conf & redis-2.8.6/src/redis-server redis-2.8.6/redis.conf & 停止脚本(stopRedis.sh):redis-2.8.6/src/redis-cli -p 6379 -a 33e9redisshutdown 两个脚本放在和redis安装目录同级,如下图所示:
启动命令如下: ./startRedis.sh
输入 ps -ef |grep redis 查看是否启动成功。关闭命令如下:./stopRedis.sh如果报错:-bash: ./stopRedis.sh: 权限不够则要增加权限:localhost redis]# chmod u+x stopRedis.sh# ./stoRedis.sh一.6 安全性    为redis设置密码:设置客户端连接后进行任何其他指定前需要实用的密码。警告:因为redis速度非常快,所以在一台较好的服务器下,一个外部用户可以在一秒钟进行150k次的密码尝试,这意味着你需要指定非常非常强大的密码来防止暴力破解。修改密码的方法:    只需要在redis的配置文件redis.conf中开启requirepass就可以了,比如我设置我的访问密码是mypassword。requirepass mypassword在redis.conf中加入这一行代码之后,我们杀死原来的redis进程:pkill redis然后重新启动redis:/usr/local/redis-2.8.1/src/redis-server /user/local/redis-2.8.1/redis.conf然后我们用/usr/local/redis-2.8.1/src/redis-cli发现还能登陆进来,但是当我们执行操作的时候,比如keys *就会如下错误:127.0.0.1:6379> keys *
(error) NOAUTH Authentication required.没有必要的授权验证。在这里redis支持两种授权方式,一种就是直接用auth命令进行授权:
第一次输入了一个错误的密码test,授权失败,第二次输入正确的密码,返回ok,授权成功,之后就可以进行所有的操作。如果我们不想每次登录进来之后都要用auth进行授权,那么我们可以采用另一种授权方式,就是在登陆客户端的时候用-a 来指定密码sh-3.2# /usr/local/redis-2.8.1/src/redis-cli -a mypassword上面的密码如果输错,也能进入,但是之后不能进行操作。需要用auth重新进行授权。第二章 二、主从复制    Redis主从复制配置和使用都非常简单。通过主从复制可以允许多个slave server拥有和master server相同的数据库副本。redis主从复制的特点:1.一台master可以拥有多个slave(1对多的关系)2.多个slave可以连接同一个master外,还可以连接到其他slave(这样做的原因是如果masterdown掉之后其中的一台slave立马可以充当master的角色,这样整个服务流程不受影响)3.中从复制不会阻塞master,在同步数据的同时,master可以继续处理client请求。4.提高系统的伸缩性redis主从复制的过程:1.slave与master建立连接,发送sync同步命令。2.Master会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新得写命令并缓存。3.后台完成保存后,将文件发送给slave4.slave将文件保存到硬盘上配置主从服务器:配置slave服务器很简单,只需要在slave的配置文件中加入以下配置:slaveof masterip masterport如果主机开启了登录验证,那么还需要加入下面这句:masterauth authpassword然后启动从机,首先主机会发快照给从机,从机的数据库会更新到和主机相同的状态,然后往主机里写内容,从机也会随之更新。如果我们在从机上写数据那么会报错:(error) READONLY You can't write against a read only slave.我们可以用info命令来查看主从服务器的信息,在从机上用info命令可以看到role:slavemaster_host:masteripmaster_port:masterportmaster_link_status:up证明和主机处在连接状态在主机上用info命令role:master同时连接着几台从机connected_slaves:1同时可以查看连接到主机上=6379,state=online,offset=1709,lag=1
第三章 Jedis使用三.1 入门实例RedisUtil 代码如下:package com.test;
import redis.clients.jedis.Jedis;import redis.clients.jedis.JedisPool;import redis.clients.jedis.JedisPoolConfig;
public final class RedisUtil {
    //Redis服务器IP    private static String ADDR = "192.168.0.100";
    //Redis的端口号    private static int PORT = 6379;
    //访问密码    private static String AUTH = "admin";
    //可用连接实例的最大数目,默认值为8;    //如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。    private static int MAX_ACTIVE = 1024;
    //控制一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值也是8。    private static int MAX_IDLE = 200;
    //等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException;    private static int MAX_WAIT = 10000;
    private static int TIMEOUT = 10000;
    //在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;    private static boolean TEST_ON_BORROW = true;
    private static JedisPool jedisPool = null;
    /**   * 初始化Redis连接池   */    static {      try {            JedisPoolConfig config = new JedisPoolConfig();            config.setMaxActive(MAX_ACTIVE);            config.setMaxIdle(MAX_IDLE);            config.setMaxWait(MAX_WAIT);            config.setTestOnBorrow(TEST_ON_BORROW);            jedisPool = new JedisPool(config, ADDR, PORT, TIMEOUT, AUTH);      } catch (Exception e) {            e.printStackTrace();      }    }
    /**   * 获取Jedis实例   * @return   */    public synchronized static Jedis getJedis() {      try {            if (jedisPool != null) {                Jedis resource = jedisPool.getResource();                return resource;            } else {                return null;            }      } catch (Exception e) {            e.printStackTrace();            return null;      }    }
    /**   * 释放jedis资源   * @param jedis   */    public static void returnResource(final Jedis jedis) {      if (jedis != null) {            jedisPool.returnResource(jedis);      }    }}TestRedis 代码如下:package com.test;
import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;
import org.junit.Before;import org.junit.Test;
import redis.clients.jedis.Jedis;
public class TestRedis {    private Jedis jedis;
    @Before    public void setup() {      //连接redis服务器,192.168.0.100:6379      jedis = new Jedis("192.168.0.100", 6379);      //权限认证      jedis.auth("admin");    }
    /**   * redis存储字符串   */    @Test    public void testString() {      //-----添加数据----------      jedis.set("name","xinxin");//向key-->name中放入了value-->xinxin      System.out.println(jedis.get("name"));//执行结果:xinxin
      jedis.append("name", " is my lover"); //拼接      System.out.println(jedis.get("name"));
      jedis.del("name");//删除某个键      System.out.println(jedis.get("name"));      //设置多个键值对      jedis.mset("name","liuling","age","23","qq","476777XXX");      jedis.incr("age"); //进行加1操作      System.out.println(jedis.get("name") + "-" + jedis.get("age") + "-" + jedis.get("qq"));
    }
    /**   * redis操作Map   */    @Test    public void testMap() {      //-----添加数据----------      Map<String, String> map = new HashMap<String, String>();      map.put("name", "xinxin");      map.put("age", "22");      map.put("qq", "123456");      jedis.hmset("user",map);      //取出user中的name,执行结果:-->注意结果是一个泛型的List      //第一个参数是存入redis中map对象的key,后面跟的是放入map中的对象的key,后面的key可以跟多个,是可变参数      List<String> rsmap = jedis.hmget("user", "name", "age", "qq");      System.out.println(rsmap);
      //删除map中的某个键值      jedis.hdel("user","age");      System.out.println(jedis.hmget("user", "age")); //因为删除了,所以返回的是null      System.out.println(jedis.hlen("user")); //返回key为user的键中存放的值的个数2       System.out.println(jedis.exists("user"));//是否存在key为user的记录 返回true      System.out.println(jedis.hkeys("user"));//返回map对象中的所有key      System.out.println(jedis.hvals("user"));//返回map对象中的所有value
      Iterator<String> iter=jedis.hkeys("user").iterator();      while (iter.hasNext()){            String key = iter.next();            System.out.println(key+":"+jedis.hmget("user",key));      }    }
    /**    * jedis操作List    */    @Test    public void testList(){      //开始前,先移除所有的内容      jedis.del("java framework");      System.out.println(jedis.lrange("java framework",0,-1));      //先向key java framework中存放三条数据      jedis.lpush("java framework","spring");      jedis.lpush("java framework","struts");      jedis.lpush("java framework","hibernate");      //再取出所有数据jedis.lrange是按范围取出,      // 第一个是key,第二个是起始位置,第三个是结束位置,jedis.llen获取长度 -1表示取得所有      System.out.println(jedis.lrange("java framework",0,-1));
      jedis.del("java framework");      jedis.rpush("java framework","spring");      jedis.rpush("java framework","struts");      jedis.rpush("java framework","hibernate");       System.out.println(jedis.lrange("java framework",0,-1));    }
    /**    * jedis操作Set    */    @Test    public void testSet(){      //添加      jedis.sadd("user","liuling");      jedis.sadd("user","xinxin");      jedis.sadd("user","ling");      jedis.sadd("user","zhangxinxin");      jedis.sadd("user","who");      //移除noname      jedis.srem("user","who");      System.out.println(jedis.smembers("user"));//获取所有加入的value      System.out.println(jedis.sismember("user", "who"));//判断 who 是否是user集合的元素      System.out.println(jedis.srandmember("user"));      System.out.println(jedis.scard("user"));//返回集合的元素个数    }
    @Test    public void test() throws InterruptedException {      //jedis 排序      //注意,此处的rpush和lpush是List的操作。是一个双向链表(但从表现来看的)      jedis.del("a");//先清除数据,再加入数据进行测试      jedis.rpush("a", "1");      jedis.lpush("a","6");      jedis.lpush("a","3");      jedis.lpush("a","9");      System.out.println(jedis.lrange("a",0,-1));//       System.out.println(jedis.sort("a")); ////输入排序后结果      System.out.println(jedis.lrange("a",0,-1));    }
    @Test    public void testRedisPool() {      RedisUtil.getJedis().set("newname", "中文测试");      System.out.println(RedisUtil.getJedis().get("newname"));    }} 四.1 配置要求1.Spring3.2.8以上。2.redis2.6及以上。3.Jdk1.6以上。4.包含Jedis,JRedis,SRP and Lettuce,四个文件。



1109162935 发表于 2016-9-21 05:52:29

啦啦啦啦啦啦啦

背包走的缓慢 发表于 2016-11-20 16:33:08

Web前端开发工程师,主要职责是利用HTML、XHTML、CSS、JAVAScript、FLASH等各种Web前端技术进行客户端产品的开发。完成客户端程序(也就是浏览器端)的开发,开发JavaScript以及Flash模块,同时结合后台开发技术模拟整体效果,进行丰富互联网的Web前端开发,致力于通过技术改善用户体验。

第一阶段:页面制作基础
从这一基础阶段开始,正式学习Web前端开发需要的编程语言HTML,CSS和JavaScript。HTML和CSS用于Web静态内容的展示,JavaScript用于Web动态交互。完成这一阶段前端开发的学习,你就可以独立实现一个动静结合的Web前端项目啦!

第二阶段:主流框架应用
优秀的Web前端开发工程师一定都是追求高效率的”懒人“。这一框架阶段就是教你如何使用当今流行的Web前端框架,包括bootstrap、Angularjs等,来提高前端开发效率。在学习前端框架本身的同时,也希望你能掌握任意一种快速上手的web前端框架的方法!?

第三阶段:前端技术进阶
web前端开发进阶阶段的学习,主要是让大家快速掌握当今流行、实用、最新的技术,比如:less、sass、json、ajax等,并将这些前端技术快速用于实践,开发出更加符合客户体验度的web前端页面。

第四阶段:前端技术拓展
web前端技术发展日新月异,因此前端技术的拓展学习及实践对于web前端工程师来说非常重要。本阶段就是基于、Backbone、bootstrap等技术的拓展学习和web前端项目的实战开发演练。

课程包含部分:

第一部分 html与css入门 共100课时
课时 名称
1 html简介
2 html骨架
3 元标签-编码
4 元标签-关键字与描述
5 标签空白符
6 标题标签
7 段落标签
8 注释
9 块元素与行内元素
10 超链接
11 图片标签
12 绝对路径与相对路径
13 无序列表
14 有序列表
15 列表嵌套
16 定义列表
17 表格
18 单元格拆分与合并
19 表格头尾
20 表单元素
21 下拉框与文本输入框
22 表单分组
23 常见字符实体
24 文字标签
25 语义化标签
26 废弃标签
27 css简介
28 css三种书写方式
29 css常见选择器
30 id选择器与类选择器注意事项
31 选择器组合
32 后代选择器
33 交集选择器与并集选择器
34 选择器通配符
35 腾讯新闻列表
36 选择器权重
37 就近原则
38 样式引入方式权重比较
39 权重计算练习
40 important提升权重
41 盒模型
42 IE盒模型
43 内边距与外边距
44 边框属性
45 盒子居中
46 外边距重计算盒子宽度
47 文字属性
48 css常见单位
49 文字修饰属性
50 文字属性继承性
51 文字水平居中与垂直居中
52 图片元素排版
53 超链接标签默认样式
54 腾讯体育
55 超链接标签伪类
56 伪元素
57 背景样式与图片
58 背景平铺与背景位置
59 背景在SEO中的应用
60 块元素设置背景
61 行内元素设置背景
62 伪元素设置背景
63 水平精灵图
64 垂直精灵图
65 定点精灵图
66 hao123
67 四种箭头
68 hao123箭头
69 css绘制集合图形
70 块元素与行内元素特性
71 块元素与行内元素转化
72 浮动元素
73 浮动元素与文档流
74 浮动元素特性
75 浮动元素与边距
76 浮动元素父元素高度丢失
77 清除浮动
78 清除浮动的7中方式
79 新浪布局
80 列表布局
81 双飞翼布局
82 圣杯布局
83 排查错误
84 相对定位
85 表单对齐
86 新浪tab栏
87 绝对定位
88 子绝父相
89 jd轮播图
90 文本居中,行内元素居中与块元素居中
91 优酷
92 固定定位
93 遮盖
94 拼爹
95 html 注释 hack
96 css属性hack
97 IE6-交集选择器与DTD内减盒模型
98 IE6-最小高度与盒子位置
99 IE6-overflow与透明度
100 IE6-双倍margin与3像素bug




第二部分 源生javascript 共150课时

第三部分 jquery与bootstrap 共60课时

第四部分 HTML5 CSS3与移动端开发 共50课时

第五部分 canvas游戏开发 共30课时

第六部分 微信与百度地图 共30课时

第七部分 nodejs 共80课时

第八部分 设计模式 共80课时

第九部分 模块化开发 共20课时

第十部分 大数据可视化 共15课时

第十一部分 Backbone 共60课时

第十二部分 vue 共40课时

第十三部分 angular 共70课时

第十四部分 前端工程化 共30课时

课程更新网盘
2016年前端开发Angular.JS从入门到上手企业开发视频

链接: https://pan.baidu.com/s/1dF2vBzV 密码: 3hbk

2016年最新前端技术react视频入门
链接: http://pan.baidu.com/s/1i46by8t 密码: 48tt

2016年CSS实体班同步教程
链接: https://pan.baidu.com/s/1qXWRbCK 密码: a725

2016年JS视频教程实体班同步教程
链接: https://pan.baidu.com/s/1jHIkxLG 密码: hpyb


不定时更新web前端学习免费教程领取请加QQ2079576908


目前爱创课程web前端培训的学员就业薪资一般在10K-17K

官方网站:http://www.icketang.com/
页: [1]
查看完整版本: 【java学习】java web Redis学习总结 经典