一、数据库的发展史
①最开始是一个sql语句就访问一次数据库,这样使得我们的数据库负载很大。
②为了避免数据库负载过大,使用了缓存技术cache,在dao和db之间加上一层缓存,将我们常用的数据查询一次后都放入到缓存中。(主要针对于查询)
③随着时代的发展,数据库的写的压力变大了,出现了瓶颈,使用分布式数据库,一个数据库变为多个数据库,每个数据库存入不同的信息。
④再跟随着时代的发展,mysql的扩展性出现了瓶颈,越来越复杂的关系,例如:亲戚关系。关系型数据库已经承受不了了,所以衍生出来了nosql
二、什么是nosql?
not only sql 不仅仅是sql,泛指非关系型数据库(key-value)。
三、nosql的特点
易扩展,大数据量高性能,多样灵活的数据类型,新技术:redis
四、常见的数据库缓存框架:redis、memcache、mongdb
五、redis的特性:key-value,cache,persistence(持久化)
六、nosql的四大分类
①KV键值
②文档性数据库(bson格式比较多)
③列存储数据库④图关系数据库
七、分布式:不同的多台服务器上面部署着不同的服务模块(工程)
八、集群:不同的多台服务器上面部署相同的服务模块
九、什么是edis?
REmote DIctionary Server(远程字典服务器)。是一个高性能的(key/value)分布式内存数据库。
十、redis与其他key-value缓存产品有以下三个特点:
①redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
②redis不仅仅支持简单的key-value类型的数据,同时还提供list(列表),set(集合),zset(有序集合),hash等数据结构的存储
③redis支持数据的备份,即master-slave模式的数据备份
十一、redis的安装过程
windos安装教程:https://blog.csdn.net/a599174211/article/details/82756069
十二、redis的基础知识(一)
①单进程
②默认有16个库,类似数组下标从0开始,初始默认使用0号库
③select命令是切换数据库 select 7 访问的是8号库
④Dbsize查看当前数据库的key的数量
⑤Flushdb清空当前的库
⑥Flushall清空所有的库
⑦统一密码管理,16个库都是同一个密码
⑧redis的索引都是从0开始
⑨默认端口号6379
命令解析:
select 7 查看8号库
dbsize查看当前库的key的数量
keys * 查看当前库的所以的key
keys k? ?类似mysql里面的占位符
FLUSHdb 清除当前库
十二、redis的基础知识(二)
key关键字:
keys *
exists key值 判断某个key是否存在
move key值 db名 将某个key移动到某个数据库中,当前数据库中的此key就不存在了
expire key值 秒钟,为给定的key设置过期时间
ttl key值 查看当前还有多少秒过期,,-1表示永不过期,-2表示已经过期,过期就不存在了。
type key值 查看你的key是什么类型
①String
String是redis的最基本的类型,一个key对应一个value,redis里面的String可以包含任何数据,比如序列化的东西,jpg的图片
常用命令:
set/get/del/append/strlen append k1 123
Incr/decr/incrby/decrby,INCRby key1 2 自加自减代表自加1自减1 后面的是指定加减值,只能是数字才能进行加减
getrange/setrang 获取指定区间内的值 GETRANGE k1 0 3 SETRANGE k1 0 xxx
setex 键秒值 /setnx SETEX k2 10 v2 针对于k2里面的值的过期时间是10秒 setnx 命令在指定的 key 不存在时,为 key 设置指定的值
mset/mget/msetnx mset k1 v1 k2 v2 k3 v3 mget k1 k2 k3 MSETNX k4 v4
getset(先get再set) GETSET k1 v111
②Hash
是一个键值对的集合,类似于我们的map<key,object>,kv模式不变,但v是一个键值对
常用命令:
hset/hget/hmset/hmget/hgetall/hdel ①hset user id 11 hget user id ②HMSET customer id 11 name lisi age 26 hmget customer id name age ③ HGETALL customer ④HDEL user name
hlen HLEN customer
hexists key 检测id是否是customer里面一个属性 HEXISTS customer id
hkeys/hvals HKEYS customer Hvals customer
hincrby/hincrbyfloat ①HINCRBY customer age 2 ②hset customer score 91.5 HINCRBYFLOAT customer score 0.5
hsetnx hsetnx customer email 123@126.com
③List
是列表,是简单的字符串列表,按照插入顺序排序,底层是一个链表,既然是一个链表,则可以操作头部和尾部
常用命令:
lpush/rpush/lrange LPUSH list01 1 2 3 4 5(先进后出) LRANGE list01 0 -1
lpop/rpop lpop删除左侧的值(最上层的值),rpop删除右侧的值(最下层的值),
lindex 按照索引下标获取元素(从上到下)
llen LLEN list01
lrem key 删除n个value LREM list01 1 3
ltrim key 开始index 结束index,截取指定范围的值后再赋值给key LTRIM list01 0 2
rpoplpush 源列表 目的列表 RPOPLPUSH list01 list02 将list01里面的最后一个值后添加到list02的头部,list01最后一个值就没了
lset key index value LSET list03 1 x
linsert key before/after 值1 值2 LINSERT list03 before x java 在x前面插入一个值为java
④Set
是一个String类型的无序集合,它是通过hashtable实现的
常用命令:
sadd/smembers/sismember sadd set01 1 1 2 2 3 3 SMEMBERS set01 添加时是把重复的元素去掉了 SISMEMBER set01 1 判断元素是否存在于set01中
scard 获取集合里面的元素个数 SCARD set01
srem key value 删除集合中的某个元素 SREM set01 1
srandmember key 某个整数(随机出几个数) SRANDMEMBER set01 5
spop key 随机出栈 SPOP set01
smove key1 key2 在key1里面某个值, 作用是将key1里的某个值赋给key2 SMOVE set01 set02 9
数学集合类:
差集:sdiff SDIFF set01 set02
交集:sinter Sinter set01 set02
并集:sunion Sunion set01 set02
⑤Zset
有序集合,且不允许有重复的元素,不同的每个元素都会关联一个double类型的分数(score),分数可以重复,根据成员进行从小到大排序在set的基础上,加上了一个score,之前k1 v2 v3,现在是:k1 score1 v1 score2 v2
常用命令:
zadd/zrange zadd zset01 60 v1 70 v2 80 v3 90 v4 100 v5 ZRANGE zset01 0 -1 ZRANGE zset01 0 -1 withscores
zrangebyscore key 开始score 结束score ZRANGEBYSCORE zset01 60 90 ZRANGEBYSCORE zset01 (60 90
zrem key 某score下对应value值 作用是删除元素 ZREM zset01 v5
zcard/zcount key score区间/zrank key values值 作用是获取下标值/zscore key 对应值 ZCARD zset01 ZCOUNT zset01 60 80 ZRANK zset01 v4(正序获取下标值)
zrevrank key values值 作用是逆序获得下标值 Zrevrank zset01 v2
zrevrange ZREVRANGE zset01 0 -1
zrevrangebyscore key 结束score 开始score ZREVRANGEBYSCORE zset01 90 60