目录
2、append-only file( 缩写aof)的方式 26
一、什么是nosql
(1)NoSQL的基本说明:
NoSQL(NoSQL = Not Only SQL),意味反sql运动,是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。它指的是非关系型的数据库。
(2)兴起的原因:
随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的sns类型的web2.o纯动态网站已经显得力不从心,暴露了很多难以克服的 问题,而非关系型的数据库则由于本身的特点得到了非常迅速的发展。
(3)特点:
优点:
高并发读写的性能
大数据量的扩展(分布式存储)
配置简单
灵活、高效的操作与数据模型
低廉的成本
不足之处:
没有统一的标准
没有正式的官方支持
各种产品还不算成熟
(4)常见的nosql产品
新浪微博 Redis
Google Bigtable
Amazon SimpleDB
淘宝数据平台 Tair
优酷视频 MongoDB
飞信空间 HandlerSocket
视觉中国网站 MongoDB
二、redis的基本介绍
redis是一个开源的,先进的key-value存储。它通常被称为数据结构服务器,因为键可以包含字符串,哈希,链表,集合和有序集合
(1)redis也是一个c/s 架构,
(2)memcache的数据是存储到内存中,redis数据也可以存储到内存里面,会同步到磁盘中,达到数据存储的持久化。
(3)memcache的数据存储是键值对,同样的话redis也是键值对,只不过redis值的类型比较丰富,有string(字符串),hash(哈希),list(链表),set(集合)zset(有序集合)
基本介绍:
(1)Redis是一个Key-Value存储系统。
(2)它支持存储的value类型很多,包括string(字符串)、list(链表)、set(集合)、Zset(有序集合)。这些数据类型都支持push/pop、add/remove及取交集和并集及更丰富的操作、Redis支持各种不同方式的排序。
(3)为了保证效率数据都是缓存在内存中,它也可以周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件。
(4)提供的API语言包括:C、C++、C#、Clojure Common Lisp Erlang Haskell Java Javascript Lua Objective-C Perl PHP Python Ruby Scala Go Tcl
三、完成安装
http://redis.googlecode.com/files/redis-2.4.17.tar.gz
(2)编译程序:
tar zxvf redis-2.4.17.tar.gz
cd redis-2.4.17
make
#安装到指定的目录,比如 /usr/local/redis
make PREFIX=/usr/local/redis install
注: PREFIX要大写
安装后在/usr/local/redis/bin目录下面生成如下文件:
redis-benchmark 性能测试工具
redis-check-aof 日志文件检测工具(比如断电造成日志损坏,可以检测并修复)
redis-check-dump 快照文件检测工具,效果类上
redis-cli 客户端连接程序
redis-server 服务端启动程序
(3)从解压包里面复制配置文件到新建的redis目录
cp redis.conf /usr/local/redis/redis.conf
(4)修改该配置文件,让进程在后台运行
编辑conf配置文件(vi redis.conf),修改如下内容;
daemonize yes
(5)启动与连接
服务器端启动:
使用bin里面的redis-server命令,来完成启动,在启动时要指定配置文件。
语法 redis-server 指定的配置文件
进入到redis的bin目录执行redis-server ../redis.conf
查看是否正常启动:启动后,默认的端口是6379
ps –ef |grep redis
netstat –tunpl | grep 6379
客户端连接:
使用bin目录里面的redis-cli命令来完成连接启动。
进入到redis的bin目录执行redis-cli
四、redis的数据类型
1、string类型,
字符串类型,键值对形式存储,值为字符串。
name xiaogang
age 12
email nihao@sohu.com
2、哈希(hash)类型
哈希里面的值,又为键值对:
3、链表(list):
可以模拟队列和栈。
值里面可以存储多个值,
4、集合(set)
集合的特点:集合里面的数据是唯一的,无序性。
5、有序集合
五、redis的数据类型讲解相关命令
1、string类型
String是最简单的类型,一个 key对应一个Value,String类型是二进制安全的。Redis的 string可以包含任何数据,比如jpg图片或者序列化的对象。
(1)set
设置键,值
语法:set 键名称 值
例如:我们添加一个name=“hanguo”的键值对。
重新设置则直接覆盖。
(2)get
获取key对应的string值,如果key不存在返回 nil,
语法:get 键值
(3)Setnx
设置键时,先判断一下该键是否存在,如果key已经存在,返回0,nx是not exist的意思。
若键已经存在,则设置不成功,返回0
(4)setex
设置key对应的值为string类型的value,并指定此键值对应的有效期。
语法:setex 名称 有效期 值
例如:我们添加一个color = red的键值对,并指定有效期为10秒。
(5)setrange
替换字符串中某些字符
语法:setrange 键名称 开始替换的序号 替换为的内容
例如:我们希望将hanguo的sohu邮箱替换为qq.com邮箱
(6)mset
一次设置多个key的值,成功返回ok表示所有的值都设置了,失败返回0表示没有任何值被设置。
语法:
mset 名称1 值1 名称2 值2
(7)msetnx
一次设置多个key的值,成功返回ok表示所有的值都设置了,失败返回0表示没有任何值被设置,但是不会覆盖已经存在的key。
(8)getset
设置key的值,并返回key的旧值。(设置新值,获取旧值。)
(9)getrange
获取key的value值的范围内的子字符串
getrange name 0 5
(10)mget
一次获取多个key的值,如果对应key不存在则对应返回nil。
(11)incr
对key的值做加加操作,并返回新的值。
incrby
同incr类似,加指定值,key不存在时候会设置key,并认为原来的value是0。
(12)decr
对key的值做减减操作。
decrby
同decr类似,减指定值
(13)append
给指定key的字符串追加value,返回新字符串值的长度。
(14)strlen
取指定key的value值的长度。
2、hashes类型
Redis hash是一个string类型的field和value的映射表。它的添加、删除操作都是0(1)(平均)。hash特别适合用于存储对象。相较于将对象的每个字段存成单个string类型。将一个对象存储在hash类型中会占用更少的内存,并且可以更方便的存取整个对象。
(1)hset
设置hash field为指定值,如果 key不存在,则先创建。
语法:
hset 哈希名称 字段名称 值
(2)hget
取出hash field的值。语法:hget 哈希名称 字段名称
(3)hsetnx
设置hash field为指定值,如果key不存在,则先创建,如果存在则返回0。
(4)hmset
同时设置hash的多个field
语法:hmset 哈希名称 field1 value1 field2 value2
(5)hmget
获取全部指定的hash field。
语法:hmget 哈希名称 field1 field2
(6)hincrby
指定的 hash field加上给定的值。
(7)hexists
测试指定的 field是否存在。
(8)hlen
返回指定hash的field数量。
(9)hdel
删除指定hash的field
语法:hdel 哈希名 field
(10)hkeys
返回hash的所有field
(11)hvals
返回hash的所有 value。
(12)hgetall
获取某个hash中全部的field及value
3、lists类型及操作
list是一个链表结构,主要功能是push、pop、获取一个范围的所有值等等,操作中key 理解为链表的名字。redis的list类型其实就是一个每个子元素都是string 类型的双向链表。我们可以通过push、pop操作从链表的头部或者尾部添加删除元素,这样list即可以作为栈,又可以作为队列。
(1)lpush
在key对应list的头部添加字符串元素。
语法:lpush 链表名称 值内容
(2)lrange
获取链表里面的值,语法:lrange 链表名称 0 -1
注意0 和 -1 表示取值范围,从头部到尾部。
(3)rpush
在key对应list的尾部添加字符串元素。
语法:rpush 链表名称 值内容
(3)linsert
在key对应list的特定位置前或后添加字符串。
(4)lset
设置list中指定下标的元素值。注:下标从0开始计算
(5)lrem
从key对应list中删除n个和value相同的元素。(n<0从尾删除,n=0全部删除)
(6)ltrim
保留指定key的值范围内的数据。
(7)lpop
从list的头部删除元素,并返回删除元素。
(8)rpop
从 list的尾部删除元素,并返回删除元素。
(9)rpoplpush
从第一个list的尾部移除元素并添加到第二个list的头部。
(10)lindex
返回名称为key的list中 index位置的元素。
(11)llen
返回key对应list的长度。