一、NoSQL概述
NoSQL(not only SQL):泛指非关系型数据库,是一类新出现的数据库,不支持SQL语法,其存储的数据都是kv形式,存储结构与关系型数据库中的关系表完全不同
NoSQL产品种类:主要有Redis、MongoDB、HBASE Hadoop、Cassandra Hadoop
nosql没有通用的语言,每种产品都有自己的api和语法,以及擅长的业务场景
NoSQL与SQL区别比较
- 适用场景不同,SQL适用于关系特别复杂的数据查询场景,而NoSQL与之相反
- 事务支持不同,SQL对于事务的支持非常完善,而NoSQL基本不支持事务
- 二者各有所长、取长补短,呈现融合趋势
二、Redis概述
Redis:开源、使用ANSI C语言编写、支持网络集群搭建、可基于内存和可持久化的日志型、key-value数据库,并支持多种语言的API,通过多种键值数据类型来适应不同场景下的存储需求,借助一些高级接口可以胜任缓存、系统队列的不同角色
Redis与其它kv产品特点
- 支持数据持久化,可将内存中的数据保存在磁盘中,重启可再次加载使用
- 支持简单的kv类型数据,同时还提供list、set(无序集合)、zset(有序集合)、hash等数据结构的存储
- 支持master-slave模式的数据备份
Redis优势
- 读写性能极高:读的速度是110000次/s,写的速度是81000次/s,数据在内存中
- 数据类型丰富:支持二进制的 Strings,Lists,Hashes,Sets 及 Ordered Sets 数据类型操作
- 原子性:所有操作都具有原子性,能够保证一致性
- 特性丰富:支持publish、subscribe、通知、key过期等特性
Redis应用场景
- 用来做缓存(ehcache/memcached):redis的所有数据是放在内存中的,即为内存数据库
- 可在某些特定应用场景下代替关系型数据库,可在大型系统中巧妙实现一些特定功能
三、安装与配置
ubuntu安装与配置:ubuntu安装和启动redis命令步骤及其配置文件redis.conf
windows安装redis:windows下载redis、windows安装redis、windows启动redis
四、服务端与客户端命令
- 服务端
- 服务端命令:redis-server
- 查看帮助文档:redis-server --help
- 查看redis-server服务进程:ps aux | grep redis
- 杀死redis服务器:sudo kill -9 pid
- 指定加载的配置文件:sudo redis-server /etc/redis/redis.conf
- 客户端
- 客户端命令:redis-cli
- 查看帮助文档:redis-cli --help
- 连接redis:redis-cli
- 运行测试命令:ping
- 切换数据库:默认16个,由0-15来标识,连接时默认选择第一个数据库
部分操作展示如下,其余请访问第三部分安装与配置
五、redis数据类型
redis是k-v的数据结构,每条数据都是一个键值对
- 键:类型是字符串,不能重复
- 值:类型有字符串string、哈希hash、列表list、集合set、有序集合zset五种
5.1 string类型
string类型:是redis中最为基础的数据存储类型,存储的是二进制,这意味着该类型可存储任何格式的数据,如jpg、json等,string类型的value最多可容纳512M的数据长度
命令如下
保存/修改:若键值不存在则添加,若已存在则修改
设置键值:set key value
设置键值及过期时间:setex key seconds value // 以秒为单位
设置多个键值:mset key1 value1 key2 value2 ……
追加值:append key value
获取:根据键获取值,若不存在此键则返回nil
获取键值:get key
根据多个键获取多个值:mget key1 key2 ……
具体操作如下
可能报如下错误
(error) MISCONF Redis is configured to save RDB snapshots,but it is currently not able
to persist on disk. Commands that may modify the data set are disabled,because this
instance is configured to report errors during writes if RDB snapshotting fails (stop
writes-on-bgsave-error option). Please check the Redis Logs for details about the RDB
error.
解释:(错误)MISCONF Redis 已配置为保存 RDB 快照,但目前无法持久化在磁盘上。可能修改数据集的命令将被禁用,因为此实例配置为在 RDB 快照失败时在写入期间报告错误(在 bgsave 错误时停止写入选项)。请查看 Redis 日志,了解有关 RDB 错误的详细信息。
- 原因:强制关闭Redis快照导致不能持久化
解决方法:
输入命令修改值为no:config set stop-writes-on-bgsave-error no
获取与修改
5.2 键命令
查找键:keys pattern # pattern支持正则表达式
判断键是否存在:exists key # 存在返回1,否则返回0
查看键所对应的value值的类型:type key # 结果为redis所支持的五种类型中一种
删除键及所对应值:del key1 key2 ……
设置过期时间:expire key seconds # 以秒为单位,若为指定时间则一直存在,直至用del删除
查看有效时间:ttl key # 秒为单位
操作如下
5.3 hash类型
hash用于存储对象,对象的结构为属性、值 ,值的类型为string
增加、修改:有则修改、无则添加
设置单个属性:hset key field value # k-f-v:键-属性-值
设置多个属性:hmset key field1 value1 field2 value2 ……
获取
获取指定键所有属性:hkeys key
获取一个属性的值:hget key field
获取多个属性的值:hmget key field1 field2 ……
获取所有属性的值:hvals key
删除
删除整个hash键和值:del key
删除属性:hdel key field1 field2 …… # 属性对应值会一起删除
5.4 列表类型
列表元素类型为string,按插入顺序排序
增加
左侧插入数据:lpush key value1 value2 ……
右侧插入数据:rpush key value1 value2 ……
在指定元素前或后插入数据:insert key before或after 指定元素 新元素
获取
返回列表中指定范围内的元素:lrange key start stop
# start、stop为下标索引,索引从左开始,第一个为0,索引可为负,表示从尾部开始计数,-1表示最后一个元素
修改
设置指定索引位置元素值:lset key index value
删除
删除指定元素:lrem key count value # 键列表中前count次出现的值为value的元素删除
count>0:从头至尾移除
count<0:从尾至头移除
count=0:移除所有
5.5 set类型
无序集合,元素为string类型,元素具有唯一性,不能重复,不能修改
添加元素:sadd key member1 member2 ……
获取所有元素:smembers key
删除指定元素:srem key 指定元素
操作如下
5.6 zset类型
有序集合(sorted set),元素为string类型,具有唯一性,不能重复,不能修改,每个元素都会关联一个double类型的score,表示权重,通过权重将元素从小到大排序
增加:zadd key score1 member1 score2 member2 ……
获取:zrange key start stop
# 返回指定范围内的元素,start、stop为下标索引,索引从左开始,第一个元素为0
# 索引可为负,表示从尾部开始计数,如-1表示最后一个元素
返回score值在min和max之间的成员:zrangebyscore key min max
返回成员member的score值:zscore key member
删除
删除指定元素:zrem key member1 member2
删除权重在指定范围的元素:zremrangebyscore key min max
操作如下
学习导航:http://xqnav.top/