redis(一)

 1 # NoSQL,泛指非关系型的数据库。
 2 # 非关系型数据库和关系型数据库的差别:
 3 #
 4 # 非关系型数据库的优势:
 5 # 1. 性能NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的解析,所以性能非常高。
 6 # 2. 可扩展性同样也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展。
 7 # 关系型数据库的优势:
 8 # 1. 复杂查询可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询。
 9 # 2. 事务支持使得对于安全性能很高的数据访问要求得以实现。对于这两类数据库,对方的优势就是自己的弱势,反之亦然。但是近年来这两种数据库都在向着另外一个方向进化。
10 # 例如:NOSQL数据库慢慢开始具备SQL数据库的一些复杂查询功能的雏形,比如Couchbase的index以及MONGO的复杂查询。对于事务的支持也可以用一些系统级的原子操作来实现例如乐观锁之类的方法来曲线救国。
11 # SQL数据库也开始慢慢进化,比如HandlerSocker技术的实现,可以在MYSQL上实现对于SQL层的穿透,用NOSQL的方式访问数据库,性能可以上可以达到甚至超越NOSQL数据库。
12 # 可扩展性上例如Percona Server,可以实现无中心化的集群。虽然这两极都因为各自的弱势而开始进化出另一极的一些特性,但是这些特性的增加也会消弱其本来具备的优势,比如Couchbase上的index的增加会逐步降低数据库的读写性能。
13 
14 
15 
16 # redis的概念:
17 # redis是一个key-value存储系统。
18 # 和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。
19 # 这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。
20 # 在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
21 # Redis 是一个高性能的key-value数据库。
22 # redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。
23 # Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。
24 # 这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。
25 
26 #redis安装
27 yum install redis -y
28 apt-get install redis-server -y
29 cd redis-3.0.7 & make PREFIX=/usr/local/redis install
30 #检查是否正常启动
31 Ps –ef |grep redis
32 Netstat –lnp |grep 6379
33 [root@iZe0l03ac7t5k9Z ~]# /usr/local/redis/bin/redis-cli     // 连接Redis
34 # 127.0.0.1:6379> keys *             // keys 用于查看所有key,也可以模糊匹配,如 keys my*
35 # 127.0.0.1:6379> exists name        // exists 用于判断是否有某个key,有返回1,没有返回0
36 # 127.0.0.1:6379> del name           // del 用于删除指定的key,成功返回1,失败返回0
37 # 127.0.0.1:6379> expire name 100    // expire 用于设置指定的key多长时间后过期,单位为秒
38 # 127.0.0.1:6379> persist name       // persist 用于取消指定key的过期时间
39 # 127.0.0.1:6379> ttl name           // ttl 用于查看指定的key还有多长时间过期,返回-2表示没有该key,返回-1表示没有设置过期时间,其他表示还有多长时间过期
40 # 127.0.0.1:6379> select 0           // select 用于选择哪个库
41 # 127.0.0.1:6379> move name 2        // move 用于把指定的key移到哪个库下
42 # 127.0.0.1:6379> randomkey          // randomkey 用于随机返回一个key
43 # 127.0.0.1:6379> rename k1 k2       // rename 用于重命名key
44 # 127.0.0.1:6379> type name          // type 用于查看指定key的类型
45 # 127.0.0.1:6379> dbsize             // dbsize 用于返回当前数据库中key的数目
46 # 127.0.0.1:6379> info               // info 用于返回redis数据库的状态信息
47 # 127.0.0.1:6379> flushdb            // flushdb 用于清空当前数据库中的所有key
48 # 127.0.0.1:6379> flushall           // flushall 用于清空所有数据库中的所有key[root@localhost ~]# /usr/local/redis/bin/redis-cli     // 连接Redis
49 # 127.0.0.1:6379> keys *             // keys 用于查看所有key,也可以模糊匹配,如 keys my*
50 # 127.0.0.1:6379> exists name        // exists 用于判断是否有某个key,有返回1,没有返回0
51 # 127.0.0.1:6379> del name           // del 用于删除指定的key,成功返回1,失败返回0
52 # 127.0.0.1:6379> expire name 100    // expire 用于设置指定的key多长时间后过期,单位为秒
53 # 127.0.0.1:6379> persist name       // persist 用于取消指定key的过期时间
54 # 127.0.0.1:6379> ttl name           // ttl 用于查看指定的key还有多长时间过期,返回-2表示没有该key,返回-1表示没有设置过期时间,其他表示还有多长时间过期
55 # 127.0.0.1:6379> select 0           // select 用于选择哪个库
56 # 127.0.0.1:6379> move name 2        // move 用于把指定的key移到哪个库下
57 # 127.0.0.1:6379> randomkey          // randomkey 用于随机返回一个key
58 # 127.0.0.1:6379> rename k1 k2       // rename 用于重命名key
59 # 127.0.0.1:6379> type name          // type 用于查看指定key的类型
60 # 127.0.0.1:6379> dbsize             // dbsize 用于返回当前数据库中key的数目
61 # 127.0.0.1:6379> info               // info 用于返回redis数据库的状态信息
62 # 127.0.0.1:6379> flushdb            // flushdb 用于清空当前数据库中的所有key
63 # 127.0.0.1:6379> flushall           // flushall 用于清空所有数据库中的所有key
64 import redis
65 # redis是以key-value的形式存储的,所以我们在操作的时候。
66 # 首先我们将redis所在主机的ip和发布端口作为参数实例化了一个对象r,然后执行set('a','aaaaaaaaaa'),
67 # 这样我们就在内存中存储了一个key为shang,值为‘I love you!’的项。
68 # 我们可以理解为{'a':'aaaaaaaaaaaa'},当我们要读取的之后,keys()就是获得多有key值。
69 
70 
71 # redis 连接
72 r = redis.Redis(host="101.132.125.136", port=6379)
73 r.set("a", "aaaaaaaaaaaa")
74 print(r.get("a"))
75 print(r.keys())
76 
77 #redis连接池
78 #redis-py使用connection pool来管理对一个redis server的所有连接,避免每次建立、释放连接的开销。、
79 # 默认,每个Redis实例都会维护一个自己的连接池。可以直接建立一个连接池,然后作为参数Redis,这样就可以实现多个Redis实例共享一个连接池
80 pool = redis.ConnectionPool(host="101.132.125.136")
81 #创建一个连接池
82 r = redis.Redis(connection_pool=pool)
83 #通过redis。Redis连接到连接池
84 r.set("name", "asd")
85 #执行redis操作
86 print(r.get("name"))

 

posted @ 2017-11-27 10:05  依哈  阅读(112)  评论(0编辑  收藏  举报