Python基础——NOSQL(0515)

一、NOSQL简介

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

2、NoSQL的特点:

          ①不需要预定义模式:

             不需要预先定义数据模式、表结构。即数据中的每条记录都可能有不同的属性和格式。

          ②无共享架构:

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

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

          ③弹性可扩展:

            可以在系统运行时动态增加或者删除结点。不需要停机维护,数据可以自动迁移。

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

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

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

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

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

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

             220354_HsaR_3821557.png

3、常用的  NOSQL数据库

     221714_V7ed_3821557.png

4、Redis 的概念:

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

      支持各种不同方式的排序。

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

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

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

5、Redis 中的 key一般都是字符串;value  可以是:字符串、列表、集合、哈希类型。

6、list 和  set 的区别:元素是否可以重复

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

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

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

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

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

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

9、进入 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)"
 

二、Python 安装  redis

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

221927_yJdb_3821557.png

2、连接 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"))

运行结果: 

222445_2cdc_3821557.png

3、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"))

运行结果:

223534_NlcC_3821557.png

三、Redis 的操作

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

1、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"))

运行结果:

230102_aUxb_3821557.png

 

转载于:https://my.oschina.net/u/3821557/blog/1812471

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值