1.1.    Redis的安装
Redis是c语言开发的。
安装redis需要c语言的编译环境。如果没有gcc需要在线安装。yum install gcc-c++ 安装步骤:
第一步:redis的源码包上传到linux系统。
第二步:解压缩redis。
第三步:编译。进入redis源码目录。make
第四步:安装。make install PREFIX=/usr/local/redis
PREFIX参数指定redis的安装目录。一般软件安装到/usr目录下
1.2. 连接redis
1.2.. redis的启动:
前端启动:在redis的安装目录下直接启动redis-server
[root@localhost bin]# ./redis-server 后台启动:
把/root/redis-3.0./redis.conf复制到/usr/local/redis/bin目录下
[root@localhost redis-3.0.]# cp redis.conf /usr/local/redis/bin/
修改配置文件: [root@localhost bin]# ./redis-server redis.conf
查看redis进程:
[root@localhost bin]# ps aux|grep redis
root 0.1 0.3 ? Ssl : : ./redis-server *:
root 0.0 0.1 pts/ S+ : : grep redis
[root@localhost bin]# 3.2.. Redis-cli
[root@localhost bin]# ./redis-cli
默认连接localhost运行在6379端口的redis服务。
[root@localhost bin]# ./redis-cli -h 192.168.124.130 -p
-h:连接的服务器的地址
-p:服务的端口号 关闭redis:[root@localhost bin]# ./redis-cli shutdown 3.3. Redis五种数据类型
String:key-value(做缓存)
Redis中所有的数据都是字符串。命令不区分大小写,key是区分大小写的。Redis是单线程的。Redis中不适合保存内容大的数据。
get、set、
incr:加一(生成id)
Decr:减一 Hash:key-fields-values(做缓存)
相当于一个key对于一个map,map中还有key-value
使用hash对key进行归类。
Hset:向hash中添加内容
Hget:从hash中取内容 List:有顺序可重复
192.168.124.130:> lpush list1 a b c d
(integer)
192.168.124.130:> lrange list1 -
) "d"
) "c"
) "b"
) "a"
192.168.124.130:> rpush list1
(integer)
192.168.124.130:> lrange list1 -
) "d"
) "c"
) "b"
) "a"
) ""
) ""
) ""
) ""
192.168.124.130:>
192.168.124.130:> lpop list1
"d"
192.168.124.130:> lrange list1 -
) "c"
) "b"
) "a"
) ""
) ""
) ""
) ""
192.168.124.130:> rpop list1
""
192.168.124.130:> lrange list1 -
) "c"
) "b"
) "a"
) ""
) ""
) ""
192.168.124.130:> Set:元素无顺序,不能重复
192.168.124.130:> sadd set1 a b c c c d
(integer)
192.168.124.130:> smembers set1
) "b"
) "c"
) "d"
) "a"
192.168.124.130:> srem set1 a
(integer)
192.168.124.130:> smembers set1
) "b"
) "c"
) "d"
192.168.124.130:>
还有集合运算命令,自学。 SortedSet(zset):有顺序,不能重复
192.168.124.130:> zadd zset1 a b c d
(integer)
192.168.124.130:> zrange zset1 -
) "c"
) "a"
) "b"
) "d"
192.168.124.130:> zrem zset1 a
(integer)
192.168.124.130:> zrange zset1 -
) "c"
) "b"
) "d"
192.168.124.130:> zrevrange zset1 -
) "d"
) "b"
) "c"
192.168.124.130:> zrange zset1 - withscores
) "c"
) ""
) "b"
) ""
) "d"
) ""
192.168.124.130:> zrevrange zset1 - withscores
) "d"
) ""
) "b"
) ""
) "c"
) ""
192.168.124.130:> 1.4. Key命令
设置key的过期时间。
Expire key second:设置key的过期时间
Ttl key:查看key的有效期
Persist key:清除key的过期时间。Key持久化。 192.168.124.130:> expire Hello
(integer)
192.168.124.130:> ttl Hello
(integer)
. Redis的持久化方案
Redis的所有数据都是保存到内存中的。
Rdb:快照形式,定期把内存中当前时刻的数据保存到磁盘。Redis默认支持的持久化方案。
aof形式:append only file。把所有对redis数据库操作的命令,增删改操作的命令。保存到文件中。数据库恢复时把所有的命令执行一遍即可。 在redis.conf配置文件中配置。
Rdb: Aof的配置: 两种持久化方案同时开启使用aof文件来恢复数据库。 . Redis集群的搭建
3.1. redis-cluster架构图 redis-cluster投票:容错 架构细节:
()所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.
()节点的fail是通过集群中超过半数的节点检测失效时才生效.
()客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
()redis-cluster把所有的物理节点映射到[-]slot上,cluster 负责维护node<->slot<->value
Redis 集群中内置了 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 求余数,这样每个 key 都会对应一个编号在 - 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点 3.2. Redis集群的搭建
Redis集群中至少应该有三个节点(投票容错)。要保证集群的高可用,需要每个节点有一个备份机。
Redis集群至少需要6台服务器。
搭建伪分布式。可以使用一台虚拟机运行6个redis实例。需要修改redis的端口号7001-
3.2.. 集群搭建环境
、使用ruby脚本搭建集群。需要ruby的运行环境。
安装ruby
yum install ruby
yum install rubygems 、安装ruby脚本运行使用的包。
[root@localhost ~]# gem install redis-3.0..gem
Successfully installed redis-3.0.
gem installed
Installing ri documentation for redis-3.0....
Installing RDoc documentation for redis-3.0....
[root@localhost ~]# [root@localhost ~]# cd redis-3.0./src
[root@localhost src]# ll *.rb
-rwxrwxr-x. root root Apr redis-trib.rb 3.2.. 搭建步骤
需要6台redis服务器。搭建伪分布式。
需要6个redis实例。
需要运行在不同的端口7001- 第一步:创建6个redis实例,每个实例运行在不同的端口。需要修改redis.conf配置文件。配置文件中还需要把cluster-enabled yes前的注释去掉。 第二步:启动每个redis实例。
第三步:使用ruby脚本搭建集群。
./redis-trib.rb create --replicas 192.168.124.130: 192.168.124.130: 192.168.124.130: 192.168.124.130: 192.168.124.130: 192.168.124.130: 创建关闭集群的脚本:
[root@localhost redis-cluster]# vim shutdow-all.sh
redis01/redis-cli -p shutdown
redis01/redis-cli -p shutdown
redis01/redis-cli -p shutdown
redis01/redis-cli -p shutdown
redis01/redis-cli -p shutdown
redis01/redis-cli -p shutdown
[root@localhost redis-cluster]# chmod u+x shutdow-all.sh [root@localhost redis-cluster]# ./redis-trib.rb create --replicas 192.168.124.130: 192.168.124.130: 192.168.124.130: 192.168.124.130: 192.168.124.130: 192.168.124.130:
>>> Creating cluster
Connecting to node 192.168.124.130:: OK
Connecting to node 192.168.124.130:: OK
Connecting to node 192.168.124.130:: OK
Connecting to node 192.168.124.130:: OK
Connecting to node 192.168.124.130:: OK
Connecting to node 192.168.124.130:: OK
>>> Performing hash slots allocation on nodes...
Using masters:
192.168.124.130:
192.168.124.130:
192.168.124.130:
Adding replica 192.168.124.130: to 192.168.124.130:
Adding replica 192.168.124.130: to 192.168.124.130:
Adding replica 192.168.124.130: to 192.168.124.130:
M: 2e48ae301e9c32b04a7d4d92e15e98e78de8c1f3 192.168.124.130:
slots:- ( slots) master
M: 8cd93a9a943b4ef851af6a03edd699a6061ace01 192.168.124.130:
slots:- ( slots) master
M: 2935007902d83f20b1253d7f43dae32aab9744e6 192.168.124.130:
slots:- ( slots) master
S: 74f9d9706f848471583929fc8bbde3c8e99e211b 192.168.124.130:
replicates 2e48ae301e9c32b04a7d4d92e15e98e78de8c1f3
S: 42cc9e25ebb19dda92591364c1df4b3a518b795b 192.168.124.130:
replicates 8cd93a9a943b4ef851af6a03edd699a6061ace01
S: 8b1b11d509d29659c2831e7a9f6469c060dfcd39 192.168.124.130:
replicates 2935007902d83f20b1253d7f43dae32aab9744e6
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join.....
>>> Performing Cluster Check (using node 192.168.124.130:)
M: 2e48ae301e9c32b04a7d4d92e15e98e78de8c1f3 192.168.124.130:
slots:- ( slots) master
M: 8cd93a9a943b4ef851af6a03edd699a6061ace01 192.168.124.130:
slots:- ( slots) master
M: 2935007902d83f20b1253d7f43dae32aab9744e6 192.168.124.130:
slots:- ( slots) master
M: 74f9d9706f848471583929fc8bbde3c8e99e211b 192.168.124.130:
slots: ( slots) master
replicates 2e48ae301e9c32b04a7d4d92e15e98e78de8c1f3
M: 42cc9e25ebb19dda92591364c1df4b3a518b795b 192.168.124.130:
slots: ( slots) master
replicates 8cd93a9a943b4ef851af6a03edd699a6061ace01
M: 8b1b11d509d29659c2831e7a9f6469c060dfcd39 192.168.124.130:
slots: ( slots) master
replicates 2935007902d83f20b1253d7f43dae32aab9744e6
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All slots covered.
[root@localhost redis-cluster]# 3.3. 集群的使用方法
Redis-cli连接集群。
[root@localhost redis-cluster]# redis01/redis-cli -p -c
-c:代表连接的是redis集群 . Jedis
需要把jedis依赖的jar包添加到工程中。Maven工程中需要把jedis的坐标添加到依赖。 推荐添加到服务层4.1. 连接单机版
第一步:创建一个Jedis对象。需要指定服务端的ip及端口。
第二步:使用Jedis对象操作数据库,每个redis命令对应一个方法。
第三步:打印结果。
第四步:关闭Jedis
@Test
public void testJedis() throws Exception {
// 第一步:创建一个Jedis对象。需要指定服务端的ip及端口。
Jedis jedis = new Jedis("192.168.124.130", );
// 第二步:使用Jedis对象操作数据库,每个redis命令对应一个方法。
String result = jedis.get("hello");
// 第三步:打印结果。
System.out.println(result);
// 第四步:关闭Jedis
jedis.close();
} 4.2. 连接单机版使用连接池
第一步:创建一个JedisPool对象。需要指定服务端的ip及端口。
第二步:从JedisPool中获得Jedis对象。
第三步:使用Jedis操作redis服务器。
第四步:操作完毕后关闭jedis对象,连接池回收资源。
第五步:关闭JedisPool对象。
@Test
public void testJedisPool() throws Exception {
// 第一步:创建一个JedisPool对象。需要指定服务端的ip及端口。
JedisPool jedisPool = new JedisPool("192.168.124.130", );
// 第二步:从JedisPool中获得Jedis对象。
Jedis jedis = jedisPool.getResource();
// 第三步:使用Jedis操作redis服务器。
jedis.set("jedis", "test");
String result = jedis.get("jedis");
System.out.println(result);
// 第四步:操作完毕后关闭jedis对象,连接池回收资源。
jedis.close();
// 第五步:关闭JedisPool对象。
jedisPool.close();
} 4.3. 连接集群版
第一步:使用JedisCluster对象。需要一个Set<HostAndPort>参数。Redis节点的列表。
第二步:直接使用JedisCluster对象操作redis。在系统中单例存在。
第三步:打印结果
第四步:系统关闭前,关闭JedisCluster对象。 @Test
public void testJedisCluster() throws Exception {
// 第一步:使用JedisCluster对象。需要一个Set<HostAndPort>参数。Redis节点的列表。
Set<HostAndPort> nodes = new HashSet<>();
nodes.add(new HostAndPort("192.168.124.130", ));
nodes.add(new HostAndPort("192.168.124.130", ));
nodes.add(new HostAndPort("192.168.124.130", ));
nodes.add(new HostAndPort("192.168.124.130", ));
nodes.add(new HostAndPort("192.168.124.130", ));
nodes.add(new HostAndPort("192.168.124.130", ));
JedisCluster jedisCluster = new JedisCluster(nodes);
// 第二步:直接使用JedisCluster对象操作redis。在系统中单例存在。
jedisCluster.set("hello", "");
String result = jedisCluster.get("hello");
// 第三步:打印结果
System.out.println(result);
// 第四步:系统关闭前,关闭JedisCluster对象。
jedisCluster.close();
} . 向业务逻辑中添加缓存
5.1. 接口封装
常用的操作redis的方法提取出一个接口,分别对应单机版和集群版创建两个实现类。 5.1.. 接口定义
public interface JedisClient { String set(String key, String value);
String get(String key);
Boolean exists(String key);
Long expire(String key, int seconds);
Long ttl(String key);
Long incr(String key);
Long hset(String key, String field, String value);
String hget(String key, String field);
Long hdel(String key, String... field);
} 5.1.. 单机版实现类
public class JedisClientPool implements JedisClient { @Autowired
private JedisPool jedisPool; @Override
public String set(String key, String value) {
Jedis jedis = jedisPool.getResource();
String result = jedis.set(key, value);
jedis.close();
return result;
} @Override
public String get(String key) {
Jedis jedis = jedisPool.getResource();
String result = jedis.get(key);
jedis.close();
return result;
} @Override
public Boolean exists(String key) {
Jedis jedis = jedisPool.getResource();
Boolean result = jedis.exists(key);
jedis.close();
return result;
} @Override
public Long expire(String key, int seconds) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.expire(key, seconds);
jedis.close();
return result;
} @Override
public Long ttl(String key) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.ttl(key);
jedis.close();
return result;
} @Override
public Long incr(String key) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.incr(key);
jedis.close();
return result;
} @Override
public Long hset(String key, String field, String value) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.hset(key, field, value);
jedis.close();
return result;
} @Override
public String hget(String key, String field) {
Jedis jedis = jedisPool.getResource();
String result = jedis.hget(key, field);
jedis.close();
return result;
} @Override
public Long hdel(String key, String... field) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.hdel(key, field);
jedis.close();
return result;
} } 配置:applicationContext-redis.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans4.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context4.2.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx4.2.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util4.2.xsd"> <!-- 配置单机版的连接 -->
<bean id="jedisPool" class="redis.clients.jedis.JedisPool">
<constructor-arg name="host" value="192.168.124.130"></constructor-arg>
<constructor-arg name="port" value=""></constructor-arg>
</bean>
<bean id="jedisClientPool" class="com.taotao.jedis.JedisClientPool"/> </beans> 5.1.. 集群版实现类
package com.taotao.jedis; import org.springframework.beans.factory.annotation.Autowired; import redis.clients.jedis.JedisCluster; public class JedisClientCluster implements JedisClient { @Autowired
private JedisCluster jedisCluster; @Override
public String set(String key, String value) {
return jedisCluster.set(key, value);
} @Override
public String get(String key) {
return jedisCluster.get(key);
} @Override
public Boolean exists(String key) {
return jedisCluster.exists(key);
} @Override
public Long expire(String key, int seconds) {
return jedisCluster.expire(key, seconds);
} @Override
public Long ttl(String key) {
return jedisCluster.ttl(key);
} @Override
public Long incr(String key) {
return jedisCluster.incr(key);
} @Override
public Long hset(String key, String field, String value) {
return jedisCluster.hset(key, field, value);
} @Override
public String hget(String key, String field) {
return jedisCluster.hget(key, field);
} @Override
public Long hdel(String key, String... field) {
return jedisCluster.hdel(key, field);
} } Spring的配置:
<!-- 集群版的配置 -->
<bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">
<constructor-arg>
<set>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.124.130"></constructor-arg>
<constructor-arg name="port" value=""></constructor-arg>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.124.130"></constructor-arg>
<constructor-arg name="port" value=""></constructor-arg>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.124.130"></constructor-arg>
<constructor-arg name="port" value=""></constructor-arg>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.124.130"></constructor-arg>
<constructor-arg name="port" value=""></constructor-arg>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.124.130"></constructor-arg>
<constructor-arg name="port" value=""></constructor-arg>
</bean>
<bean class="redis.clients.jedis.HostAndPort">
<constructor-arg name="host" value="192.168.124.130"></constructor-arg>
<constructor-arg name="port" value=""></constructor-arg>
</bean>
</set>
</constructor-arg>
</bean>
<bean id="jedisClientCluster" class="com.taotao.jedis.JedisClientCluster"/> 注意:单机版和集群版不能共存,使用单机版时注释集群版的配置。使用集群版,把单机版注释。 5.2. 封装代码测试
@Test
public void testJedisClient() throws Exception {
//初始化Spring容器
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-*.xml");
//从容器中获得JedisClient对象
JedisClient jedisClient = applicationContext.getBean(JedisClient.class);
jedisClient.set("first", "");
String result = jedisClient.get("first");
System.out.println(result); } 5.3. 添加缓存
5.3.. 功能分析
查询内容列表时添加缓存。
、查询数据库之前先查询缓存。
、查询到结果,直接响应结果。
、查询不到,缓存中没有需要查询数据库。
、把查询结果添加到缓存中。
、返回结果。 向redis中添加缓存:
Key:cid
Value:内容列表。需要把java对象转换成json。 使用hash对key进行归类。
HASH_KEY:HASH
|--KEY:VALUE
|--KEY:VALUE
|--KEY:VALUE
|--KEY:VALUE 注意:添加缓存不能影响正常业务逻辑。 5.3.. 代码实现
@Override
public List<TbContent> getContentList(long cid) {
//查询缓存
try {
String json = jedisClient.hget(CONTENT_KEY, cid + "");
//判断json是否为空
if (StringUtils.isNotBlank(json)) {
//把json转换成list
List<TbContent> list = JsonUtils.jsonToList(json, TbContent.class);
return list;
}
} catch (Exception e) {
e.printStackTrace();
}
//根据cid查询内容列表
TbContentExample example = new TbContentExample();
//设置查询条件
Criteria criteria = example.createCriteria();
criteria.andCategoryIdEqualTo(cid);
//执行查询
List<TbContent> list = contentMapper.selectByExample(example);
//向缓存中添加数据
try {
jedisClient.hset(CONTENT_KEY, cid + "", JsonUtils.objectToJson(list));
} catch (Exception e) {
e.printStackTrace();
}
return list;
} 5.4. 缓存同步
对内容信息做增删改操作后只需要把对应缓存删除即可。

安装过程遇到问题解决方案:http://blog.csdn.net/chenggong2dm/article/details/51911053

centos7下部署Redis的更多相关文章

  1. Linux CentOs7 下安装 redis

    Linux CentOs7 下安装 redis 请将以下命令放入linux命令行中运行 如果安装过程前没有安装GCC请先安装  命令如下 $ yum install gcc-c++ $ wget ht ...

  2. Centos7下部署两套python版本并存

    Centos7下部署两套python版本并存   需求说明:centos7.2系统的开发机器上已经自带了python2.7版本,但是开发的项目中用的是python3.5版本,为了保证Centos系统的 ...

  3. Centos7下安装redis并能使得外网访问

    一.安装脚本 #!/bin/bash #FileName: install_redis_centos7.sh #Date: #Author: LiLe #Contact: @qq.com #Versi ...

  4. CentOS7下部署rsync服务

    说明: 在CentOS7下部署rsync服务和在CentOS6上部署基本上是一样的,只是CentOS7自带了rsyncd启动脚本,由systemd管理而已. rsync服务端配置 [root@SERV ...

  5. CentOS下部署Redis集群

    一.部署环境 服务器三台: 10.10.15.41(配置运行两个实例,端口:6379,6380) 10.10.15.42(配置运行两个实例,端口:6381,6382) 10.10.15.43(配置运行 ...

  6. Centos7下安装redis实战(单机版以及集群)

    一.背景 因项目需要,要引入redis做缓存,就在centos7下亲自安装了一遍redis,刚好趁着这个机会就来把redis的概念以及单机版和集群版redis安装步骤记录下来,在此和大家一起分享. 二 ...

  7. CentOS7下搭建Redis主从复制

    (1).实验环境 youxi1 192.168.1.6 Master服务器 youxi2 192.168.1.7 Slave服务器 (2).实验 1)两台服务器上yum安装Redis,启动并设置开机自 ...

  8. CentOS7下安装Redis

    一.下载redis wget http://download.redis.io/releases/redis-4.0.6.tar.gz 二.解压 tar -zxvf redis-4.0.6.tar.g ...

  9. centos7下安装redis的步骤

    原贴地址:https://www.cnblogs.com/zuidongfeng/p/8032505.html 我linux服务器上是这样启动的: cd /tool/redis/redis-3.2.8 ...

随机推荐

  1. 2019-03-28 git github SSH配置,上传下载操作

    1.通过git获取scrapy源码,并安装到系统里面 https://git-scm.com/download/win 下载无脑安装啊(C:\Program Files\Git),进入git bash ...

  2. 利用Tensorflow实现手写字符识别

    模式识别领域应用机器学习的场景非常多,手写识别就是其中一种,最简单的数字识别是一个多类分类问题,我们借这个多类分类问题来介绍一下google最新开源的tensorflow框架,后面深度学习的内容都会基 ...

  3. 工具-VMWARE技巧-桥接连外网-WIN7

    使用虚拟机wmware如何连接宿主主机 最简单的方法,使用直接连接主机的模式,然后把宿主机的IP更改为和虚拟机同一个网段的机器就行 但是既要上网,有要连接虚拟机,就需要使用桥接,在编辑->虚拟网 ...

  4. [Node.js] Proxy Requests for Local and Remote Service Parity

    High availability apps require that no distinction be made between local and remote services. Attach ...

  5. Android仿IOS的AssistiveTouch的控件EasyTouch实现

    概述: 之前我听到过一则新闻,就是说Ipone中的AssistiveTouch的设计初衷是给残疾人使用的. 而这一功能在亚洲(中国)的使用最为频繁. 虽不知道这新闻的可靠性,但无庸置疑的是它的确给我们 ...

  6. Android实现能够揉动的图片

    public class Demo01 extends Activity{ private Bitmap bitmap = null; @Override protected void onCreat ...

  7. 【DataStructure】The difference among methods addAll(),retainAll() and removeAll()

    In the Java collection framework, there are three similar methods, addAll(),retainAll() and removeAl ...

  8. 点击了一个link button,查看后台调用

    使用F12进行监视 本身是一个linkbutton,可以看到绑定了一个JavaScript <a id="gvStaticConnection_ctl02_fresh" hr ...

  9. 一个Python项目的创建架构

    要进行Python项目的编写,很多人刚开始一筹莫展,不知道该如何去构建一个项目,现在粗略的描述一下一个项目的创建过程,供大家参考了解一下: 大家可以先忽略其中创建的函数 ,每个包的含义都有定义,大家可 ...

  10. SQL Server的三种分页方式

    直接上代码 --top not in方式 select top 条数 * from tablename where Id not in (select top 条数*页数 Id from tablen ...