1 NoSQL的概念(理解)
(1)nosql是什么
NoSQL(不仅仅是SQL not only SQL),泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在处理web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,出现了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题;
(a) nosql 它是非关系型数据库
(b) nosql 解决网站里面 大数据和高并发的问题(SNS社交网络上面/电商/12306)
(2)Nosql数据库的分类(特点)
key-value(键值对形式)型 nosql数据库
列式存储型, 文档型 ,图表型(了解)
2 redis的认识
(1) redis开源 高性能nosql数据库,数据可以存储在内存或磁盘上面
(2) Redis 主要key-value结构形式存储,redis底层支持各种类型的数据存储结构
包括 list set map(hash) string等
3 redis特点:(理解–面试题)
1.数据存储内存,速度比较快
2.支持类型比较多
string(字符串)list(链表),set(集合),zset(sorted set 有序集合) hash(哈希类型).
3.支持磁盘存储 --完成持久化操作
4.支持数据的过期
5.支持集群操作
6.支持订阅和发布
Redis 和 Memcache区别(面试题)–(掌握)
不同点:
memcach和redis的不同点
支持类型: 表来存储 string/list/map/set/… map
相同点:memcache和redisd都是key-value非关系数据
redis都是key-value型的非关系数库,作用做缓存
4 redis的使用场景
(1)redis使用最多的地方 就是缓存 --(内存最多)
(2)可以处理大数据量的计数问题 --(微博转发 点赞)
(3)实时的攻防系统
银行登录 (登出多少次 会锁定) --暴力破解(穷举法)
userid 1/2/3
(4)有效期应用 – 优惠劵
(5)自动去重应用 – set
(6)队列的结构 – (FIFO) (list存储) -->消息队列(RabbitMQ) --地铁
(7)消息订阅和发布
5 redis 使用–掌握
安装: 直接下载下来 进行解压
(1)String 操作(掌握)
set key value
get key
(2)key的操作(掌握)
keys *
expire key second
ttl key
(3)list操作(掌握)
lpush/rpush key value1/value2
lrange key start end
lindex key index
(4)set操作
sadd key val1 /val2/val3
smembers key
srem key member
(5) hash操作(掌握)
hset key name value
hget key name
hmset key name1 key1 name2 key2
hmget key name1 name2
(6)订阅 发布 事务 了解
(7)设置密码 --通过配置文件操作(掌握)
6 java代码操作redis(掌握)
string 操作
list操作
set操作
hash操作
事务操作 了解
package cn.itsource.redis;
import org.junit.Test;
import redis.clients.jedis.*;
import java.util.HashMap;
import java.util.List;
import java.util.Set;
public class TestRedis {
@Test
public void testRedis(){
String host ="127.0.0.1";
int port = 6379;
int timeout =1000;
Jedis jedis = new Jedis(host,port,timeout);
String s= jedis.set("name", "亚索");
System.out.println(jedis.get("name"));
jedis.close();
}
//连接池
@Test
public void testRedisPool() {
String host = "127.0.0.1";
int port = 6379;
int timeout = 1000;
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxIdle(10);
config.setMaxTotal(10);
config.setTestOnBorrow(true);
JedisPool jedisPool = new JedisPool(config, host, port, timeout);
Jedis jedis = jedisPool.getResource();
// String s= jedis.set("name", "劫");
// System.out.println(jedis.get("name"));
//对list集合操作 list<PERSON>
//查询所有的key cmd: keys *
// Set<String> keys = jedis.keys("*");
// System.out.println(keys);
//对string操作 存值和取值
// String s1 = jedis.set("name", "a");
// System.out.println(jedis.get("name"));
//清空数据库
jedis.flushDB();
// jedis.lpush("students","{name:s}","{name:b}","{name:a}");
// List<String> students = jedis.lrange("students", 0, -1);
// System.out.println(students);
//set操作
// jedis.sadd("set","{name:1}","{name:2}","{name:3}");
// Set<String> set = jedis.smembers("set");
// System.out.println(set);
//hash操作
/* jedis.hset("user:1", "name", "2b");
jedis.hget("user:1", "name");*/
// HashMap map = new HashMap();
// map.put("name", "sb");
// map.put("age", "18");
// map.put("sex","true" );
// jedis.hmset("user1",map );
// List<String> values = jedis.hmget("user1", "name", "age", "sex");
// System.out.println(values);
//sort排序操作--数字
// jedis.lpush("nums","1","3","5","9","2");
// jedis.sort("nums");
// SortingParams sortingParams = new SortingParams();
// sortingParams.desc();
// System.out.println(jedis.sort("nums", sortingParams));
//字母
// jedis.lpush("languages","java","h5","ui","test","php");
// SortingParams sortingParams = new SortingParams();
// sortingParams.alpha();
// sortingParams.asc(); //ui, test, php, java, h5]
// System.out.println(jedis.sort("languages",sortingParams));
//中文 没有排序 嘿嘿 哈哈
//事务操作--弱事务 --了解
Transaction multi = jedis.multi();
multi.set("name","abcd");
multi.set("age","18");
multi.incr("name");
multi.incr("age");
List<Object> results = multi.exec();
System.out.println(results);
System.out.println(jedis.get("age"));
jedis.close();
}
}
7 redis里面持久化(掌握)
为什么需要持久化?
防止数据丢失
怎么持久化?
磁盘存储 和 内存磁盘
redis如果要实现磁盘存储(做持久化过程) 两种方案
rdb方式 : 在一个时间点内 保存一个数据的快照
save 1 1 1s钟之内至少有一个变化的时候,做持久化
1s 之内的数据 操作时候,丢失,不能做持久化
aof方式 :
追加执行的配置文件的方式 (配置文件就有操作的命令)
RDB:全量持久化,原理:定时进行全量更新,到指定文件
优点:效率高
缺点:如果在同步过程前宕机的话,储存会失败
AOF:增量持久化 原理:记录增,删记录
优点:一致性强
缺点:效率低
总结:如果要效率的话使用RDB,如果要强一致性的话,使用AOF模式
8 保存到redis里面的数据永久存在的嘛?
–不是
(1)可以设置过期时间 到过期时间之后, 会淘汰数据
淘汰数据,怎么去淘汰(10000 个数据 – 淘汰)
(2)淘汰策略:
三种 : lru(最近最少使用) ttl(即将过期的数据) random(随机淘汰)
配置不需要里面配置
https://www.cnblogs.com/Mike_Chang/p/9560509.html