Redis基础
一、Java缓存机制
什么是Jvm内置缓存?
答:值存放在jvm缓存中。
mybatis、hibernate二级缓存机制,是sessionFactory级别。
什么是noql缓存?
答:
相同点:都是存放在内存中。
mybatis二级缓存机制默认使用的是oscache
hibernate二级缓存机制默认使用的是ehcache
oscache与ehcache
: 属于jvm内置缓存
oscache:主要针对的是数据库访问层
ehcache:主要针对的是jsp页面缓存。
与session类似,就是加了一个static关键字,存放在服务器内存上
JVM缓存有什么缺点:
会产生内存溢出,没有持久化机制。在分布式情况下会产生线程安全、
多服务器不能共享。
解决:使用NOSQL非关系型数据库:
redis、mogodb、hbase、memcacha
二、使用java操作Ehcache
缓存流程 提高查询效率
ehcache缓存支持:使用springBoot项目演示。
第一步:导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
第二步:建立ehcache.xml 文件
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
updateCheck="false">
<diskStore path="java.io.tmpdir/Tmp_EhCache" />
<!-- 默认配置 -->
<defaultCache maxElementsInMemory="5000" eternal="false"
timeToIdleSeconds="120" timeToLiveSeconds="120"
memoryStoreEvictionPolicy="LRU" overflowToDisk="false" />
<cache name="baseCache" maxElementsInMemory="10000"
maxElementsOnDisk="100000" />
</ehcache>
第三步:@CacheConfig(cacheManager="baseCache")
@Cacheable 加在查询语句上 ,插入不需要加什么缓存的
加在dao层如图:
@EnableCaching 缓存开启注解 加在App.java上
三、nosql数据库简介
什么是nosql?非关系型数据库
关系型数据库:mysql orcal sqlserver
特征:持久、主外键、sql语句、存放在硬盘上
非关系型数据库:缓存数据库、值存放在内存中。---- java内置缓存
redis:必须学会:基本数据类型、redis持久化、redis高可用。
mongdb:主要存储json格式
membase:
hbase:
特征:存储在内存中、key-value存放,分布式情况下服务器数据共享。
效率非常高。
缺点:数据容易丢失(不用担心、因为有数据备份、持久化)
redis高可用:数据备份、持久化。宕机方案。
redis:主从复制、读写分离、哨兵机制、集群
四、redis
什么是redis?
redis是nosql缓存数据库
为什么要用redis?
使用redis能够减去数据库访问压力
缓存流程:
总结:redis作用就是减轻数据库访问压力,
因为查询内存比查询数据库效率高。
redis的应用:1、token生成、session共享。分布式锁、自增id 验证码
redis可以设置有效期。
本身开源
重要:
redis基本数据类型:string、set、zset、has、list
五、redis安装windows
start.bat文件:
redis-server.exe redis.windows.conf
客户端连接,默认有16个数据库
redis修改密码:
修改密码时前面不要加空格
六、linux环境安装redis
首先进入linux环境,进入到usr目录下,创建个redis目录。
上传安装包到linux
解压文件夹:
tar -zxf redis-3.0.0.tar.gz
进入解压后的目录
make 编译
再进入到编译后的src文件夹
make install
这样就完成安装了。
然后再进入usr/local下面新建redis文件夹
cd /usr/local
mkdir -p /usr/local/redis/bin
mkdir -p /usr/local/redis/etc
再讲刚刚的redis文件复制到这两个文件夹下
cp redis.conf /usr/local/redis/etc //复制文件到
cp mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-dump redis-cli redis-server redis-sentinel /usr/local/redis/bin
这样进入local下面的redis文件下的bin目录。
启动redis命令: ./redis-server 这样启动是前台方式启动的。
这样再关闭防火墙,才能使用电脑客户端连接上去
关闭防火墙命令:
service iptables stop
修改redis为后台启动方式:
修改完成后,再bin目录下,启动命令 后台启动方式
./redis-server /usr/local/redis/etc/redis.conf
可以使用redis命令进行连接
./redis-cli -h 127.0.0.1 -p 6379 -a "123456"
七、redis基本数据类型
String:存放对象使用String来,用json存储
Set: 无序集合,不允许重复
ZSet:能够排序的集合,不允许重复
Hash:可以name
List:这个是list集合
八、java操作redis 使用jedis
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
jedis操作redis:代码:
package com.leeue.redis;
import java.util.HashMap;
import com.sun.javafx.collections.MappingChange.Map;
import redis.clients.jedis.Jedis;
/**
* @classDesc: 功能描述:(使用jedis操作redis)
* @author:<a href="leeue@foxmail.com">李月</a>
* @Version:v1.0
* @createTime:2018年9月10日 下午1:14:55
*/
public class RedisTest {
private static Jedis jedis = null;
public static void main(String[] args) {
jedis = new Jedis("192.168.184.128",6379);
jedis.auth("123456");
// setString();
// setMap();
// setList();
// setSet();
zSet();
}
/**
* 操作string类型
*/
public static void setString() {
jedis.set("name", "leeue");
System.out.println("添加成功");
}
public static void setMap() {
HashMap<String, String> hashMap = new HashMap<String, String>();
hashMap.put("leeue", "2500");
jedis.hmset("haha", hashMap);
System.out.println("添加成功....");
}
public static void setList() {
jedis.lpush("leeue", "1");
jedis.lpush("leeue2", "2");
System.out.println("添加成功");
}
public static void setSet() {
jedis.sadd("xiaoxiao", "1");
jedis.sadd("xiaoxiao", "2");
}
public static void zSet() {
jedis.rpush("oop", "oop");
}
}
redis怎么存放对象?
答:使用string类型的,存放json格式,取用json转换程对象就行了。
[root@localhost bin]# ./redis-cli -h 127.0.0.1 -p 6379 -a “123456”
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> set name leeue
OK
127.0.0.1:6379> set name leeue
OK
127.0.0.1:6379> set name leeue
OK
127.0.0.1:6379> lpush listkey redis
(integer) 1
127.0.0.1:6379> get 1
(nil)
127.0.0.1:6379> lpush listkey mongdb
(integer) 2
127.0.0.1:6379> lpush listkey hbase
(integer) 3
127.0.0.1:6379> lrang list 0 10
(error) ERR unknown command ‘lrang’
127.0.0.1:6379> lrange listkey 0 10
1) “hbase”
2) “mongdb”
3) “redis”
127.0.0.1:6379>