本文共 2927 字,大约阅读时间需要 9 分钟。
传统关系型数据库在面对数据规模和复杂数据模型时显现出不足,因此NoSQL数据库应运而生。NoSQL数据库以其易扩展性、高性能和灵活的数据模型著称,成为现代应用开发的理想选择。
NoSQL数据库可以分为多种类型,每种类型适用于不同的场景:
列存储:HBase、Cassandra、Hypertable
文档存储:MongoDB、CouchDB、Riak
Key-Value 存储:Dynamo、Redis、Tokyo Cabinet
图数据库:Neo4j、HyperGraphDB
对象数据库:db4o、Versant
XML 数据库:Berkerey DB XML、BaseX
在实际应用中,Redis 的部署需要根据具体需求选择合适的方式:
docker run --name test -p $(ifconfig eth1|grep inet |awk '{print $2}'):6379 -d docker.io/redispip install redis 方便操作。Redis 提供了多种连接方式,连接池是其中一种高效的策略:
import redisr = redis.Redis(host="xxx.xxx.xxx.xxx", port=11111, decode_responses=True)r.set("name", "zhouyuyao")print(r["name"])import redispool = redis.ConnectionPool(host='xxx.xxx.xxx.xxx', port=11111, decode_responses=True)r1 = redis.Redis(connection_pool=pool)r2 = redis.Redis(connection_pool=pool)r1.set('gender', 'female')print(r1.get('gender'))r2.set('gender', 'male')print(r2.get('gender'))set 方法:
r.set('food', 'mutton', ex=3) # ex 表示过期时间(秒)r.set('food', 'beef', px=30) # px 表示过期时间(毫秒)r.set('fruit', 'watermelon', nx=True) # nx 表示只在键不存在时才执行r.set('fruit', 'apple', xx=True) # xx 表示只在键存在时才执行mset 和 mget 方法:
r.mset({'k1': 'v1', 'k2': 'v2'})print(r.mget('k1', 'k2'))getset 方法:
print(r.getset('fruit', 'barbecue'))单个操作:
r.hset('hash1', 'k1', 'v1')r.hset('hash1', 'k2', 'v2')print(r.hget('hash1', 'k1'))批量操作:
r.hmset('hash2', {'k2': 'v2', 'k3': 'v3'})print(r.hmget('hash2', 'k2', 'k3'))取出所有键值对:
print(r.hgetall('hash1'))取出所有键:
print(r.hkeys('hash1'))取出所有值:
print(r.hvals('hash1'))检查键存在性:
print(r.hexists('hash1', 'k3'))删除键值对:
r.hdel('hash1', 'k1', 'k2')基本操作:
r.lpush('list1', 'item1')print(r.lpop('list1'))范围操作:
r.lrange('list1', 0, -1)Set 集合:
r.sadd('set1', 33, 44, 55, 66)print(r.scard('set1'))有序 Set:
r.zadd('zset1', 11, 'm1', 22, 'm2', 44)print(r.zcard('zset1'))删除操作:
r.delete('gender')模糊匹配:
print(r.keys('foo*'))重命名:
r.rename('list5', 'list5-1')查看所有元素:
print(r.scan('hash2'))迭代器方式:
for i in r.sscan_iter('set3'): print(i)Redis 的管道可以在单次请求中执行多个命令,大大提高效率:
import redisimport timepool = redis.ConnectionPool(host='120.76.214.30', port=11111, decode_responses=True)r = redis.Redis(connection_pool=pool)pipe = r.pipeline()pipe.set('name', 'jack')pipe.set('age', '22')pipe.sadd('exes', 'female')pipe.incr('num')pipe.execute()print(r.get("name"))print(r.get("age"))print(r.get("sex")) 转载地址:http://nvofk.baihongyu.com/