欢迎使用CSDN-markdown编辑器

云计算 waitig 353℃ 百度已收录 0评论

NoSQL介绍
NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。
NoSQL,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。
Redis介绍
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,并且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcacheed一样,为了保证效率,数据都是缓存到内存中,区别是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
相比memcached的优势:
–value类型更丰富
–数据操作方法更多
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。
Redis能运行在大多数POSIX(Linux, *BSD, OS X 和Solaris等)系统上,官方没有支持Windows的版本。目前最新的版本是2.8.14,这个版本主要是修复了一个2.2.7版本中遍历方式优化带来的一个bug。
和普通的Key-Value结构不同,Redis的Key支持灵活的数据结构,除了strings,还有hashes、lists、 sets 和sorted sets等结构。正是这些灵活的数据结构,丰富了Redis的应用场景,能满足更多业务上的灵活存储需求。
Redis的数据都保存在内存中,而且底层实现上是自己写了epoll event loop部分,而没有采用开源的libevent等通用框架,所以读写效率很高。为了实现数据的持久化,Redis支持定期刷新(可通过配置实现)或写日志的方式来保存数据到磁盘。

提供的API语言包括:C、C++、C#、Clojure、Common Lisp、Erlang、Haskell、Java、Javascript、Lua、Objective-C、Perl、PHP、Python、Ruby、Scala、Go、Tcl。
Redis的应用场景
这里写图片描述
Redis的安装与部署
步骤一:编译安装
下载redis-2.8.13.tar.gz到任意目录
tar -xvf redis-2.8.13.tar.gz,比如/usr/local/redis-2.8.13
mv redis-2.8.13 redis
cd /usr/local/redis
make
make install
拷贝文件
cp redis.conf /etc/ 这个文件时redis启动的配置文件
cp redis-benchmark redis-cli redis-server /usr/bin/ #这个倒是很有用,这样就不用再执行时加上./了,而且可以在任何地方执行。
注意事项:linux版本为32位,使用#make CFLAGS=”-march=i686”
启动Redis服务
cd src/
./redis-server ../redis.conf
Redis服务器默认端口号:6379
启动前修改redis.conf的daemonize yes –守护进程启动
步骤三:测试是否安装成功
客户端连接 #./redis-cli -h IP -p Port
本机客户端操作#./redis-cli
步骤四:关闭Redis
./redis-cli shutdown
Redis常用命令(Strings类型及操作)
string是最简单的类型,你可以理解成与Memcached是一模一样的类型,一个key对应一个value,其上支持的操作与Memcached的操作类似。但它的功能更丰富。
  string类型是二进制安全的。意思是redis的string可以包含任何数据,比如jpg图片或者序列化的对象。从内部实现来看其实string可以看作byte数组,最大上限是1G字节
常用命令:
Set setnx setex setrange
Mset msetnx get getset
Getrange mget incr incrby
Decr decrby append strlen
Redis hash是一个string类型的field和value的映射表.它的添加、删除操作都是O(1)(平均)。hash特别适合用于存储对象。相较于将对象的每个字段存成单个string类型。将一个对象存储在hash类型中会占用更少的内存,并且可以更方便的存取整个对象。
常用命令如下:
Hset hsetnx hmset hget
Hmget hincrby hexists hlen
Hdel hkeys hvals hgetall
list类型其实就是一个每个子元素都是string类型的双向链表。链表的最大长度是(2的32次方)。我们可以通过push,pop操作从链表的头部或者尾部添加删除元素。这使得list既可以用作栈,也可以用作队列。
list的pop操作还有阻塞版本的,当我们[lr]pop一个list对象时,如果list是空,或者不存在,会立即返回nil。但是阻塞版本的b[lr]pop可以则可以阻塞,当然可以加超时时间,超时后也会返回nil。为什么要阻塞版本的pop呢,主要是为了避免轮询。举个简单的例子如果我们用list来实现一个工作队列。执行任务的thread可以调用阻塞版本的pop去获取任务这样就可以避免轮询去检查是否有任务存在。当任务来时候工作线程可以立即返回,也可以避免轮询带来的延迟。

Lpush rpush linsert lset
Lrem ltrim lpop rpop
Rpoplpush lindex llen
Redis高级应用—安全性
Redis设置密码,防止暴力破解,密码最好设置健壮些。
Redis.conf中配置
requirepass foobared
requirepass zhongke –设置密码为zhongke
设置密码后,需要授权密码:

auth zhongke
链接客户端时输入密码:
./redis-cli –a dianxin
事务操作命令
redis-cli
redis 127.0.0.1:6379> multi –打开上下文,开启事务
redis 127.0.0.1:6379> incr t1
QUEUED
redis 127.0.0.1:6379> set name zhangsan
QUEUED
redis 127.0.0.1:6379> exec –提交事务
(integer) 1
2) OK

如何取消一个事务
redis 127.0.0.1:6379>discard –该命令可以取消事务,又称事务回滚
Redis支持两种持久化方式:
Snapshotting(快照)默认方式
save 900 1 –900秒内超过1个key被修改,则保存
save 300 10 –300秒内超过10个key被修改,则保存
save 60 10000
快照内容会存储到dump.rdb默认文件中。
append-only file(缩写aof)的方式
Aof比快照方式有更好的持久化行,它会把每次命令操作写到文件中。
Appendonly yes –启动aof持久化方式
appendonly always –收到命令就写磁盘,效率最慢
Appendonly everysec –每秒钟写入磁盘一次,性能折中
appendonly no –完全依赖os,性能最好,持久化没保证
Redis集群安装配置
使用redis-cli客户端来操作redis集群
使用命令 redis-cli -c -p [port]来启动
重新分片,重新分片操作基本上就是将某些节点上的哈希槽移动到另外一些节点上面.
使用命令./redis-trib.rb reshard 127.0.0.1:7000
执行 redis-trib 的第一步就是设定你打算移动的哈希槽的数量:
接着 redis-trib 会向你询问重新分片的源节点(source node),也就是需要把哪个节点中转移哈希槽(可以使用all)
最后输入 yes 并使用按下回车之后, redis-trib 就会正式开始执行重新分片操作
集群操作的一些命令
redis-cli -p 7000 cluster nodes [| grep master] (查看集群中的节点)
redis-cli -p 7002 debug segfault(使节点失效)


本文由【waitig】发表在等英博客
本文固定链接:欢迎使用CSDN-markdown编辑器
欢迎关注本站官方公众号,每日都有干货分享!
等英博客官方公众号
点赞 (0)分享 (0)