对于NoSQL并没有一个明确的范围和定义,但是他们都普遍存在下面一些共同特征:
1. 不需要预定义模式:不需要事先定义数据模式,预定义表结构。数据中的每条记录都可能有不同的属性和格式。当插入数据时,并不需要预先定义它们的模式。
2. 无共享架构:相对于将所有数据存储的存储区域网络中的全共享架构。NoSQL往往将数据划分后存储在各个本地服务器上。因为从本地磁盘读取数据的性能往往好于通过网络传输读取数据的性能,从而提高了系统的性能。
3. 弹性可扩展:可以在系统运行的时候,动态增加或者删除结点。不需要停机维护,数据可以自动迁移。
4. 分区:相对于将数据存放于同一个节点,NoSQL数据库需要将数据进行分区,将记录分散在多个节点上面。并且通常分区的同时还要做复制。这样既提高了并行性能,又能保证没有单点失效的问题。
5. 异步复制:和RAID存储系统不同的是,NoSQL中的复制,往往是基于日志的异步复制。这样,数据就可以尽快地写入一个节点,而不会被网络传输引起迟延。缺点是并不总是能保证一致性,这样的方式在出现故障的时候,可能会丢失少量的数据。
6. BASE:相对于事务严格的ACID特性,NoSQL数据库保证的是BASE特性。BASE是最终一致性和软事务。NoSQL数据库并没有一个统一的架构,两种NoSQL数据库之间的不同,甚至远远超过两种关系型数据库的不同。可以说,NoSQL各有所长,成功的NoSQL必然特别适用于某些场合或者某些应用,在这些场合中会远远胜过关系型数据库和其他的NoSQL。常用的nosql数据库:memcached、redis、flare、ROMA、mongodb、hbase等。
redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
Redis一般都是安装在linux系统中,具体安装步骤如下:
#cd /usr/local/src #wget http://download.redis.io/releases/redis-3.0.1.tar.gz #tar xzf redis-3.0.1.tar.gz #cd redis-3.0.1 #make #src/redis-server & 或者在他的配置文件中把demon 改成yes查看redis是否启动成功
ps –ef |grep redis netstat –lnp |grep 6379
连接redis服务器,必须知道redis服务器的ip地址和redis的端口,默认端口为6379。
#/usr/bin/python # -*- coding:utf-8 -*- import redis r = redis.Redis(host="192.168.48.128", port=6379) r.set("shang", "I love you!") print(r.get("shang"))
lpop(name) 在name对应的列表的左侧获取第一个元素并在列表中移除,返回值删除那个元素的值
扩展: rpop(name)表示从右向左操作
lindex(name,index):在name对应的列表中根据索引取列表元素
lrange(name,start,end):在name对应的列表分片获取数据
hgetall(name):获取name对应hash的所有键值
hlen(name):获取name对应的hash中键值的个数
hkeys(name):获取name对应的hash中所有的key的值
hvals(name):获取name对应的hash中所有的value的值
hexists(name,key):检查name对应的hash是否存在当前传入的key
hdel(name,*keys):将name对应的hash中指定key的键值对删除
转载于:https://www.cnblogs.com/yangjian319/p/9048365.html