一.NoSQL的概念
SQL:结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
NoSQL:最常见的解释是“non-relational”, “Not Only SQL”也被很多人接受。NoSQL仅仅是一个概念,泛指非关系型的数据库,区别于关系数据库,它们不保证关系数据的ACID特性。
二.非关系型的数据库
1.非关系型数据库分类
(1)键值(key-value):Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB:Cassandra, HBase, Riak
(2)列存储数据库:Cassandra, HBase, Riak
(3)文档型数据库:CouchDB, MongoDb
(4)图形(Graph)数据库:Neo4J, InfoGrid, Infinite Graph
2.redis和memcache的比较
mysql | redis | memcached | |
---|---|---|---|
类型 | 关系型 | 非关系型 | 非关系型 |
存储位置 | 磁盘 | 磁盘和内存 | 内存 |
存储过期 | 不支持 | 支持 | 支持 |
读写性能 | 低 | 非常高 | 非常高 |
存储的结构 | 表来存储 | 支持很多 list/set/array/string/map等 | 普通键值对key-value |
三.redis的使用场景
(1) 最多, 就是缓存(cache 使用空间换取时间)
(2) 计数器应用 – 微博 热点新闻 – 转载 点赞(高并发)
(3) 实时防攻击系统 – 银行网站 (登录) --计数 (ip 同一个ip + 5)
redis–支持断电恢复 内存和磁盘
(4) 有效期的应用 – 道具 红包 优惠券 …
(5) 支持无序的场景 – set特效
(6) 队列 -->quene -->秒杀 抢购 --redis
(7) 消息系统订阅发布 -->redis(MQ消息队列–高并发 秒杀 抢购 转发 )
四.安装redis
步骤:
1.官网下载
http://redis.io/download
2.解压文件夹
3.启动redis服务
redis-server.exe
4.连接到redis进行操作
五.redis的操作
操作手册:百度,官方api
注意:操作均不能使用中文输入法
1.字符串操作
set key value:给字段设置值
get key:获取字段的值
mset:同时设置几个字段
mget:同时获取几个字段的值
incr:自增1
decr:自减1
incrBy key num:增加num个
decrBy key num:减少num个
2.对key的操作
keys *:查看所有的key
expire key seconds:对key设置过期时间
ttl key:查看key 剩余时间
del key:删除key
flushall:清库 (0-15个)
flushdb:清当前库
select index:选择库
3.对list操作
lpush(rpush) key value1/value2… :往list添加值
lpop(rpop) key:弹出一个值
lrange key start stop:搜索查询 lrange students 0 -1
lrem key count value:移出
lindex key index:查看索引对应的值
ltrim key start stop:对集合进行修剪
4.set操作
sadd key members:添加值
srem key member:删除值
smembers key:查看可以对应的值
5.hash操作
hset key name value :设置key value
hget key name:通过key获取值
hmset key name1 key1 name2 key2:批量设置
hmget key name1 name2:批量获取
hkeys:获取所有的key
hvals:获取所有的value
hgetall:获取所有的key和value
使用比较多的结构:
==string /list /map(hash) ===/set
六.事务操作
弱事务: 如果只有一个成功就可以保存(没什么用) – 日志
强事务: 同生共死
七.订阅发布
八.设置密码
1.配置文件
redis.windows.conf
–添加 requirepass 123456
2.启动的时候
运行命令设置
redis-server.exe redis.windows.conf
3.auth 123456
九.通过java操作redis(掌握)
连接redis服务: new Jedist(ip,host,timeout)
//本机,端口号,过期时间
Jedis jedis = new Jedis("127.0.0.1", 6379, 1000*10);
连接池操作redis: new JedisPool(config,ip,host,timeout,password)
//配置连接池
JedisPool jedisPool = new JedisPool(config,"127.0.0.1", 6379, 1000*10,"123456");
1.字符串操作
//增
jedis.set("name","王天霸");
//查
System.out.println(jedis.get("name"));
//查询所有
System.out.println(jedis.keys("*"));
//删
System.out.println(jedis.del("name"));
//改
System.out.println(jedis.set("name","龙傲天"));
2.list操作
//有序可重复
//插入头部
jedis.lpush("users","悟空","悟能","悟净","白龙马","悟能");
//移除表中所有与 VALUE 相等的值
jedis.lrem("users",0,"悟能");
//取出全部
System.out.println(jedis.lrange("users", 0, -1));
3.set操作
//无序不重复
jedis.flushDB();
jedis.sadd("users","悟空","悟能","悟净","白龙马","悟能");
System.out.println(jedis.smembers("users"));
4.hash操作
jedis.hset("userMap","user","江流儿");
System.out.println(jedis.hget("userMap", "user"));
5.排序
jedis.lpush("nums","51","27","38","82","15");
System.out.println(jedis.lrange("nums", 0, -1));
//升序
System.out.println(jedis.sort("nums"));
//排序规则
SortingParams sortingParams = new SortingParams();
//设置为降序
sortingParams.desc();
//加入规则
System.out.println(jedis.sort("nums",sortingParams));
6.事务
jedis.set("name","叶良辰");
jedis.set("age","23");
//开启事务
Transactiontransaction = jedis.multi();
transaction.incr("name");
transaction.incr("age");
List<Object> list = transaction.exec();
System.out.println(list);
十.redis持久化
持久化: 把数据保存到磁盘的这个过程就叫持久化。
redis支持内存和磁盘存储。
redis磁盘存储提供两种方案:
rdb方式 :
save 1 1 最快的保存方法 1s中 发生一次变化 – 如果保存数据 1s内完成 – 数据丢失 丢失1s数据
aof方式:
开启appendonly yes
在操作的时候,把数据写到日志文件,在启动的时候,恢复日志文件 -->日志方式
十一.redis的淘汰策略
lru : 最近最少使用 – 常用 (统计次数)
ttl : 将要过期中淘汰 --也可以 (统计时间)
random: 随机数据 --这个数据就没有那么重要 (随机)