Python基础——NOSQL(0515)

1、NOSQL简介python

一、NoSQL:指的是非关系型的数据库。用于超大规模数据的存储。redis

二、NoSQL的特色:数据库

          ①不须要预约义模式:缓存

             不须要预先定义数据模式、表结构。即数据中的每条记录均可能有不一样的属性和格式。服务器

          ②无共享架构:网络

            相对于 全共享架构:全部数据存储在区域网络中(跨机房、跨网段等)。NOSQL 每每将数据架构

            划分后存储在各个本地服务器上。故而NOSQL的数据读取性能更好。异步

          ③弹性可扩展:性能

            能够在系统运行时动态增长或者删除结点。不须要停机维护,数据能够自动迁移。spa

          ④分区:NOSQL 将数据分区,并将记录分散在多个节点上面。而且在分区的同时还要进行

            复制 操做。这样既能提升并行性能,又能保证没有单点失效的问题。

          ⑤异步复制:NOSQL是基于日志的异步复制。这样不会有网络延时;缺点是并不能100%保证数据

            的一致性。这样的工做方式在出现故障时,可能对丢失少许数据。

          ⑥BASE特性:基本可用,软状态/柔性事物、最终一致性。

             相对于事物严格的ACID特征,NOSQL 数据库保证的是BASE特性。

             

三、经常使用的  NOSQL数据库

     

四、Redis 的概念:

     Redis 是一个KEY-VALUE 存储系统。和Memcached 相似,它支持存储的 value 类型更多。包括 string、list、set(集合)、zset(有序集合) 和 hash(哈希类型)。

      支持各类不一样方式的排序。

      为保证效率,数据都缓存在内存中。

     会周期性的把更新数据写入磁盘或把修改操做写入追加的记录文件,在此基础上实现主从同步。

     Redis 提供了 Java    C/C++  C#    PHP    Perl    Python   Ruby 等客户端,使用方便。

五、Redis 中的 key通常都是字符串;value  能够是:字符串、列表、集合、哈希类型。

六、list 和  set 的区别:元素是否能够重复

     list类型,list中的元素能够重复:{1,2,3,1,2,3}            

     set类型,set中的元素不能够重复:{1,2,3,4,5,6,7}

七、源码安装 Redis(通常安装在 Linux 系统中)

[root@JSH-01 ~]# cd /usr/local/src

[root@JSH-01 src]# wget http://download.redis.io/releases/redis-3.0.1.tar.gz

[root@JSH-01 src]# tar zxf redis-3.0.1.tar.gz

[root@JSH-01 src]# ls

[root@JSH-01 src]# mv  redis-3.0.1  /usr/local/redis

[root@JSH-01 local]# cd  redis/

[root@JSH-01 redis]# make

[root@JSH-01 redis]# echo $?       查看返回值是否为0     用于判断是否安装成功

[root@JSH-01 redis]# ls
00-RELEASENOTES  COPYING  Makefile   redis.conf       runtest-sentinel  tests
BUGS             deps     MANIFESTO  runtest          sentinel.conf     utils
CONTRIBUTING     INSTALL  README     runtest-cluster  src
[root@JSH-01 redis]# cd  src/      进入redis目录下的 src目录

[root@JSH-01 src]# make test     等待10分钟左右

[root@JSH-01 src]# make install

[root@JSH-01 src]# redis-server &

The server is now ready to accept connections on port 6379

[root@JSH-01 src]# ps aux|grep redis       看到以下信息表明启动成功

root      5156  0.1  0.7 140836  7824 pts/0    Rl   22:13   0:00 redis-server *:6379
root      5183  0.0  0.0 112664   968 pts/0    R+   22:14   0:00 grep --color=autoredis

八、Linux 开机后启动Redis的服务端

[root@JSH-01]# cd /usr/local/redis/src/

[root@JSH-01 src]# redis-server  ../redis.conf   

九、进入 Redis 客户端

[root@JSH-01]# cd /usr/local/redis/src/

[root@JSH-01 src]# redis-cli

127.0.0.1:6379> keys *
 1) "size"
 2) "name"
 3) "uuu"
 4) "name1"
 5) "Name"
 6) "age"
 7) "adress"
 8) "abc"
 9) "list1"
10) "time"
127.0.0.1:6379> get uuu
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> get size
"(tuple)"
 

2、Python 安装  redis

一、在pycharm 的Terminal 中使用  pip install  redis 安装

二、链接 redis 服务器

     链接redis服务器,必须知道redis服务器的ip地址和redis的端口,默认端口为6379

import redis
m = redis.Redis(host="192.168.6.137",port=6379)
m.set("adress","Beijing!")
print(m.get("adress"))

运行结果: 

三、redis  链接池

     redis-py使用  connection pool  来管理redis server的全部链接,避免每次创建、释放链接的开销。

     默认,每一个Redis实例都会维护一个本身的链接。

     能够直接创建一个链接池做为Redis的参数,这样就能够实现多个Redis实例共享一个链接池。

import redis
pool = redis.ConnectionPool(host="192.168.6.137")
y = redis.Redis(connection_pool=pool)
y.set("name","python 3")
print(y.get("name"))

运行结果:

3、Redis 的操做

      提供 5 中数据类型的操做,分别是 string字符串类型、list列表类型、set集合类型、hash类型和字典

一、string 字符串的操做

     格式  set(name, value, ex=None, px=None, nx=False, xx=False)

     其中  ex,过时时间(秒)                            px,过时时间(毫秒)

             nx,若是设置为True,则只有name不存在时,当前set操做才执行,同setnx(name, value)

             xx,若是设置为True,则只有name存在时,当前set操做才执行 get(name)获取值

set 命令用于设置给定 key 的值。若是 key 已经存储其余值, SET 就覆写旧值,且无视类型。
mset 命令用于同时设置一个或多个 key-value 对。
Get 命令用于获取指定 key 的值。若是 key 不存在,返回 None 。若是key 储存的值不是字符串类型,返回一个错误。
Mget 命令返回全部(一个或多个)给定 key 的值。 若是给定的 key 里面,有某个 key 不存在,那么这个 key 返回 None
import redis
m = redis.Redis(host="192.168.6.137",port=6379)
m.set("adress","Beijing!")   #设置单个key值
print(m.get("adress"))

import redis
pool = redis.ConnectionPool(host="192.168.6.137")
y = redis.Redis(connection_pool=pool)
y.mset({"name":"python3","age":"18"})  #设置多个key值
print(y.mget("name","age","size"))

运行结果:

相关文章
相关标签/搜索