1、数据库的发展史:①最开始是一个sql语句就访问一次数据库,这样使得我们的数据库负载很大。
②为了避免数据库负载过大,使用了缓存技术cache,在dao和db之间加上一层缓存,
将我们常用的数据查询一次后都放入到缓存中。(主要针对于查询)
③随着时代的发展,数据库的写的压力变大了,出现了瓶颈,使用分布式数据库,
一个数据库变为多个数据库,每个数据库存入不同的信息。
④再跟随着时代的发展,mysql的扩展性出现了瓶颈,越来越复杂的关系,例如:亲戚关系。关系型数据库已经承受不了了,
所以衍生出来了nosql
2、什么是nosql?not only sql 不仅仅是sql,泛指非关系型数据库(key-value)。
3、nosql的特点:易扩展,大数据量高性能,多样灵活的数据类型,新技术:redis
4、常见的数据库缓存框架:redis、memcache、mongdb
5、redis的特性:key-value,cache,persistence(持久化)
6、nosql的四大分类:①KV键值②文档性数据库(bson格式比较多)③列存储数据库④图关系数据库
7、分布式:不同的多台服务器上面部署着不同的服务模块(工程)
8、集群:不同的多台服务器上面部署相同的服务模块
9、redis:REmote DIctionary Server(远程字典服务器)。是一个高性能的(key/value)分布式内存数据库。
10、redis与其他key-value缓存产品有以下三个特点:
①redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
②redis不仅仅支持简单的key-value类型的数据,同时还提供list(列表),set(集合),zset(有序集合),hash等数据结构的存储
③redis支持数据的备份,即master-slave模式的数据备份
11、redis的安装过程: 安装时 切记先修改字符编码集,参考linux笔记
①将我们的redis-3.0.4.tar放入到linux系统的/opt目录下,opt目录放一些外部引入的包或者软件
②在/opt目录下,执行命令tar -zxvf redis-3.0.4.tar.gz
③解压完毕后出现redis-3.0.4文件夹,进入到redis-3.0.4文件夹
④在redis-3.0.4文件夹目录下执行命令make,执行make时会出现找不到gcc错误,但是有一部分的软件已经安装了,
所以需要把安装了的软件卸载掉,使用命令make distclean
⑤使用命令 yum install gcc-c++下载gcc文件,安装完成后使用命令gcc -v 查看gcc版本
⑥gcc安装完成后,使用make命令进行我们的redis安装。
⑦执行make install检查时候安装成功
⑧安装完成后的文件都在/usr/local/bin目录下,进入到此目录通过ls查看一下
⑨进入到opt目录下的redis-3.0.4目录,在根目录创建一个myredisconfig文件夹,拷贝一份redis-3.0.4目录下的redis.conf到我们的myredisconfig文件夹下
⑩执行cp redis.conf /myredisconfig/
⒒在虚拟机上运行vim redis.conf,不能在远程控制台执行,因为远程控制台只能显示一屏的内容(学校电脑太坑)
⒓使用键盘无脑按下,找到对应的daemonize no将其改为yes,设置成yes的意思是可以执行指定的redis.conf文件
⒔进入到usr/local/bin目录下启动服务器:redis-server /myredisconfig/redis.conf
⒕然后执行redis-cli -p 6379 如果出现了127.0.0.1:6379则表示redis服务已经启动,然后ping 返回pong代表成功
⒖测试:set k1 helloworld get k1
⒗ shutdown exit 关闭服务器
12、redis的基础知识1:
①单进程
②默认有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 清除当前库
13、redis的基础知识2:
五大数据类型:
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
原文:https://www.cnblogs.com/zblwyj/p/11851447.html