什么是Nosql
NoSQL = Not Only SQL(不仅仅是 SQL) ,也解释为 non-relational(非关系型数据库)。在NoSQL 数据库中数据之间是无联系的,无关系的。数据的结构是松散的,可变的。
Nosql 的优势
- 大数据量,高性能
- 灵活的数据模型:NoSQL 无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。
- 高可用:NoSQL 能很好的解决关系型数据库扩展性差的问题。弥补了关系数据(比如 MySQL)在某些方面的不足,在某些方面能极大的节省开发成本和维护成本。
- 低成本
Nosql 的劣势
- 不支持标准的SQL,没有共认的NOSQL 标准。
- 没有关系型数据库的约束,大多数也没有索引
- 没有事务,不能依靠事务实现ACID 注释:A:原子性[Atomicity] C:一致性[Consistency] I:隔离性[Isolation] D:持久性[Durability]
- 没有丰富的数据类型(数值,日期,字符,二进制,大文本等)
windows 安装Redis
- 官网 windows 版本
- 下载的 Redis-x64-3.2.100.zip 解压后,放到某个目录(例如 d:\tools\),即可使用。
- Windows7 系统双击 redis-server.exe 启动 Redis Windows 10 系统 在软件文件根目录下cmd 然后执行 redis-server.exe redis.windows.conf 例如:D:\tools\Redis-x64-3.2.100>redis-server.exe redis.windows.conf
- ctrl +c 退出 Redis 服务程序。
Linux 安装Redis
- 上传 redis-3.2.9.tar 到 linux 系统。
- 解压 :tar -zxcf redis-3.2.9.tar -C /user/local
- 编译 Redis 文件, Redis 是使用 c 语言编写的。 会使用 gcc 编译器 :在解压后的 Redis 目录下执行 (cd /usr/local/redis-3.2.9) make 命令 注意事项:
1)make 命令执行过程中可能报错,根据控制台输出的错误信息进行解决
2)错误一:gcc 命令找不到,是由于没有安装 gcc 导致
解决方式:安装 gcc 编译器后在执行 make 命令
什么是 gcc ?
gcc 是 GNU compiler collection 的缩写,它是 Linux 下一个编译器集合( 相当于 javac ), 是 c 或 c++程序的编译器。
怎么安装gcc ?
使用yum进行安装gcc 。执行命令:yum -y install gcc
3)错误二: error: jemalloc/jemalloc.h: No such file or directory
解决方式执行 make MALLOC=libc
注意:安装完 gcc 之后,再执行 make,先执行 make distclean 清理一
下上次 make 后产生的文件。 - 执行成功标志:
- 启动Redis :切换到 src 目录下执行 redis-server 程序
启动方式:
① 前台启动 ./redis-server
② 后台启动 ./redis-server & - 关闭 Redis:切换到 redis-3.2.9/src/ 目录,执行 ./redis-cli shutdown
redis 命令行客户端
- 连接客户端 1)直接连接 redis (默认 ip127.0.0.1,端口 6379):./redis-cli 2)指定连接的redis :./redis -cli -h 127.0.0.1 -p 6379 解释: -h redis 主机 IP (可以指定任意的 redis 服务器)
-p 端口号(不同的端口表示不同的 redis 应用)
使用客户端连接 Linux 的 Redis
连接Linux的Reids之前需要修改Redis服务器的配置信息。 Redis服务器有安全保护措施,默认只有本机(安装Redis的那台机器)能够访问。配置信息存放在Redis安装目录下的redis.conf文件。修改此文件的两个设置。
远程连接redis需要修改redis主目录下的redis.conf配置文件:
①、bind ip 绑定ip此行注释
②、protected-mode yes 保护模式改为 no
最后关闭之前开启的重新启动一次:
./redis-server …/redis.conf &
关闭防火墙,Linux 系统,命令行执行:systemctl stop firewalld
Redis 基本操作命令
- 查看redis 运行状态 :ping
- 查看当前数据库中key中的数目:dbsize
- redis 默认使用 16 个库 切换库命令:select index 备注:index 是库的索引值(0~15)
- 删除当前库中的数据: flushdb
- 退出当前连接:exit 或者 quit
- keys pattern 查找所有符合模式 pattern 的key pattern 可以使用通配符。 “*” :表示 0-多个字符 ,例如:keys * 查询所有的 key。 “?”:表示单个字符,例如:wo?d , 匹配 word , wood
- exit key [key …]:判断 key 是否存在 返回值:整数,存在 key 返回 1,其他返回 0. 使用多个 key,返回存在的 key 的数量。
- expire key seconds :设置key 存活的时间,到时间自动删除key 单位是秒 返回值:设置成功返回数字 1, 其他情况是 0 。
- ttl key :返回key 剩余存活时间
返回值:
-1 :没有设置 key 的生存时间, key 永不过期。
-2 :key 不存在
数字:key 的剩余时间,秒为单位 - type key :查看 key 所存储值的数据类型
返回值:字符串表示的数据类型
- none (key 不存在)
- string (字符串)
- list (列表)
- set (集合)
- zset (有序集)
- hash (哈希表)
- del key[key…]:删除存在的key 不存在的忽略
- redis 的五种数据类型 :
- string 字符串类型 :Redis 中最基本的数据类型,它能存储任何形式的字符串,包括二进制
数据,序列化后的数据,JSON 化的对象甚至是一张图片 - hash 哈希类型:是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
- list 列表类型 :简单的字符串列表,按照插入顺序排序。
- set 集合类型:string 类型的无序集合,集合成员是唯一的,即集合中不能出现重复的数据.
- zset 有序集合类型 :是 string 类型元素的集合,且不允许重复的成员,每个元素都会关联一个分数(分数可以重复),redis 通过分数来为集合中的
成员进行从小到大的排序
字符串类型(string)
- set key :获取key 对应的value 值
- get key :获取key 对应的value 值
- incr key :对key 对应的值加1(仅对数值型value值进行操作)
- decr key: 对key 对应的值 减1 (仅对数值型value值进行操作)
- append key value : 如果 key 存在, 则将 value 追加到 key 原来旧值的末尾
如果 key 不存在, 则将 key 设置值为 value
返回值:追加字符串之后的总长度 - strlen key :key 的value值长度 ①:如果key存在,返回字符串值的长度
②:key不存在,返回0 - getrange key start end :获取 key 中字符串值从 start 开始 到 end 结束 的子字符串,包括 start 和 end, 负数表示从字符串的末尾开始, -1 表示最后一个字符
返回值:截取的子字符串 - setrange key offset value :用value 覆盖(替换)key存储的值从offset 开始 不存在的key做空白字符串。 返回值:修改后的字符串长度
- mset key value [key value…]:同时设置一个或多个 key-value 对
- mget key [key …]:获取所有(一个或多个)给定 key 的值
哈希类型 hash
- hset hash 表的 key field value:将哈希表 key 中的域 field 的值设为 value ,如果 key 不存在,则新建 hash 表,执行赋值,如果有 field ,则覆盖值。返回值:
①如果 field 是 hash 表中新 field,且设置值成功,返回 1
②如果 field 已经存在,旧值覆盖新值,返回 0 - hget key field :获取哈希表key中给定域field的值
- hmset key field value [field value…]:同时将多个 field-value (域-值)设置到哈希表 key 中,此命令会覆盖已经存在的 field,hash 表 key 不存在,创建空的 hash 表,执行 hmset
- hmget key field [field…]:获取哈希表 key 中一个或多个给定域的值
返回值:返回和 field 顺序对应的值,如果 field 不存在,返回 nil - hgetall key :获取哈希表 key 中所有的域和值
返回值:以列表形式返回 hash 中域和域的值 ,key 不存在,返回空 hash - hdel key field [field…]:删除哈希表 key 中的一个或多个指定域 field,不存在 field 直接忽略
返回值:成功删除的 field 的数量 - hkeys key:查看hash表中key 的所有filed域
- hvals key:返回hash表中所有域值 返回值:包含哈希表所有域值的列表,key 不存在返回空列表
- hexsits key field :查看哈希表 key 中,给定域 field 是否存在
返回值:如果 field 存在,返回 1, 其他返回 0
列表 list
- lpush key value [value…]:将一个或多个值 value 插入到列表 key 的表头(最左边),从左边开始加入值,从左到右的顺序依次插入到表头
返回值:数字,新列表的长度 - rpush key value [value…]:将一个或多个值 value 插入到列表 key 的表尾(最右边),各个 value 值按从左到右的顺序依次插入到表尾
返回值:数字,新列表的长度 - lrange key start stop :获取列表 key 中指定区间内的元素,0 表示列表的第一个元素,以 1 表示列表的第二个元素;start , stop 是列表的下标值,也可以负数的下标, -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。 start ,stop 超出列表的范围不会出现错误。
返回值:指定区间的列表 - lindex key index :获取列表 key 中下标为指定 index 的元素,列表元素不删除,只是查询。0 表示列表的第一个元素,以 1 表示列表的第二个元素;列表的下标值,也可以负数的下标, -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
返回值:指定下标的元素;index 不在列表范围,返回 nil - llen key: 获取列表key的长度 返回值:数值,列表的长度; key 不存在返回 0
- lrem key count value :根据参数count 的值 移除列表中参数value 相同的值,count>0 从列表左侧向右开始移除,count<0 从列表尾部开始移除,count=0 移除表中所有与value相等的值 返回值:数值,移除的元素个数
- lset key index value :将列表key 下标为index 的元素的值设置为value值 返回值:设置成功返回 ok ; key 不存在或者 index 超出范围返回错误信息
- linsert key BEFORE |ALEFTER pivot value : 将值 value 插入到列表 key 当中位于值 pivot 之前或之后的位置。key 不存在,pivot不在列表中,不执行任何操作。
返回值:命令执行成功,返回新列表的长度。没有找到 pivot 返回 -1, key 不存在返回 0
集合类型 set
- sadd key member[member…]:将一个或者多个member添加到集合key中,已经存在于集合中的member 会直接忽略,不会重复添加。
返回值:加入到集合的新元素的个数。不包括被忽略的元素。 - smembers key :获取集合key中所有成员元素,不存在的key 视为空集合
- sismember key member :判断member 元素是否是key 的成员
返回值:member 是集合成员返回 1,其他返回 0 - scard key :获取key 集合元素的个数
- srem key member[member…]:删除集合 key 中的一个或多个 member 元素,不存在的元素被忽略。
返回值:数字,成功删除的元素个数,不包括被忽略的元素 - srandmember key[count]: 只提供 key,随机返回集合中一个元素,元素不删除,依然在集合中;提供了 count
时,count 正数, 返回包含 count 个数元素的集合, 集合元素各不相同。count 是负数,返回一个 count 绝对值的长度的集合, 集合中元素可能会重复多次。
返回值:一个元素;多个元素的集合 - spop key [count]:随机删除 key中的元素 count 代表删除元素的个数 返回值:被删除的元素,key 不存在或空集合返回 nil
有序集合类型 zset (sorted set)
- zadd key score member[ score member…]:将一个或者多个member 及score 的值添加到有序集合key 集合中, 如果member 存在 则更新值 ,score 可以是整数或浮点数 返回值:数字,新添加的元素个数
- zrange key start stop[WITHSCORES]:查询有序集合,指定区间内的元素。集合成员按照score从小到大排序。start,stop 都是从 0 开始。0 是第一个元素,1 是第二个元素,依次类推。以 -1 表示最后一个成员,-2 表示倒数第二个成员。WITHSCORES 选项让 score 和 value 一同返回。
- zrevrange key start stop[WITHSCORES]:返回有序集合中,指定区间的成员,成员按照score值递减排列(从大到小),start,stop 都是从 0 开始。0 是第一个元素,1 是第二个元素,依次类推。以 -1 表示最后一个成员,-2 表示倒数第二个成员。WITHSCORES 选项让 score 和 value 一同返回。
- zrem key member[member…]:删除有序集合 key 中的一个或多个成员,不存在的成员被忽略
返回值:被成功删除的成员数量,不包括被忽略的成员。 - zcard key :获取有序集合key成员的个数。 key 不存在,返回 0
- zrangebyscore key min max[WITHSCORES][LINIT offset count]:获取有序集 key 中,所有 score 值介于 min 和 max 之间(包括 min 和 max)的成
员,有序成员是按递增(从小到大)排序。min ,max 是包括在内 , 使用符号 ( 表示不包括。 min , max 可以使用 -inf ,+inf 表示最小和最大 limit 用来限制返回结果的数量和区间。withscores 显示 score 和 value
返回值:指定区间的集合数据
使用limit
显示从第一个元素开始取一个元素
- zrevrangebyscore key max min [WITHSCORES ] [LIMIT offset count]:返回有序集 key 中, score 值介于 max 和 min 之间(默认包括等于 max 或 min )的所有的成员。有序集成员按 score 值递减(从大到小)的次序排列。min ,max 是包括在内 , 使用符号 ( 表示不包括。 min , max 可以使用 -inf ,+inf 表示最小和最大 limit 用来限制返回结果的数量和区间。withscores 显示 score 和 value
返回值:指定区间的集合数据 - zcount key mix max :返回有序集合中,score 在范围min ~max 内(默认包括 score 值等于 min 或 max )的成员的个数。