目录
一、NoSQL
可以解释为非关系型数据库。在NoSQL数据库中数据之间是无联系的,无关系的。数据结构是松散的,可变的。
关系型数据库的缺点
无法应对每次上万次的读写请求,无法处理大量集中的高并发数据。
无法简单通过增加硬件、服务节点来提高系统性能。数据整个存储在一个数据库中。
关系型数据库大多是收费的,对硬件的要求较高。
NoSQL的优势
大数据量,高性能。NoSQL数据库具有非常高的读写性能,在大数据量下同样可以。这是由于他的无关系性数据库的结构简单。关系型数据库采用的是查询缓存。
灵活的数据模型。NoSQL无须事先为要存储的数据建立字段,随时可以存储自定义的数据格式。
高可用。
低成本。
NoSQL的劣势
不支持标准的 SQL,没有公认的 NoSQL 标准
没有关系型数据库的约束,大多数也没有索引的概念
没有事务,不能依靠事务实现 ACID。
没有丰富的数据类型(数值,日期,字符,二进制,大文本等)
二、Redis安装和使用
Redis是当今非常流行的基于KV结构的作为Cache使用的NoSQL数据库
Redi是一个开源的使用c语言编写、支持网络、可基于内存也可持久化的Key-Value数据库。Key字符类型,其值可以是字符串、哈希(Map)、列表(List)、集合(set)和有序集合(sets)等数据类型。
1、Window上安装Redis
在下载的Redis-x64-3.2.100.zip解压后,放在某个目录下
双击redis-server.exe启动Redis
2、在Linux上安装Redis
启动Redis
启动方式:①前台启动 ./redis-server redis.conf 配置文件路径 ②后台启动 ./redis-server redis.conf 配置文件路径 &
在其他窗口查看redis 启动进程 #ps -ef | grep redis
关闭Redis
使用redis客户端关闭,向服务器发现关闭命令
切换到redis-4.0.13/src/目录,执行。/redis-cli shutdown
kill pid 或者 kill-9 pid这个命令不会考虑是否有数据正在操作
3、Redis客户端
redis客户端是一个程序,通过网络连接到redis服务器,再客户端软件中使用Redis可以识别别的命令,向Redis服务器发送命令,告诉Redis想要做什么。
Redis命令行客户端:
两种常见的连接方式:
直接连接redis:./redis-cli
在redis安装目录下/src执行 ./redis-cli。此命令市本级127.0.0.1,端口6278的redis
指定ip和端口连接redis:./redis-cli-h127.0.0.1-p 6379
-h redis主机ip(可以指定任意的redis服务器)
-p端口号(不同的端口表示不同的redis应用)
Redis远程客户端:
使用客户端连接llinux的redis
使用客户端连接Linux的Redis
连接linux的Redis之前需要修改redis服务器的配置信息,远程连接redis需要修改redis主目录下的redis.conf配置文件:
①、bind ip 绑定ip此行注释
4、Redis基本操作命令
沟通命令:Redis>ping 返回pong 表示redis服务运行正常
查看当前数据库中key的数目:dbsize
redis默认使用16个库:在redis.conf文件中databases 16
切换库命令:select db
删除当前库的数据库:flushdb
redis自带的客户端退出当前redis 连接:exit或者quit
5、Redis的key的操作命令
keys 语法:可以是pattern
查找所有符合模式pattern的key。pattern可以使用通配符
*:表示0-多个字符 例如keys* 查询所有的key
?:表示单个字符 例如wo?d 匹配word
exists 语法 exists key [key……]
判断key是否存在: 整数,存在 key 返回 1,其他返回 0.使用多个 key,返回存在的 key 的数量
expire语法:expire key seconds
type 查看key所有储值的数据类型
三、Redis数据类型操作命令
1、字符串类型
基本命令
set:将字符串值 value 设置到 key 中 。 语法:set key value,向已经存在的 key 设置新的 value,会覆盖原来的值
get:获取key中设置的字符串值。语法:get key
incr:key 中储存的数字值加 1,如果 key 不存在,则 key 的值先被初始化为 0 再执行 incr 操作(只能对数字类型的数据操作)
decr:key 中储存的数字值减1
append:语法:append key value。如果 key 存在,则将 value 追加到 key 原来旧值的末尾 。如果 key 不存在,则将 key 设置值为 value
常用命令
strlen:strlen key 返回 key 所储存的字符串值的长度
getrange:getrange key start end。获取 key 中字符串值从 start 开始到 end 结束的子字符串,包括 start 和 end, 负数表示从字符串的末尾开始,-1 表示最后一个字符
setrange:语法:setrange key offset value 。说明:用 value 覆盖(替换)key 的存储的值offset 开始,不存在的 key 做空白字符串。 返回值:修改后的字符串的长度
mset:语法:mset key value [key value…] 说明:同时设置一个或多个 key-value 对
mget:语法:mget key [key …] 作用:获取所有(一个或多个)给定 key 的值
2、哈希类型hash
基本命令
hset:语法:hset hash 表的 key field value 。作用:将哈希表 key 中的域 field 的值设为 value,如果 key 不存在,则新建 hash 表,执行赋值,如果有 field ,则覆盖值。
hget:语法:hget key field 。作用:获取哈希表 key 中给定域 field 的值 。返回值:field 域的值,如果 key 不存在或者 field 不存在返回 nil
hmset:语法:hmset key field value [field value…] 。说明:同时将多个 field-value (域-值)设置到哈希表 key 中,此命令会覆盖已经存在的 field,hash 表 key 不存在,创建空的 hash 表,执行 hmset.
hmget:语法:hmget key field [field…] 。作用:获取哈希表 key 中一个或多个给定域的值
hgetall:语法:hgetall key 。作用:获取哈希表 key 中所有的域和值
hdel:语法:hdel key field [field…] 。作用:删除哈希表 key 中的一个或多个指定域 field,不存在 field 直接忽略
常用命令
hkeys:语法:hkeys key 。作用:查看哈希表 key 中的所有 field 域
hvals:语法:hvals key 。作用:返回哈希表 中所有域的值
hexists:语法:hexists key field 。作用:查看哈希表 key 中,给定域 field 是否存在
3、列表list
基本命令
lpush:语法:lpush key value [value…] 。作用:将一个或多个值 value 插入到列表 key 的表头(最左边),从左边开始加入值,从左到右的顺序依次插入到表头
rpush:语法:rpush key value [value…] 。作用:将一个或多个值 value 插入到列表 key 的表尾(最右边),各个 value 值按从左到右的顺序依次插入到表尾
lrange:语法:lrange key start stop 。作用:获取列表 key 中指定区间内的元素,0 表示列表的第一个元素,以 1 表示列表的第二个元素;start , stop 是列表的下标值,也可以负数的下标, -1 表示列表的最后一 个元素, -2 表示列表的倒数第二个元素,以此类推
lindex:语法:lindex key index。作用:获取列表 key 中下标为指定 index 的元素,列表元素不删除,只是查询。
llen:语法:llen key 。作用:获取列表 key 的长度
常用命令
lrem:语法:lrem key count value 。作用:根据参数 count 的值,移除列表中与参数 value 相等的元素,count >0 ,从列表的 左侧向右开始移除;count < 0 从列表的尾部开始移除;count = 0 移除表中所有与 value 相等的值。
lset:语法:lset key index value 。作用:将列表 key 下标为 index 的元素的值设置为 value。
linsert:语法:linsert key BEFORE|AFTER pivot value 。作用:将值 value 插入到列表 key 当中位于值 pivot 之前或之后的位置。key 不存在,pivot不在列表中,不执行任何操作。
4、集合set
基本命令
sadd:语法:sadd key member [member…] 。作用:将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略,不会再加入。
semembers:语法:smembers key 。作用:获取集合 key 中的所有成员元素,不存在的 key 视为空集合
sismember:语法:sismember key member 。作用:判断 member 元素是否是集合 key 的成员
scard:语法:scard key 。作用:获取集合里面的元素个数
srem:语法:srem key member [member…] 。作用:删除集合 key 中的一个或多个 member 元素,不存在的元素被忽略。
常用命令
srandmember:语法:srandmember key [count]。 作用:只提供 key,随机返回集合中一个元素,元素不删除,依然在集合中;提供了 count 时,count 正数, 返回包含 count 个数元素的集合,集合元素各不相同。count 是负数, 返回一个 count 绝对值的长度的集合,集合中元素可能会重复多次。
spop:语法:spop key [count] 。作用:随机从集合中删除一个元素, count 是删除的元素个数。
5、有序集合类型zset
有序集合zset和集合set一样也是string类型元素的集合,且不允许重复的成员
基本命令
zadd:语法:zadd key score member [score member…] 。作用:将一个或多个 member 元素及其 score 值加入到有序集合 key 中,如果 member 存在集合中,则更新值;score 可以是整数或浮点数
zrange:语法:zrange key start stop [WITHSCORES] 。作用:查询有序集合,指定区间的内的元素。集合成员按 score 值从小到大来排序。start, stop 都是从 0 开始。0 是第一个元素,1 是第二个元素,依次类推。以 -1 表示最后一个成员,-2 表示倒数第二个成员。WITHSCORES 选项让 score 和 value 一同返回。
zrevrange:语法:zrevrange key start stop [WITHSCORES] 。作用:返回有序集 key 中,指定区间内的成员。其中成员的位置按 score 值递减(从大到小)来排列。其它同 zrange 命令。
zrem:语法:zrem key member [member…] 。作用:删除有序集合 key 中的一个或多个成员,不存在的成员被忽略
zcard:语法:zcard key 。作用:获取有序集 key 的元素成员的个数
常用命令
zrangebyscore:语法:zrangebyscore key min max [WITHSCORES ] [LIMIT offset count] 。作用:获取有序集 key 中,所有 score 值介于 min 和 max 之间(包括 min 和 max)的成 员,有序成员是按递增(从小到大)排序
zrevrangebyscore:语法:zrevrangebyscore key max min [WITHSCORES ] [LIMIT offset count] 作用:返回有序集 key 中, score 值介于 max 和 min 之间(默认包括等于 max 或 min )的所有的成员。有序集成员按 score 值递减(从大到小)的次序排列。其他同 zrangebyscore
zcount:语法:zcount key min max 。作用:返回有序集 key 中,score 值在 min 和 max 之间(默认包括 score 值等于 min 或 max )的成员的数量
四、高级话题
1、Redis事务
2、持久化
③:编辑 redis.conf 增加 save 配置,修改文件名等。vim redis.conf
总结:
优点:由于存储的是数据快照文件,恢复数据很方便,也比较快
缺点:会丢失最后一次快照以后更改的数据。由于需要经常操作磁盘,RDB会分出一个子进程。如果数据库很大的话,子进程占用比较多的时间。
AOF方式:Redis 每次接收到一条改变数据的命令时,它将把该命令写到 一个 AOF 文件中(只记录写操作,读操作不记录),当 Redis 重启时,它通过执行 AOF 文件 中所有的命令来恢复数据。
3、主从复制
读写分离
高可用Sentinel哨兵
五、Jedis操作Redis