Nosql介绍
Nosql:一类新出现的数据库(not only sql)的特点
不支持SQL语法 存储结构跟传统关系型数据库中那种关系表完全不同,nosql中存储的数据都是k-v形式 Nosql的世界中没有一种通用的语言,每种nosql数据库都有自己的api和语法,以及擅长的业务场景 Nosql中的产品种类相当多: Mongodb Redis Hbase hadoop Cassandra hadoop
Nosql与SQL数据库的比较
适用场景不同:sql数据库适合用于关系特别复杂的数据库查询场景,nosql反之 “事务”特性的支持:sql对事务的支持非常完善,而nosql基本不支持事务 两者在不断的取长补短,呈现融合趋势
Redis介绍
Redis官方参考文档获取详细的Redis操作 http://doc.redisfans.com/
redis是一个key-value存储系统。和Memcached类似,它支持存储的values类型相对更多,包括字符串、列表、哈希散列表、集合,有序集合。
这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步,也即是说redis支持数据备份
本质:将数据保存在内存中
用途:redis可以做缓存;redis可以做消息队列
特性:
- 可以做持久化:在配置文件设置,如果你要保存到文件,可添加设置,就算电脑不小心关机了,数据还是在的。这个要不要保存都是自己来定的。
- 支持存放数据的格式多(5种格式)
{ 'k1':'hiayna', #第一种字符串格式 'k2':[11,22,33,44], #第二种列表格式 'k3':{11,22,33,44}, #第三种集合格式 'k4':{ #第四种,字典,也可以叫做哈希散列表, 'n1':'xxx', 'n2':'fff' }, 'k5':{(11,1),('xxx':5)} #有序集合 }
相关问题
为什么要使用redis?使用redis有哪些好处?
性能极高 Redis能读的速度是110000次/s,写的速度是81000次/s 丰富的数据类型 Redis支持二进制案例的Strings,Lists,Hashes,Sets及Ordered Sets数据类型操作 原子 Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子执行(原子性是指没有线程,进程那种相互竞争的概念) 丰富的特性 Redis还支持publish/subscribe,通知,key过期等等特性
redis相比memcached有哪些优势?
memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型 redis的速度比memcached快很多 redis可以持久化其数据
redis的应用场景
用来做缓存(ehcache/memcached)——redis的所有数据都是放在内存中的(内存数据库) 可以在某些特定应用场景下替代传统数据库——比如社交类的应用 在一些大型系统中,巧妙地实现一些特定的功能:session共享,购物车 只要你有丰富的想象力,redis可以帮你实现很多非常棒的功能
redis的安装
当前redis最新版本是4.0,它是一个测试版本,稳定版本是3.2版本
方式一:硬盘免安装
wget http://download.redis.io/releases/redis-3.2.8.tar.gz #下载 tar xzf redis-3.2.8.tar.gz #解压
sudo mv ./redis-3.2.8 /usr/local/redis 复制放到usr/local目录下 cd /us
cd usr/local/redis #切换到redis目录下 sudo make #生成 因为是c语言写的所有需要编译
sudo make test 测试,这段运行时间较长
sudo make install 安装,将redis的命令安装到/usr/local/目录
sudo /uer/local/bin/ 安装完成后进入目录/usr/local/bin中查看
ls -a
cd /usr/local/redis/
ls
sudo cp redis.conf /etc/redis/redis.conf 将配置文件移动到etc目录下
sudo vi /etc/redis/redis.conf 进行配置
#绑定ip:如果需要远程访问,可将此行注释,或绑定一个真实的ip
bind 127.0.0.1
#端口,默认是6379
port 6379
#是否以守护进程运行
如果以守护进程运行,则不会在命令行阻塞,类似于服务
如果以非守护进程运行,则当前终端被诸塞
设置yes表示守护进程,设置为no表示非守护进程
推荐设置成 yes
daemonize yes
#数据文件
dbfilename dump.rdb
#数据文件存储路径
dir /var/lib/redis 一开始是默认的./ 自定义的话需要先创建这个路径
#日志文件
logfile /var/log/redis/redis-server.log 一开始默认是没有的,需要手动建立一个目录放日志文件
#数据库,默认有16个
database 16
#主从复制
slaveof
简单介绍一下文件
redis-server redis服务器 redis-cli redis命令行客户端 redis-benchmake redis性能测试工具 redis-check-aof AOF修复工具 reids-check-rdb RDB文件检索工具(redis持久化就是用的rdb文件)
启动服务端与客户端
redis-server --help 获取启动的帮助命令 推荐使用服务的方式管理redis服务 启动 sudo service redis start 停止 sudo service redis stop 重启 sudo service redis restart 如果是按之前配置,自定义过后就不能用上面的方式了 sudo redis-service /etc/redis/redis.conf 指定加载的配置文件 ps aux | grep redis 查看redis服务器进程 sudo kill -9 pid 杀死redis服务器 客户端 redis-cil --help 获取客户端帮助命令 redis-cli 可以直接启动,ip和端口都是默认的 ping 运行测试命令 切换数据库 默认是0号数据库 select index
数据操作
redis是key-value的数据结构,每条数据都是一个键值对
键的类型是字符串
注意:不能重复
值的类型分为五种 字符串string 哈希hash 列表list 集合set 有序集合zset
数据操作行为
保存 修改 获取 删除
点击中文官方文档查看命令文档 http://redis.cn/commends.html
strings类型
字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述性息等。在Redis中字符串类型的Value最多可以容纳的数据长度是512M
保存
如果设置的键不存在则为添加,如果设置的键已经存在则修改 设置键值 set key value 查看是否有值 key * (空的返回empty list or set) 查看键值 get key 修改键值就是重新设置 设置键值及过期时间,以秒为单位 setex key seconds value 设置多个键值 mset key1 value1 key2 value2 . 追加值(就是在值的尾部拼接上) append key value
获取
获取 根据键获取值,如果不存在此键则返回nil get key 根据键获取多个值 mget key1 key2 ...
删除
键命令(支持所有数据类型)
查找键,参数支持正则表达式 keys pattern 例如key * key 'a*' 判断键是否存在,如果存在返回1,不存在返回0 exists key1 查看键对应的value的类型 type key 删除键以及对应的值 del key1 key2 设置过期时间,以秒为单位 如果没有指定过期时间则一直存在,直到使用DEL移除 expire key seconds 查看有效时间,以秒为单位 ttl key
hash
hash用于存储对象,对象的结构为属性,值
值的类型为strings
增加,修改
设置单个属性 hset key filed value 可能会报错 一串英文 Redis被配置为保存数据库快照,但它目前不能持久化到硬盘。用来修改集合数据的命令不能用 原因: 强制关闭Redis快照导致不能持久化。解决方案: 运行config set stop-writes-on-bgsave-error no 命令后,关闭配置项stop-writes-on-bgsave-error解决该问题 设置多个属性 hmset key field1 value1 field2 value2
获取
获取指定键所有的属性 hkeys key 获取一个属性的值 hget key field 获取多个属性的值 hmget key field1 field2... 获取所有属性的值 hvals key
删除
删除整个hash键及值,使用del命令 删除属性,属性对应的值会被一起删除 hdel key field1 field2
list
列表的元素类型为string
按照插入顺序排序
增加
在左侧插入数据 lpush key value1 value2 查看插入的数据 lrange key index(start) index(end) 在右侧插入数据 rpush key value1 value2 在指定元素的前后插入新元素 linsert key before或after 现有元素 新元素
获取
返回列表里指定范围内的元素 start,stop为元素的下表索引 索引从左侧开始,第一个元素为0 索引可以是负数,表示从尾部开始计数,如-1表示最后一个元素 lrange key start stop
设置指定索引位置的元素值
索引从左侧开始,第一个元素为0
索引可以是负数,表示尾部开始计数,如-1表示最后一个元素
lset key index value
删除
删除指定元素 将列表中前count次出现的值value的元素移除 count > 0: 从头往尾移除 count <0: 从尾往头移除 count = 0: 移除所有 lrem key count value
set类型
无序集合 元素为string类型 元素具有唯一性,不重复 说明:对于集合没有修改操作
增加
添加元素 sadd key member1 member2
获取
返回所有元素 smembers key
删除
删除指定元素 srem key
zset类型
sorted set ,有序集合 元素为string类型 元素具有唯一性,不重复 每个元素都会关联一个 double类型的score,表示权重,通过权重将元素从小到大排序 说明:没有修改操作
增加
添加 zadd key score1 member1 score2 member2
获取
返回指定范围的元素 start,stop为元素的下标索引 索引从左侧开始,第一个元素为0 索引可以是负数,表示从尾部开始计数,如-1表示最后一个元素 zrange key start stop 返回score值在min和max之间的成员 (包括min和max本身) zrangebyscore key min max 返回成员member的score值 zscore key member
删除
删除指定元素 zrem key member1 member 删除权重在指定范围的元素 zremrangebyscore key min max