一、NOSQL简介
1、NoSQL:指的是非关系型的数据库。用于超大规模数据的存储。
2、NoSQL的特点:
①不需要预定义模式:
不需要预先定义数据模式、表结构。即数据中的每条记录都可能有不同的属性和格式。
②无共享架构:
相对于 全共享架构:所有数据存储在区域网络中(跨机房、跨网段等)。NOSQL 往往将数据
划分后存储在各个本地服务器上。故而NOSQL的数据读取性能更好。
③弹性可扩展:
可以在系统运行时动态增加或者删除结点。不需要停机维护,数据可以自动迁移。
④分区:NOSQL 将数据分区,并将记录分散在多个节点上面。并且在分区的同时还要进行
复制 操作。这样既能提高并行性能,又能保证没有单点失效的问题。
⑤异步复制:NOSQL是基于日志的异步复制。这样不会有网络延时;缺点是并不能100%保证数据
的一致性。这样的工作方式在出现故障时,可能对丢失少量数据。
⑥BASE特性:基本可用,软状态/柔性事物、最终一致性。
相对于事物严格的ACID特征,NOSQL 数据库保证的是BASE特性。
3、常用的 NOSQL数据库
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 安装
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"))
运行结果:
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"))
运行结果:
三、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"))
运行结果: