• 一、Redis基本介绍

  • (1)Redis介绍

  Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件. 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询,` bitmaps,hyperloglogs 和 地理空间(geospatial) 索引半径查询.Redis 内置了 复制(replication), LUA脚本(Lua scripting), LRU驱动事件(LRU eviction), 事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过Redis哨兵(Sentinel) 和自动分区(Cluster)提供高可用性(high availability)。

    可以对这些类型执行 原子操作 , 列如: 字符串(strings)的append 命令; 散列(hashes)的hincrby命令; 列表(lists)的lpush命令; 集合(sets)计算交集sinter命令, 计算并集union命令 和 计算差集sdiff命令; 或者 在有序集合(sorted sets)里面获取成员的最高排名zrangebyscore命令。

    为了实现其卓越的性能, Redis采用运行在 内存中的数据集工作方式. 根据使用情况, 可以每隔一定时间将 数据集导出到磁盘 , 或者 追加到命令日志中. 也可以关闭持久化功能,将Redis作为一个高效的网络的缓存数据功能使用.

    Redis 同样支持 主从复制(能自动重连和网络断开时自动重新同步),并且第一次同步是快速的非阻塞式的同步.
  其他功能包括:
(1)事务(Transactions)
(2)订阅分发(Pub/Sub)
(3)LUA脚本(Lua scripting)
(4)过期自动删除key
(5)内存回收
(6)自动故障转移

  • (2)Redis特点

1)支持内存缓存,这个功能相当于memcached

2)支持持久化存储,这个功能相当于memcachedb,ttserver

3)数据库类型更丰富。比其他key-value库功能更强

4)支持主从集群、分布式

5)支持队列等特殊功能

  • (3)Redis和Memecache的区别

1.存储方式: 
memecache 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小, Redis有部份存在硬盘上,这样能保证数据的持久性,支持数据的持久化。

2.数据支持类型: 
redis在数据支持上要比memecache多的多。

3.使用底层模型不同 
新版本的redis直接自己构建了VM 机制,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。

总结:对于两者的选择还是要看具体的应用场景,如果需要缓存的数据只是key-value这样简单的结构时,我在项目里还是采用memcache,它也足够的稳定可靠。如果涉及到存储,排序等一系列复杂的操作时,毫无疑问选择redis。

  • 二、Redis部署

redis下载地址:http://www.redis.cn/download.html

  • 1、安装–>下载,解压,编译

()下载、解压、编译
[root@redis ~]# wget http://download.redis.io/releases/redis-4.0.9.tar.gz
[root@redis ~]# tar xzf redis-4.0..tar.gz -C /usr/local/
[root@redis redis-4.0.]# cd /usr/local/redis-4.0.
[root@redis redis-4.0.]# make
[root@redis redis-4.0.]# make install ()创建软链接
[root@redis redis-4.0.]# ln -sv /usr/local/redis-4.0. /usr/local/redis
"/usr/local/redis" -> "/usr/local/redis-4.0.9"
[root@redis redis-4.0.]# ll /usr/local/redis*
lrwxrwxrwx root root 5月 : /usr/local/redis -> /usr/local/redis-4.0. ()修改redis配置文件redis.conf
[root@redis ~]# vim /usr/local/redis/redis.conf
bind 127.0.0.1 #监听的ip地址
port #端口
daemonize yes #开启后台运行模式
pidfile /var/run/redis_6379.pid #pid路径
logfile "/var/log/redis.log" #日志路径
dir /data/redis_data #数据保存路径
  • 2、启动redis

()编写redis启动脚本
[root@redis ~]# vim /usr/lib/systemd/system/redis.service
[Unit]
Description=Redis
After=syslog.target network.target remote-fs.target nss-lookup.target [Service]
Type=forking
PIDFile=/var/run/redis_6379.pid
ExecStart=/usr/local/redis/src/redis-server /usr/local/redis/redis.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true [Install]
WantedBy=multi-user.target ()启动redis
[root@redis ~]# systemctl daemon-reload
[root@redis ~]# systemctl start redis
[root@redis ~]# ps -ef |grep redis
root : ? :: /usr/local/redis/src/redis-server 127.0.0.1:
root : pts/ :: grep --color=auto redis
[root@redis ~]# netstat -tulnp |grep redis
tcp 127.0.0.1: 0.0.0.0:* LISTEN /redis-server
[root@redis ~]# redis-cli
127.0.0.1:> KEYS *
) "k1"
  • 3、redis常见操作
keys *    //取出所有key
keys my* //模糊匹配
exists name //有name键 返回1 ,否则返回0;
del key1 // 删除一个key //成功返回1 ,否则返回0;
EXPIRE key1 //设置key1 100s后过期
ttl key // 查看键 还有多长时间过期,单位是s,当 key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。 否则,返回 key 的剩余生存时间。
select //代表选择当前数据库,默认进入0 数据库
move age // 把age 移动到1 数据库
persist key1 //取消key1的过期时间
randomkey //随机返回一个key
rename oldname newname //重命名key
type key1 //返回键的类型
dbsize //返回当前数据库中key的数目
info //返回redis数据库状态信息
flushdb //清空当前数据库中所有的键
flushall //清空所有数据库中的所有的key
bgsave //保存数据到 rdb文件中,在后台运行
save //作用同上,但是在前台运行
config get * //获取所有配置参数
config get dir //获取配置参数
config set dir //更改配置参数
数据恢复: 首先定义或者确定dir目录和dbfilename,然后把备份的rdb文件放到dir目录下面,重启redis服务即可恢复数据
  • 4、redis.conf详解
[root@redis ~]# grep "^[a-Z]" /usr/local/redis/redis.conf
bind 127.0.0.1 #绑定监听的ip地址,可以有多个监听地址,如外网需要连接,设置0.0.0. 空格分隔
protected-mode yes #是否开启保护模式,当redis.conf中没有定义bind的ip时,也就是说redis将会绑定全网IP, 并且也没有设置访问密码,这两个条件满足时,当远程的机器访问redis时,就会被限制了。建议开启。
port #监听端口
tcp-backlog #关于backlog的理解,需要先搞清楚TCP三次握手。这个tcp-backlog定义了一个队列的长度。这个队列指的是, TCP三次握手中最后一次握手完成后的那个状态的连接,该参数设定的值不能大于内核的somaxconn的值,要想设置的非常高,那么首先要将内核参数somaxconn的值提升。 somaxconn,定义了系统中每一个端口最大的监听队列的长度,这是个全局的参数,默认值为128. 限制了每个端口接收新tcp连接侦听队列的大小。对于一个经常处理新连接的高负载 web服务环境来说,默认的128太小了。 大多数环境这个值建议增加到2048或者更多。调整内核参数: echo "net.core.somaxconn = 2048" >> /etc/sysctl.conf; sysctl -p
timeout                # 当客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能
tcp-keepalive # TCP长连接保持时长。单位为秒,假如设置为60秒,则server端会每60秒向连接空闲的客户端发起一次ACK请求, 以检查客户端是否已经挂掉,对于无响应的客户端则会关闭其连接。所以关闭一个连接最长需要120秒的时间。如果设置为0,则不会进行保活检测。
daemonize yes #Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程
#启用守护进程后,Redis会把pid写到一个pidfile中,在/var/run/redis_6379.pid
supervised no       #是否通过upstart或systemd管理守护进程。默认no没有服务监控,其它选项有upstart, systemd, auto
pidfile /var/run/redis_6379.pid #pid文件路径
loglevel notice # 指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning
logfile "/var/log/redis.log" #指定日志文件路径
databases # 设置数据库的数量,默认数据库为0,可以使用select <dbid>命令在连接上指定数据库id
always-show-logo yes   #redis启动时,会打印ASCII艺术logo ################################ SNAPSHOTTING(快照备份) #################################
# 指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合
# 满足以下条件将会同步数据:
# 900秒(15分钟)内有1个更改
# 300秒(5分钟)内有10个更改
# 60秒内有10000个更改
# Note: 可以把所有“save”行注释掉,这样就取消同步操作了
save
save
save stop-writes-on-bgsave-error yes   #当save过程中出现失败的情况时,或者有某些错误时,总之导致了内存中的数据和磁盘中的数据不一致了。该参数定义此时是否继续进行save的操作。
rdbcompression yes # 指定存储至本地数据库时是否压缩数据,默认为yes,Redis采用LZF压缩
# 如果为了节省CPU时间,可以关闭该选项,但会导致数据库文件变的巨大
rdbchecksum yes # 当save完成后,是否使用CRC64算法校验rdb文件。
dbfilename dump.rdb # 指定本地数据库文件名,默认值为dump.rdb
dir /data/redis_data #数据库(dump.rdb)文件存放目录,注意,这里只能指定一个目录,不能指定文件名 ################################# REPLICATION(主从复制) #################################
# 主从复制。使用slaveof从 Redis服务器复制一个Redis实例。注意,该配置仅限于当前slave有效
# 设置当本机为slav服务时,设置master服务的ip地址及端口,在Redis启动时,它会自动从master进行数据同步
# 当master服务设置了密码保护时,slave服务连接master的密码 slaveof <masterip> <masterport> #主从复制使用,用于本机redis作为slave去连接主redis,配置主redis的ip和端口

masterauth <master-password> #当master设置密码认证,slave用此选项指定master认证密码

slave-serve-stale-data yes #当slave与master之间的连接断开或slave正在与master进行数据同步时,
如果有slave请求,当设置为yes时,slave仍然响应请求,此时可能有问题,
如果设置no时,slave会返回"SYNC with master in progress"错误信息。
但INFO和SLAVEOF命令除外。

slave-read-only yes #在从上配置,开启从只读模式,无法在从上进行写入操作

repl-diskless-sync no #是否开启主从复制的磁盘同步,默认为no。定义主从同步数据的策略,它有两种策略,一个是磁盘形式,一个是socket(就是这个diskless)形式。 磁盘形式,就是先将数据写到rdb文件里,然后传输rdb文件到从上。 socket形式,就是直接通过网络传输变更的数据到从上的rdb文件里。 repl-diskless-sync no,表示使用磁盘的形式。

repl-diskless-sync-delay #磁盘同步的时延。如果使用了通过socket的形式传输数据,则需要考虑一个主下面有多个从的情况,因为一旦基于Diskless的复制传送开始, 主就无法顾及新的从的到来。所以,就有了这个延迟的设置,比如延迟5秒,这样在主从传输数据之前,所有的从都被识别了, 这样主就可以多开几个线程来同时给所有的从进行数据传输了。

repl-disable-tcp-nodelay no #是否开启tcp时延。是否关闭tcp_nodelay功能。 关于tcp_nodelay有个nagle算法,假如需要频繁的发送一些小包数据,比如说1个字节,以IPv4为例的话, 则每个包都要附带40字节的头,也就是说,总计41个字节的数据里,其中只有1个字节是我们需要的数据。为了解决这个问题,出现了Nagle算法。 它规定:如果包的大小满足MSS,那么可以立即发送,否则数据会被放到缓冲区,等到已经发送的包被确认了之后才能继续发送。 通过这样的规定,可以降低网络里小包的数量,从而提升网络性能。该参数设置为no,即使用tcp_nodelay,数据传输到salve的延迟将会减少但要使用更多的带宽。 反之,不使用tcp_nodelay,这样Redis主将使用更少的TCP包和带宽来向slaves发送数据。 但是这将使数据传输到slave上有延迟,Linux内核的默认配置会达到40毫秒。
repl-backlog-size 1mb  #首先解释一下,这里的backlog是主上的一个内存缓冲区,它存储的数据是当主和从断开连接时,主无法将数据传给从了,这时候主先将更新的数据 暂时存放在缓存去里。如果主从再次连接时,就不需要重新传输所有数据,而是只需要传输缓冲区的这一部分即可。这个参数用来定义该缓冲区的大小。

repl-backlog-ttl 3600  #如果主Redis等了一段时间之后,还是无法连接到从Redis,那么缓冲队列中的数据将被清理掉。我们可以设置主Redis要等待的时间长度。 如果设置为0,则表示永远不清理。默认是1个小时。

replica-priority 100  #我们可以给众多的从Redis设置优先级,在主Redis持续工作不正常的情况,优先级高的从Redis将会升级为主Redis。而编号越小,优先级越高。 比如一个主Redis有三个从Redis,优先级编号分别为10、100、25,那么编号为10的从Redis将会被首先选中升级为主Redis。 当优先级被设置为0时,这个从Redis将永远也不会被选中。默认的优先级为100。

min-replicas-to-write 3 /min-replicas-max-lag 10  #假如主Redis发现有超过M个从Redis的连接延时大于N秒,那么主Redis就停止接受外来的写请求。这是因为从Redis一般会每秒钟都向主Redis发出PING, 而主Redis会记录每一个从Redis最近一次发来PING的时间点,所以主Redis能够了解每一个从Redis的运行情况。
min-replicas-to-write 3 /min-replicas-max-lag 10  #表示,假如有大于等于3个从Redis的连接延迟大于10秒,那么主Redis就不再接受外部的写请求。 上述两个配置中有一个被置为0,则这个特性将被关闭。默认情况下min-slaves-to-write为0,而min-slaves-max-lag为10。
slave-priority     # 从的权重设置

############################ 安全配置 #####################################
requirepass foobared # 设置Redis连接密码
#如果配置了连接密码,客户端在连接Redis时需要通过auth <password>命令提供密码,默认关闭 rename-command CONFIG ""   #限制CONFIG命令使用,当redis被入侵时,为了避免CONFIG命令的危险性,可以对CONFIG命令进行配置不允许使用CONFIG命令。
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
slave-lazy-flush no #是否开启从上的懒刷新,默认关闭 ############################## LIMIT(限制) ############################### maxclients #允许设置客户端最大连接数,0为不限制
maxmemory <bytes> #内存清理策略,如果达到此值,将采取以下动作:
# volatile-lru :默认策略,只对设置过期时间的key进行LRU算法删除
# allkeys-lru :删除不经常使用的key
# volatile-random :随机删除即将过期的key
# allkeys-random :随机删除一个key
# volatile-ttl :删除即将过期的key
# noeviction :不过期,写操作返回报错
maxmemory-policy volatile-lru #如果达到maxmemory值,采用此策略
maxmemory-samples #默认随机选择3个key,从中淘汰最不经常用的 ############################## APPEND ONLY MODE ############################### appendonly no #yes表示开启aof持久化。指定是否在每次更新操作后进行日志记录,
#Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。
# 因为redis本身同步数据文件是按上面save条件来同步的,
# 所以有的数据会在一段时间内只存在于内存中。默认为no

appendfilename "appendonly.aof" # 指定更新日志文件名,默认为appendonly.aof

appendfsync everysec # 指定更新日志条件,共有3个可选值:
# no:不调用fsync()函数,而是让操作系统自行决定sync的时间,这种模式下,redis的性能会最快。
# always:在每次写请求后都调用fsync()函数,这种模式下,redis相对会较慢,但是数据是最安全的。
# everysec:每秒钟调用一次fsync(),这是性能和安全的折中选择。默认情况下为该模式
no-appendfsync-on-rewrite no  #当fsync方式设置为always或everysec时,如果后台持久化进程需要执行一个很大的磁盘IO操作,那么Redis可能会在fsync()调用时卡住。 目前尚未修复这个问题,这是因为即使我们在另一个新的线程中去执行fsync(),也会阻塞住同步写调用。为了缓解这个问题,我们可以使用该配置项,这样的话,当BGSAVE或BGWRITEAOF运行时,fsync()在主进程中的调用会被阻止。 这意味着当另一路进程正在对AOF文件进行重构时,Redis的持久化功能就失效了,就好像我们设置了"appendsync no"一样。 如果Redis有时延问题,那么可以将该选项设置为yes。否则请保持no,因为这是保证数据完整性的最安全的选择。
auto-aof-rewrite-percentage
auto-aof-rewrite-min-size 64mb  #我们允许Redis自动重写aof。当aof增长到一定规模时,Redis会隐式调用BGREWRITEAOF来重写log文件,以缩减文件体积。Redis是这样工作的:Redis会记录上次重写时的aof大小。假如Redis自启动至今还没有进行过重写,那么启动时aof文件的大小会被作为基准值。 这个基准值会和当前的aof大小进行比较。如果当前aof大小超出所设置的增长比例,则会触发重写。另外还需要设置一个最小大小,是为了防止在aof很小时就触发重写。如果设置auto-aof-rewrite-percentage为0,则会关闭此重写功能。
aof-load-truncated yes  #由于某种原因(aof文件损坏)有可能导致利用aof文件恢复redis数据时发生异常,该参数决定redis服务接下来的行为。如果设置为yes,则aof文件会被加载(但数据一定不全),并且会记录日志说明情况。如果设置为no,则redis服务根本就启动不起来。
aof-use-rdb-preamble yes   #为了让用户能够同时拥有RDB和AOF两种持久化的优点, 从Redis 4.0版本开始,就推出了一个能够“鱼和熊掌兼得”的持久化方案 —— RDB-AOF 混合持久化: 这种持久化能够通过 AOF 重写操作创建出一个同时包含RDB数据和AOF数据的AOF文件, 其中RDB数据位于AOF文件的开头, 它们储存了服务器开始执行重写操作时的数据库状态:至于那些在重写操作执行之后执行的Redis命令,则会继续以AOF格式追加到AOF文件的末尾,也即是RDB数据之后。
lua-time-limit
slowlog-log-slower-than #设置慢日志记录条件,超过10000微秒记录
slowlog-max-len #慢日志最大长度
latency-monitor-threshold
notify-keyspace-events "" ############################## 虚拟内存 ##############################
vm-enabled no #是否启用虚拟内存机制,虚拟内存机将数据分页存放,
把很少访问的页放到swap上,内存占用多,最好关闭虚拟内存
vm-swap-file /var/lib/redis/redis.swap #虚拟内存文件位置
vm-max-memory #redis使用的最大内存上限,保护redis不会因过多使用物理内存影响性能
vm-page-size #每个页面的大小为32字节
vm-pages #设置swap文件中页面数量
vm-max-threads #访问swap文件的线程数 ############################## 高级配置 ##############################
hash-max-ziplist-entries #哈希表中元素(条目)总个数不超过设定数量时,采用线性紧凑格式存储来节省空间
hash-max-ziplist-value #哈希表中每个value的长度不超过多少字节时,采用线性紧凑格式存储来节省空间
list-max-ziplist-entries #list数据类型多少节点以下会采用去指针的紧凑存储格式
list-max-ziplist-value #list数据类型节点值大小小于多少字节会采用紧凑存储格式
list-compress-depth
set-max-intset-entries #set数据类型内部数据如果全部是数值型,且包含多少节点以下会采用紧凑格式存储
zset-max-ziplist-entries
zset-max-ziplist-value
hll-sparse-max-bytes
activerehashing yes # 指定是否激活重置哈希,默认为开启
client-output-buffer-limit normal
client-output-buffer-limit slave 256mb 64mb
client-output-buffer-limit pubsub 32mb 8mb
hz
aof-rewrite-incremental-fsync yes
  •  5、PHP中使用redis

在php中使用redis,必须安装php的redis扩展模块,pecl方法安装如下:

/usr/local/php-fpm/bin/pecl install redis

vi  /usr/local/php/etc/php.ini  //增加extension = redis.so

源码安装redis扩展如下:

wget https://github.com/phpredis/phpredis/archive/4.2.0.tar.gz
mv 4.2..tar.gz php-redis.tar.gz
tar zxvf php-redis.tar.gz
cd phpredis-4.2./
/usr/local/php-fpm/bin/phpize
./configure --with-php-config=/usr/local/php-fpm/bin/php-config
make && make install
vi /usr/local/php/etc/php.ini //增加extension = redis.so

php中使用redis进行session保存:

root@localhost ~]# vim /etc/php.ini
[Session] #在Session模块下增加
session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379" [root@localhost ~]# php-fpm -t
[-Apr- ::] NOTICE: configuration file /etc/php-fpm.conf test is successful [root@localhost ~]# systemctl reload php-fpm

创建测试文件,进行测试session保存:

[root@localhost ~]# wget http://study.lishiming.net/.mem_se.txt
[root@localhost ~]# mv .mem_se.txt session.php [root@localhost ~]# php session.php
<br><br><br><br>n0r96n9fdkdctv2jcossvog4vq [root@localhost ~]# redis-cli
127.0.0.1:> KEYS *
) "PHPREDIS_SESSION:n0r96n9fdkdctv2jcossvog4vq"
) "ke1" 127.0.0.1:> GET PHPREDIS_SESSION:n0r96n9fdkdctv2jcossvog4vq
"TEST|i:1555402526;TEST3|i:1555402526;"

Redis学习之路(二)之Redis入门基础的更多相关文章

  1. Redis——学习之路二(初识redis服务器命令)

    上一章我们已经知道了如果启动redis服务器,现在我们来学习一下,以及如何用客户端连接服务器.接下来我们来学习一下查看操作服务器的命令. 服务器命令: 1.info——当前redis服务器信息   s ...

  2. Redis学习笔记(二)Redis支持的5种数据类型的总结之String和Hash

    引言 在Redis学习笔记(一)中我们已经会安装并且简单使用Redis了,接下来我们一起来学习下Redis支持的5大数据类型. 简介 Redis是REmote DIctionary Server(远程 ...

  3. Redis学习笔记(二) Redis 数据类型

    Redis 支持五种数据类型:string(字符串).list(列表).hash(哈希).set(集合)和 zset(有序集合),接下来我们讲解分别讲解一下这五种类型的的使用. String(字符串) ...

  4. Redis学习笔记(二)redis 底层数据结构

    在上一节提到的图中,我们知道,可以通过 redisObject 对象的 type 和 encoding 属性.可以决定Redis 主要的底层数据结构:SDS.QuickList.ZipList.Has ...

  5. redis学习心得之二【redis主从配置】

    在前一节我们已经实践启动了一个redis服务,我们将其作为主机,现为其创建一个从机作备份使用 1.复制一份配置出来为从机所用 ~$ cp       redis/etc/redis.conf     ...

  6. Redis——学习之路四(初识主从配置)

    首先我们配置一台master服务器,两台slave服务器.master服务器配置就是默认配置 端口为6379,添加就一个密码CeshiPassword,然后启动master服务器. 两台slave服务 ...

  7. Redis——学习之路三(初识redis config配置)

    我们先看看config 默认情况下系统是怎么配置的.在命令行中输入 config get *(如图) 默认情况下有61配置信息,每一个命令占两行,第一行为配置名称信息,第二行为配置的具体信息.     ...

  8. Redis学习笔记(二)-key相关命令【转载】

    转自 Redis学习笔记(二)-key相关命令 - 点解 - 博客园http://www.cnblogs.com/leny/p/5638764.html Redis支持的各种数据类型包括string, ...

  9. Redis学习之路(000)- 目录

    本文是博主学习整理网上大神的文件以及自学的心得. Redis学习之路(000)- 目录 Redis学习之路(001)- Redis介绍以及安装(Linux) Redis学习之路(002)- Ubunt ...

  10. Redis学习笔记(三)Redis支持的5种数据类型的总结

    继续Redis学习笔记(二)来说说剩余的三种数据类型. 三.列表类型(List) 1.介绍 列表类型可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者获得列表的一段片段.列表类型内部是 ...

随机推荐

  1. mysql性能优化-慢查询分析、优化索引和配置 (慢查询日志,explain,profile)

    mysql性能优化-慢查询分析.优化索引和配置 (慢查询日志,explain,profile) 一.优化概述 二.查询与索引优化分析 1性能瓶颈定位 Show命令 慢查询日志 explain分析查询 ...

  2. 转:iBatis简单入门教程

    iBatis 简介: iBatis 是apache 的一个开源项目,一个O/R Mapping 解决方案,iBatis 最大的特点就是小巧,上手很快.如果不需要太多复杂的功能,iBatis 是能够满足 ...

  3. 山寨"每日故宫"应用的图层遮罩效果

    山寨"每日故宫"应用的图层遮罩效果 最终效果: 应用中的效果: 素材图片: 源码: // // ViewController.m // 每日故宫 // // Created by ...

  4. 如何在C++中动态建立二维数组(转)

    http://blog.sina.com.cn/s/blog_7c073a8d0100qp1w.html http://blog.163.com/wujiaxing009@126/blog/stati ...

  5. #001 GIT创建分支

    GitHub创建分支 如何在github 创建 一个分支出来,进行开发,最后在 merge 到主干上. Git 操作命令 git branch branchName //创建一个分支 git chec ...

  6. web应用安全发展与介绍

    安全与安全圈的认识 中国黑客的发展过程:1990年代初,部分人开始研究黑客技术 1997-1999年,黑客团队涌现,进入黄金时代, 21世纪初,黑客工具傻瓜化,门槛降低,黑客精神不在… 圈内熟知的安全 ...

  7. javascript 中isPrototypeOf 、hasOwnProperty、constructor、prototype等用法

    hasOwnProperty:是用来判断一个对象是否有你给出名称的属性或对象,此方法无法检查该对象的原型链中是否具有该属性,该属性必须是对象本身的一个成员. isPrototypeOf是用来判断要检查 ...

  8. 10、Android--技巧

    10.1.全局获取Context的技巧 在实践中有很多的地方都可以使用到Context 弹出Toast的时候需要,启动活动的时候需要.发送广播的时候需要. 操作数据库的时候需要.使用通知的时候需要.. ...

  9. Python中乘法

    1.numpy乘法运算中"*"或multiply(),是数组元素逐个计算,具体代码如下: import numpy as np # 2-D array: 2 x 3 two_dim ...

  10. node vue 开发环境部署时,外部访问页面出现: Invalid Host header 服务器域名访问出现的问题

    这是新版本 webpack-dev-server  出于安全考虑, 默认检查 hostname,如果hostname不是配置内的,将中断访问.顾仅存在于开发环境: npm run dev,打包之后不会 ...