一类新出现的数据库(not only sql),他的特点:
(1)不支持 SQL语法。(2)存储结构跟传统的关系型数据库的那种关系表完全不同,nosql中存储的数据都是键值对的形式。(3)Nosql的世界中没有一种通用的语言,每种Nosql数据库都有自己的api和语法,以及擅长的业务场景。(4)Nosql中的产品相当多: Mongodb Redis Hbase hadoop Cassandra hadoop使用场景不同:sql数据库适用于关系特别复杂的数据场景,nosql反之。 "事务"特性的支持:sql对事务的支持非常完善,而nosql基本不支持事务。 两者在不断的取长补短,呈现融合趋势。
Redis是一个开源的使用ANSI C语言编写的,支持网络,可基于内存亦可持久化的日志型,key-value数据库,并提供多种语言的API。 Redis是Nosql技术阵营中的医院,他通过多种键值数据类型来适应不同场景下的存储需求,借助一些高层的接口使用其可以胜任,如缓存、队列系统的不同角色。
1.4Redis特性: Redis与其他key-value的产品具有以下三个特点:
Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启时可以再次加载进行使用。Redis不仅仅支持简单的key-value类型的数据,同时还支持list,set,zset,hash等数据结构的存储。Redis支持数据备份,即master-slave(主-从)模式的数据备份。用来做缓存(ehcache/memcache): redis的所有数据是存放在内存中的(内存数据库) 可以在某些特定应用场景下替代传统数据库,如社交应用 在一些大型的系统中,巧妙的实现一些特定的功能:session共享,购物车 只要你有丰富的想象力,redis可以给你无限的惊喜…
redis官方网站 redis中文官网
当前redis最新版是4.0,是一个测试版本,稳定版是3.2 当前ubuntu虚拟机中已经安装好redis的,以下步骤跳过,最新稳定版下载链接: http://download.redis.io/releases/redis-3.2.8.tar.gz
step1下载: wget http://download.redis.io/releases/redis-3.2.8.tar.gz step2解压: tar -zxvf redis-3.2.8.tar.gz step3:复制,放到 usr/local目录下 sudo cp -r ./redis-* /usr/local/redis/ step4:进入redis目录 cd /usr/local/redis/ step5:生成 sudo make step6:测试(这段运行时间会比较长) sudo make test step7:安装:将redis的命令安装/usr/local/bin/目录下 sudo make install step8: 安装完成后,我们进入目录/usr/local/bin/中查看 cd /usr/local/bin ls -allredis-server: redis服务器 redis-cli: redis命令行客户端 redis-benchmark: redis性能测试工具 redis-check-aof: AOF文件修复工具 redis-check-rdb: RDB文件检索工具
step9: 配置文件,移动到/etc/目录下 配置文件目录为/usr/local/redis/redis.conf sudo cp /usr/local/redis/redis.conf /etc/redis/路径/etc/redis/redis.conf 查看:sudo cat /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配置信息:https://blog.csdn.net/ljphilp/article/details/52934933
服务器端的命令为:
redis-server查看帮助文档:
redis-server --help推荐是引用服务的方式管理redis
启动:
sudo service redis start停止:
sudo service redis stop重启:
sudo service restart个人习惯:
查看redis服务进程: ps -ef|grep redis 杀死redis服务器: sudo kill -9 pid 指定加载的配置文件(如果改变了redis的路径,必须使用这个命令启动加载配置文件): sudo redis-server /etc/redis/redis.confredis是key-value的数据结构,每一条数据都对应一个键值。 键的类型是字符串,且不能重复 值得类型分为5种:
字符串string哈希hash:键值对中,一个key, 在value中存储在存储多个键值对列表list集合set有序集合zset中文命令文档 Redis命令参考文档
字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这就意味着该类型可以接受任何格式的数据,如jpeg图像或json对象的描述信息等。在Redis中字符串类型的Value最多可以容纳的数据长度是512M。
如果设置的键不存在则为添加,如果设置的键已经存在则为修改
set key value
例如:设置键为name,值为iycast的数据:
set name itcastsetex key seconds valu
例:设置键aa,值为bb,过期时间为10
setex aa 10 bbmset key1 value1 key2 vlaue2 …
例如:设置a1值为python,a2值为java,a3值为c
append key value
例如:往a1的值后面追加一个哈哈
get key 例如:
mget key1 key2 …
例如:
keys pattern 例1:查找所有键:
keys *例2:查看名称中包含a的键
keys 'a*'分别是:以a开头, 以a结尾, 包含a
exists key
3.3 查看键对应值得类型:
type key
3.4 删除键及对应的值:
del key1 key2 …
例如:删除a2,a3
del a2 a3
如果没有指定过期时间则一直存在,直到使用del一出
expire key seconds
例如:设置键a1的过期时间为三秒
expire a1 3ttl key
hash用于存储对象,对象的结构为属性、值 值得类型为string
hset key field value
例如:设置user的属性name的值为itheima
hset user name itheima提示: Redis被设置为保存数据库快照,但它目前不能持久化到硬盘.用来修改集合数据的命令不能用。 原因: 强制关闭Redis快照导致不能持久化的解决方案: 运行config set stop-writes-on9bgsave-error no 命令后,关闭配置项stop-writes-on9bgsave-error解决该问题。 2.2 设置多个属性:
hmset key field1 value1 field2 value2 …
例如:设置键u2的属性name为itcast,属性age为11
hmset u2 name itcast age 11hkeys key
例如:获取u2的所有属性
hkeys u2hget key field
例如:获取u2中的name的值
hmget key field1 field2…
例如:获取u2的name和age
hmget u2 name agedhvals key
获取所有u2所有属性的值
hvals u2hdel key field1 field2 …
例如:删除u2的属性age
hdel u2 age列表的元素为string 按照插入顺序排序
lpush key value1 value2 …
例如:从键a1的列表左侧加入数据a,b,c:
lpush aa a b crpush key value1 value2 …
例如:从键aa的列表右侧插入数据,x,y,z
rpush aa x y zlinsert key before/after 现有元素 新元素
例:在键aa的列表中元素b前加入一个元素3
linsert aa before b 3start、stop为元素的下标索引 索引从左往右,第一个元素为0 索引可以为负数,表示从尾部开始
lrange key start stop
例4:获取键aa列表内的所有元素:
lrange aa 0 -1索引可以为负数,表示尾部开始,如-1表示最后一个元素
lset key index value
例如:修改键aa的列表中下标为2的元素的值为p
iset aa 2 p5.删除: 5.1删除指定元素: 将列表中前count次出现的值为value的元素移除
count>0:从头开始删 count<0:从尾开始删 count=0:删除所有
例如:向列表bb中加入元素a,b,b,a,a,b
lpush bb a b b a a b从列表bb右侧开始删除两个b
lrem bb -2 b查看列表bb中的所有元素
lrange bb 0 -1无需集合 元素为string类型 元素具有唯一性,不重复 说明:对于集合没有修改操作
sadd key member1 member2 …
例如:向cc集合中添加元素’zhangsan’ ‘lisi’ ‘wangwu’
sadd cc 'zhangsan' 'lisi' 'wangwu'smembers key
例如:获取cc集合中的所有元素
smembers ccsrem key member1 member2 …
例如:删除cc集合中的’wangwu’
srem cc 'wangwu'说明:没有修改操作
zadd key score1 member1 score2 member2 …
例如:向键dd的集合中添加元素’lisi’ ‘zhaoliu’ ‘zhangsan’ ‘wangwu’,权重分别为4,5,6,3
zadd dd 4 'lisi' 5 'zhaoliu' 6 'zhangsan' 3 'wangwu'zrange key start stop
例如:获取键dd集合中的所有元素
zrange dd 0 -1zrangebyscore key min max
例如:获取键dd集合中权值在5和6之间的成员
zrangebyscore dd 5 6zscore key member
例如:获取键dd中集合元素’zhangsan’的权重
zscore dd 'zhangsan'zrem key member1 member2 …
例如:删除集合’dd’集合中元素’zhangsan’
zrem dd 'zhangsan'zrembyscore key min max
例如:在键dd集合中删除权值在5和6之间的元素
zrembyscore dd 5 6安装Redis的3中方式https://github.com/andymccurdy/redis-py 第一种:进入虚拟环境,联网安装redis
pip install redis第二种: 进入虚拟环境.联网安装redis
easy_install redis第三种:到中文官网-客户端下载redis包的源码,使用源码安装:
wget https://github.com/andymccurdy/redis-py/archive/master.zip unzip master.zip cd redis-py-master sudo python setup.py install这个模块中提供了StrictRedis对象(Strict严格),用于连接redis服务器,并按照不同类型提供不同的方法,进行交互操作。
通过init创建对象,指定参数host,port与指定的服务器和端口连接,host默认为localhost,port默认为6379,db默认为0:
sr = StrictRedis(host = 'localhost', port = 6379, db = 0)简写为:
sr = StrictRedis()根据不同的类型,拥有不同的实例方法,与前面学习redis方法对应,方法需要的参数与命令的参数一致。
http://python.jobbole.com/87305
一个master可以拥有多个slave, 一个slave又可以拥有多个slave, 如此下去, 形成一个强大的多级服务器集群架构。 master用来写数据, slave用来读数据,经统计, 网站的读写比率是10:1。 通过主从配置可以实现读写分离。 master和slave都是一个redis实例(redis服务)
### 2.1 配置主: 查看当前主机的ip地址:
ifconfig修改redis’的配置文件:
sudo vi /etc/redis/redis.conf bind 192.168.63.130保存 -->退出 重启redis服务
sudo service redis stop redis-server /etc/redis/redis.conf复制/etc/redis/redis.conf文件
sudo cp redis.conf ./slave.conf修改redis/slave.conf文件
sudo vi slave.conf编辑内容:
bind 192.168.63.130 # 绑定本机的ip地址 slaveof 162.168.63.130 6379 # 主服务的ip和port port 6378 # 启动一个与主服务不同的端口启动服务:
sudo redis-server /etc/redis/slave.conf查看主从关系:
redis-cli -h 192.168.63.130 info Replication在master和slave分别执行info命令,查看输出信息,进入主客户端:
redis-cli -h 192.168.63.130 -p 6379进入从客户端:
redis-cli -h 192.168.63.130 -p 6378在master上写数据
set name itcast在slave上读数据:
get name 但是不能再slave上写数据,slave是只读的数据访问量过大时的服务器负担,提高性能
集运是一组相互独立的,通过高速网络互连的计算机,他们构成了一个组,并以单一系统的模式加以管理。一个客户与集群相互作用时,集群像是一个独立的服务器。集群配置是用于提高可用性和可缩放性的。 当请求到来首先由负载均衡服务器处理,把请求转发到另外的一台服务器上。
软件层面: 只有一台电脑,在这台电脑上启动多个redis服务。 硬件层面: 存在多台实体机,每台电脑上启动一个redis服务或者多个redis服务。
redis集群搭建: http://www.cnblogs.com/wuxl360/p/5920330.html [python]搭建redis集群 http://blog.5ibc.net/p/51020.html
在config目录下创建7001.config,编辑内容如下:
port 7001 bind 172.168.62.130 daemonize yes pidfile 7001.pid cluster-enable yes cluster-config-file 7001_node.conf cluster-node-timeout 15000 appendonly yes在config目录下创建7002.config,编辑内容如下:
port 7002 bind 172.168.62.130 daemonize yes pidfile 7002.pid cluster-enable yes cluster-config-file 7002_node.conf cluster-node-timeout 15000 appendonly yes这三个文件区别在于port、pidfile、cluster-config-file这三个文件
redis-server 7000.conf redis-server 7001.conf redis-server 7002.conf
在config目录下创建7001.config,编辑内容如下:
port 7004 bind 172.168.179.142 daemonize yes pidfile 7004.pid cluster-enable yes cluster-config-file 7004_node.conf cluster-node-timeout 15000 appendonly yes在config目录下创建7002.config,编辑内容如下:
port 7005 bind 172.168.179.142 daemonize yes pidfile 7005.pid cluster-enable yes cluster-config-file 7005_node.conf cluster-node-timeout 15000 appendonly yes这三个文件区别在于port、pidfile、cluster-config-file这三个文件.
redis-server 7003.conf redis-server 7004.conf redis-server 7005.conf
### 3.1 redis的安装包中包含了redis-trib.rb, 用于创建集群
将命令复制,这样可以在任何目录下执行:
sudo cp /usr/share/doc/redis-tools/examples/redis-trib.rb /ur/local/bin因为redis的这个命令使用ruby开发的,所以安装ruby环境
sudo apt-get install ruby显示提示信息输入y,按回车继续安装:
(这个命令是:每个节点配置一个从属服务,将以上地址配置成一个集群,这样一个主服务配备一个从服务,一共随机形成3个节点) 执行上面命令在某些情况下会报错,主要原因是由于安装的ruby不是最新版本 天朝的防火墙导致无法下载最新版本,所以需要设置一下gem的源 解决办法如下:
先查看自己的gem源是什么地址 gem source -l # 如果是https://rubygems.org/需要换源 更新命令 gem source --add https://gems.ruby-china.org/ --remove https://rubygems.org/ 通过gem安装redis的相关依赖 sudo gem install redis 然后重新执行命令"创建集群"当前搭建的主服务器为7001,7000,7003,对应的从服务器7004,7005,7002 在172.168.62.130机器上连接7002,加参数-c表示连接到集群
redis-cli -h 172.168.62.130 -c -p 7002写入数据:
set name itcast自动跳转到7003服务器,并写入数据