(一)NoSql
关系型数据库:指以关系(行和列组成的二维表)来建模的数据库。
NoSQL泛指非关系型数据库。非关系型数据库严格而言不是一种数据库,应该是一个数据结构化存储方法的集合。其中redis就是非关系型数据库。
- nosql分类:
redis是一个key-vlue类型Nosql!主要用途用来做缓存,查询速度非常快,因为是给予内存查询。
(二)初识Redis
-
特点
① 数据存储:数据保存在内存中,存取速度快,还能不定期持久化到硬盘中,保障数据的安全性
② Value类型:支持存储的value类型相对memcached更多,包括string(字符串)、list(链表)、set(集合)、 zset(sorted set --有序集合)和hash(哈希类型),很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库(如MySQL)起到很好的补充作用。
④ 客户端支持:提供了Java,C/C++,C#,PHP,JavaScript等客户端,使用很方便。
⑤超大并发支持:Redis支持集群(主从同步)。数据可以主服务器向任意数量从的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。(单点故障)
⑥ 支持订阅/发布(subscribe/publish)功能 QQ群 -
使用场景
① 中央缓存
② 计数器
③ 实时防攻击系统
④ 排行榜
⑤ 数据的有效期(购物券、优惠券、红包)
⑥ 使用set存值,可自动去重
⑦ 队列
⑧ 消息订阅 -
软件认识
-
常用指令
auth pwd;
set key value; //赋值
get key; //取值
mset k1 v1 k2 v2 … //批量添加
mget k1 k2 … //批量获取
incr key //加1
incrBy key step // 添加指定步长
decr key
decrBy key step
keys * ///获取所有的key
del key //删除指定key
flushdb //清空指定数据库
flushall //清空所有数据库
select index //通过索引选择数据库(0-15)
expire key xx //设置key的过期时间(xx秒后过期)
ttl key //查看key的过期时间
面试题:redis怎么实现栈和队列?
栈和队列都用list,控制一边进同一边出就是栈:
进和出同一个方向: Lpush pc 111 lpop pc
一边进另一边出就是队列:先进先出:FIFO
进和出的方向相反就ok:
Lpush pc 111 rpop pc
-
list集合
lpush key value //将一个或多个值 value 插入到列表 key 的表头(最左边)
rpush key value //将一个或多个值 value