文章目录
1.14.3. 将下载的jar包放在每个应用服务器的Tomcat中
SQL
MogoDB
,用于存储JSON文档
Key_Value
数据库MemoryCache
Redis
Key_Value
数据库yum -y install redis
systemctl start redis.service
ps -A | grep redis
: 查看redis进程systemctl restart redis.service
systemctl stop redis.service
export PATH=/usr/local/redis/bin:$PATH
redis-server
: 启动redisredis-cli
,默认端口为6379
value
的类型,key
的类型永远都是字符串key
set key value
: 设置key的值为value,如果已经有值了,那么就会覆盖旧值set message "hello world"
set key value EX seconds
设置key的值,并且过期时间为秒set message "beijing" EX 10
: 10秒之后过期get key
: 获取指定key的值get message
del key
: 删除指定的keyappend key value
: 在指定的key后面追加值decr key
: 如果key中存储的是一个数字,那么这个值将会减一,如果不是数字报错set a "10"
,desr a
: 执行这两个命令之后,a的值就是"9"
、decrby key number
: 减少numberdecrby a 10
incr key
: 如果key中存储的是一个数据,那么值将会加一incr a
incrby key number
: 如果key中存储的数据是一个整型数据,那么增加number
incrby a 10
: a对应的整型数据+10incrbyfloat key number
: 增加浮点数incrbyfloat a 10.4
:增加10.4incrbyfloat a -10.5
: 减少10.5str key
: 获取指定key的长度mset a "cen" b "ceg"
:同时设置多个key-valuemegt key1 key2 ..........
: 同时获取多个key的值key
是字符串的类型,其中的value是Hash类型,形式如下:value
就是成员变量的字段和对应的值hset key field value
: 为指定的key设置其中的域为field的值为value
hset user name "chenjiabing"
: 设置key为user
的name
域的值为chenjiabing
hset user age "22"
hset user password "123456"
user={
"name":"chenjiabing",
"age":"22",
"password":"123456"
}
hget key field
: 获取指定key中的域为field
的值hget user name
: 获取name的值hdel key field
: 删除指定的域hdel user name
: 删除user中的name域双向队列
,可以在左侧插入,左侧取出,右侧插入,右侧取出lpush key value .....
: 从左侧插入一个或者多个valuelpush list 1 32 3 "chenjiabing"
: 在左侧插入4个valuelpop key
: 从左侧取出一个值,那么此时的list的长度就会减一lpop list
: 取出一个值rpush key value .....
: 从右侧插入一个或者多个值rpush list 1 3 4
rpop key
: 从右侧取出一个值rpop list
: 从右侧取出一个值,那么长度减一LLEN key
: 查看长度LLEN list
BRPOP key timeout
:阻塞从右侧取值, 从右侧取出数据,如果其中的数据为空,那么等待timeout秒
,如果其中一旦插入数据就会立即返回BROP list 60
: 从右侧取出list中的数据,如果list中没有数据那么等待60s
,如果一旦其中插入了数据,会立即返回数据BLPOP key timeout
: 阻塞从左侧取值BLPOP list 60
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
6379
端口firewall-cmd --zone=public --add-port=6379/tcp
firewall not running
start firewalld.service
//操作String类型的数据
@Test
public void testString(){
Jedis jedis=new Jedis("47.104.192.157"); //创建jedis对象,其中的参数是IP地址,如果是本地写localhost
jedis.set("name", "chenjiabing"); //添加一个String 类型的数据 key为name
jedis.get("name"); //获取key为name的值
jedis.del("name"); //删除key为name的数据
jedis.close();
}
//测试Hash类型
@Test
public void testHashSet(){
Jedis jedis=new Jedis("localhost");
jedis.hset("user", "name","陈加兵"); //添加一个key为user的Hash类型的数据
jedis.hset("user", "age", "22"); //添加age
jedis.hincrBy("user", "age", 200); //年龄增加200
String name=jedis.hget("user", "name"); //获取name的值
Integer age=Integer.parseInt(jedis.hget("user", "age")); //获取age的值,转换为Integer类型
System.out.println(name);
System.out.println(age);
jedis.close();
}
//测试List类型
@Test
public void testList(){
Jedis jedis=new Jedis("localhost");
jedis.lpush("list", "陈加兵"); //从左侧添加一个值
System.out.println(jedis.llen("list")); //获取长度
jedis.lpush("list", "1","2","TOM"); //左侧存放多个值
System.out.println(jedis.rpop("list")); //从右侧取出
jedis.close();
}
session
,但是可能再次请求的时候,Nginx会把请求分发给另外一个应用服务器,那么又需要重新登录一次。我们可以使用Nginx的ip_hash
策略解决这个问题,但是我们也可以使用Redis解决session id
存放在Redis
中,每一个应用服务器都从Redis中获取Session id
Redis
,并且所有的应用服务器(Tomcat)共享这个远程数据库,那么Redis中的sessionId
才能实现共享存取Redis Session Manage for Apache Tomcat
Tomcat8.*
SessionId
共享
Tomcat
目录中的lib
文件夹下
Tomcat
目录下的conf/context.xml
中添加如下内容<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
host="47.104.192.157" <!-- 服务器的IP,这个是Redis数据库所在服务器的IP -->
port="6379" <!-- 端口 "6379" -->
database="0" <!-- optional: defaults to "0" -->
maxInactiveInterval="60" /> <!-- 失效时间 "60" (in seconds) -->