1.什么是NoSql
NoSQL(不仅仅是SQL not only SQL),泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在处理web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,出现了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题;
2.含义:
不仅仅是sql (not only sql)
nosql是非关系型数据库;用来解决网站里面大数据和高并发问题
3.nosql数据库的分类
a.key-value键值对型nosql数据库—redis
b.列式存储型
c.文档型
d.图表型
1.redis是一个开源的高性能nosql数据库,数据可以储存在内存或者磁盘上
2.redis主要是key_value结构形式储存,redis底层支持各种类型的数据储存结构
如:list/set/map/hash/string
1.数据储存在内存,读取和写入速度快
2.支持的类型较多
String/list/set/zset sorted set:有序集合和hash
3.支持磁盘的储存–完全持久化 操作–aof/rdb
4.支持数据过期–设置过期时间expire
5.支持集群操作
6.支持订阅和发布
Redis 和 Memcache区别:
区别:
支持类型 表储存 string/list/set/map map
相同:
1.memcached和redis都是使用key-value非关系型数据库
2.redis它是key-value型的非关系型数据库–常用作缓存
1.redis常被用做缓存
2.可以处理大数据量的计数问题
3.实时攻防系统
4.有效期应用
5.自动去重
6.排队的结构–FIFO–>消息队列
7.消息订阅和发布
直接下载解压
set key value get key
@Test
public void Redistest() {
String host = "127.0.0.1";
int port = 6379;
int timeout = 1000;
Jedis jedis = new Jedis(host, port, timeout);
jedis.set("ceshi", "测试redis链接");
System.out.println(jedis.get("ceshi"));
jedis.close();
}
keys * expire key second ttl key
@Test
public void testAllkey() {
String host = "127.0.0.1";
int port = 6379;
int timeout = 1000;
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxIdle(10);
jedisPoolConfig.setMaxTotal(10);
jedisPoolConfig.setTestOnBorrow(true);
JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout);
Jedis resource = jedisPool.getResource();
Set<String> keys = resource.keys("*");
System.out.println(keys);
}
lpush/rpush key value1/value2 lrange key start end lindex key index
@Test
public void testList() {
String host = "127.0.0.1";
int port = 6379;
int timeout = 1000;
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxIdle(10);
jedisPoolConfig.setMaxTotal(10);
jedisPoolConfig.setTestOnBorrow(true);
JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout);
Jedis resource = jedisPool.getResource();
resource.lpush("list", "{s:s1}", "{s:s2}", "{s:s3}");
List<String> list = resource.lrange("list", 0, -1);
System.out.println(list);
resource.flushDB();
}
sadd key val1 /val2/val3 smembers key srem key member
@Test
public void testSet() {
String host = "127.0.0.1";
int port = 6379;
int timeout = 1000;
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxIdle(10);
jedisPoolConfig.setMaxTotal(10);
jedisPoolConfig.setTestOnBorrow(true);
JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout);
Jedis resource = jedisPool.getResource();
resource.sadd("set", "{s:s1}", "{s:s2}", "{s:s3}");
Set<String> set = resource.smembers("set");
System.out.println(set);
resource.flushDB();
}
hset key name value hget key name
hmset key name1 key1 name2 key2 hmget key name1 name2
@Test
public void testHash() {
String host = "127.0.0.1";
int port = 6379;
int timeout = 1000;
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxIdle(10);
jedisPoolConfig.setMaxTotal(10);
jedisPoolConfig.setTestOnBorrow(true);
JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout);
Jedis resource = jedisPool.getResource();
resource.hset("s", "name", "郭岩");
resource.hset("s", "age", "30");
resource.hset("s", "sex", "男");
resource.hset("s", "intro", "丐帮帮主");
List<String> hmget = resource.hmget("s", "name", "age", "sex", "intro");
System.out.println(hmget);
resource.flushDB();
}
//事务操作
@Test
public void test() {
String host = "127.0.0.1";
int port = 6379;
int timeout = 1000;
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxIdle(10);
jedisPoolConfig.setMaxTotal(10);
jedisPoolConfig.setTestOnBorrow(true);
JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout);
Jedis resource = jedisPool.getResource();
Transaction multi = resource.multi();
multi.set("name", "叶英");
multi.set("age", "20");
multi.incr("sex");
multi.set("intro", "藏剑山庄 庄主");
List<Object> exec = multi.exec();
System.out.println(exec);
resource.flushDB();
}
1.为什么需要持久化?
防止数据丢失
2.怎么持久化
磁盘存储 和 内存磁盘
Redis实现持久化的两种方法:
1.zdb:在一个时间点内保存一个数据的快照
save 1 1 1s钟之内至少有一个变化的时候,做持久化
缺点:
1s 之内的数据 操作时候,丢失,不能做持久化
2.aof方式
追加执行的配置文件的方式 (配置文件就有操作的命令)
定义:redis保存的数据不是永久的,我们可以通过设置过期时间,达到过期时间后,便会清理淘汰数据,到达内存最大值后也会清理淘汰数据
淘汰策略:
lru:淘汰最少使用–同一时间内参考使用次数
ttl:淘汰即将过期–同一时间参考剩余时间
random:随机
淘汰配置文件:
volatile-lru:从已设置过期的数据集中挑选最近最少使用的淘汰
volatile-ttr:从已设置过期的数据集中挑选将要过期的数据淘汰
volatile-random:从已设置过期的数据集中任意挑选数据淘汰
allkeys-lru:从数据集中挑选最近最少使用的数据淘汰
allkeys-random:从数据集中任意挑选数据淘汰
noenviction:禁止淘汰数据
lru:淘汰最少使用–同一时间内参考使用次数
ttl:淘汰即将过期–同一时间参考剩余时间
random:随机
淘汰配置文件:
volatile-lru:从已设置过期的数据集中挑选最近最少使用的淘汰
volatile-ttr:从已设置过期的数据集中挑选将要过期的数据淘汰
volatile-random:从已设置过期的数据集中任意挑选数据淘汰
allkeys-lru:从数据集中挑选最近最少使用的数据淘汰
allkeys-random:从数据集中任意挑选数据淘汰
noenviction:禁止淘汰数据