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"))
运行结果: