redis
是一种nosql
数据库,他的数据是保存在内存中,同时redis
能够定时把内存数据同步到磁盘,便可以将数据持久化,而且他比memcached
支持更多的数据结构(string
,list列表[队列和栈]
,set[集合]
,sorted set[有序集合]
,hash(hash表)
)。相关参考文档:http://redisdoc.com/index.htmljavascript
redis
中,与memcached
相比,数据不会丢失。celery
就是使用redis
做为中间人。BBS
论坛,板块不会常常变化的,可是每次访问首页都要从mysql
中获取,能够在redis
中缓存起来,不用每次请求数据库。redis
实现。redis
和memcached
的比较:memcached | redis | |
---|---|---|
类型 | 纯内存数据库 | 内存磁盘同步数据库 |
数据类型 | 在定义value时就要固定数据类型 | 不须要 |
虚拟内存 | 不支持 | 支持 |
过时策略 | 支持 | 支持 |
存储数据安全 | 不支持 | 能够将数据同步到dump.db中 |
灾难恢复 | 不支持 | 能够将磁盘中的数据恢复到内存中 |
分布式 | 支持 | 主从同步 |
订阅与发布 | 不支持 | 支持 |
1.安装:centos7php
wget http://download.redis.io/releases/redis-5.0.0.tar.gz
tar -zxvf redis-5.0.0.tar.gz
yum install gcc
yum install gcc-c++
make
cp src/redis-server /usr/bin/
cp src/redis-cli /usr/bin/
2.启动redis数据库服务html
service redis start
3.中止redis数据库服务java
service redis stop
4.链接上redis-server
:node
redis-cli -p 6379 -h 127.0.0.1
5.添加:python
set key value
如:
set username balabala
将字符串值关联到。若是已经持有其余值,命令就覆写旧值,无视其类型。而且默认的过时时间是永久,即永远不会过时。valuekeykeyset
6.删除:mysql
del key 如: del username
7.设置过时时间c++
expire key timeout(单位为秒) 也能够在设置值的时候,一同指定过时时间: set key value EX timeout 或: setex key timeout value
8.查看过时时间web
ttl key 如: ttl username
9.查看当前redis全部的keyredis
keys *
10.列表操做
在列表左边添加元素: lpush key value 将值value插入到列表key的表头。若是key不存在,一个空列表会被建立并执行lpush操做。当key存在但不是列表类型时,将返回一个错误。 在列表右边添加元素: rpush key value 将值value插入到列表key的表尾。若是key不存在,一个空列表会被建立并执行RPUSH操做。当key存在但不是列表类型时,返回一个错误。
查看列表中的元素: lrange key start stop 返回列表key中指定区间内的元素,区间以偏移量start和stop指定,若是要左边的第一个到最后的一个lrange key 0 -1。 移除列表中的元素: 移除并返回列表key的头元素: lpop key
移除并返回列表的尾元素: rpop key
指定返回第几个元素: lindex key index 将返回key这个列表中,索引为index的这个元素。 获取列表中的元素个数: llen key
如: llen languages
删除指定的元素: lrem key count value 如: lrem languages 0 php 根据参数 count 的值,移除列表中与参数 value 相等的元素。count的值能够是如下几种: count > 0:从表头开始向表尾搜索,移除与value相等的元素,数量为count。 count < 0:从表尾开始向表头搜索,移除与 value相等的元素,数量为count的绝对值。 count = 0:移除表中全部与value 相等的值。
11.set
集合的操做:
添加元素: sadd set value1 value2.... 如: sadd team xiaotuo datuo 查看元素: smembeers set 如: smembers team 移除元素: srem set member... 如: srem team xiaotuo datuo 查看集合中的元素个数: scard set 如: scard team1 获取多个集合的交集: sinter set1 set2 如: sinter team1 team2 获取多个集合的并集: sunion set1 set2 如: sunion team1 team2 获取多个集合的差集: sdiff set1 set2 如: sdiff team1 team2
12.hash,哈希操做:
添加一个新值: hset key field value 如: hset website baidu baidu.com 将哈希表key中的域field的值设为value。 若是key不存在,一个新的哈希表被建立并进行 HSET操做。若是域 field已经存在于哈希表中,旧值将被覆盖。
获取哈希中的field对应的值: hget key field 如: hget website baidu
删除field中的某个field: hdel key field 如: hdel website baidu
获取某个哈希中全部的field和value: hgetall key 如: hgetall website
获取某个哈希中全部的field: hkeys key 如: hkeys website
获取某个哈希中全部的值: hvals key 如: hvals website
判断哈希中是否存在某个field: hexists key field 如: hexists website baidu
获取哈希中总共的键值对: hlen field 如: hlen website
12.事务操做:Redis事务能够一次执行多个命令,事务具备如下特征:
开启一个事务:
multi
之后执行的全部命令,都在这个事务中执行的。
exec
会将在和中的操做一并提交。multiexec
discard
会将后的全部命令取消。multi
key
:watch key...
监视一个(或多个)key,若是在事务执行以前这个(或这些) key被其余命令所改动,那么事务将被打断。
key
的监视:unwatch
13.发布/订阅操做:
publish channel message
subscribe channel
redis
提供了两种数据备份方式,一种是RDB
,另一种是AOF
,如下将详细介绍这两种备份策略:
安装python-redis
:
pip install redis
新建一个文件好比redis_test.py
,而后初始化一个redis
实例变量,而且在ubuntu
虚拟机中开启redis
。好比虚拟机的ip
地址为192.168.174.130
。示例代码以下:
# 从redis包中导入Redis类 from redis import Redis # 初始化redis实例变量 xtredis = Redis(host='192.168.174.130',port=6379)
对字符串的操做:操做redis
的方法名称,跟以前使用redis-cli
同样,现就一些经常使用的来作个简单介绍,示例代码以下(承接以上的代码):
# 添加一个值进去,而且设置过时时间为60秒,若是不设置,则永远不会过时 xtredis.set('username','xiaotuo',ex=60) # 获取一个值 xtredis.get('username') # 删除一个值 xtredis.delete('username')
对列表的操做:同字符串操做,全部方法的名称跟使用redis-cli
操做是同样的:
# 给languages这个列表往左边添加一个python xtredis.lpush('languages','python') # 给languages这个列表往左边添加一个php xtredis.lpush('languages','php') # 给languages这个列表往左边添加一个javascript xtredis.lpush('languages','javascript') # 获取languages这个列表中的全部值 print xtredis.lrange('languages',0,-1) > ['javascript','php','python']
对集合的操做:
# 给集合team添加一个元素xiaotuo xtredis.sadd('team','xiaotuo') # 给集合team添加一个元素datuo xtredis.sadd('team','datuo') # 给集合team添加一个元素slice xtredis.sadd('team','slice') # 获取集合中的全部元素 xtredis.smembers('team') > ['datuo','xiaotuo','slice'] # 无序的
对哈希(hash
)的操做:
# 给website这个哈希中添加baidu xtredis.hset('website','baidu','baidu.com') # 给website这个哈希中添加google xtredis.hset('website','google','google.com') # 获取website这个哈希中的全部值 print xtredis.hgetall('website') > {"baidu":"baidu.com","google":"google.com"}
事务(管道)操做:redis
支持事务操做,也即一些操做只有统一完成,才能算完成。不然都执行失败,用python
操做redis
也是很是简单,示例代码以下:
# 定义一个管道实例 pip = xtredis.pipeline()
pip = xtredis.pipeline()
pip.set('username', 'xiaomei')
pip.set('school', 'qinghua')
pip.execute()
redis
支持事务操做,也即一些操做只有统一完成,才能算完成。不然都执行失败,用python
操做redis
也是很是简单,示例代码以下: #订阅 from redis import Redis ps = xtredis.pubsub() ps.subscribe('email') while True: for item in ps.listen(): if item['type'] == 'message': data = item.get('data') print(data.decode('utf-8')) #发布 from redis import Redis xtredis = Redis(host='192.168.254.41', port=6379) xtredis.publish('email', 'xxx@qq.com')
以上便展现了python-redis
的一些经常使用方法,若是想深刻了解其余的方法,能够参考python-redis
的源代码(查看源代码pycharm
快捷键提示:把鼠标光标放在import Redis
的Redis
上,而后按ctrl+b
便可进入)。
1.拷贝一份redis配置文件为slave-6380.conf
cp redis.conf slave.conf
2.编辑slave-6380.conf文件
vim slave-6380.conf bind 192.168.254.41 slaveof 192.168.254.41 6379 port 6380
redis集群 redis集群我这里部在2个机器上 第一台:192.168.254.41 第二台:192.168.254.45 每一台机器建立3个redis配置文件 第一台机器配置: mkdir conf touch 7000.conf 7001.conf 7002.conf vim 7000.conf#编辑文件而且把以下内容拷贝进去 (剩下的7001.conf和7002.conf也是如此,把一下7000改为7001和7002便可) port 7000 #绑定端口 bind 192.168.254.41 #绑定对外链接提供的ip daemonize yes #开启守护进程 pidfile 7000.pid #进程文件名 cluster-enabled yes #是不是集群 cluster-config-file 7000_node.conf #集群配置文件 cluster-node-timeout 15000 #集群链接超时时间 appendonly yes #数据持久化类型 第二台机器配置 mkdir conf touch 7003.conf 7004.conf 7005.conf vim 7000.conf#编辑文件而且把以下内容拷贝进去 (剩下的7004.conf和7005.conf也是如此,把一下7000改为7004和7005便可) port 7000 #绑定端口 bind 192.168.254.45 #绑定对外链接提供的ip daemonize yes #开启守护进程 pidfile 7000.pid #进程文件名 cluster-enabled yes #是不是集群 cluster-config-file 7000_node.conf #集群配置文件 cluster-node-timeout 15000 #集群链接超时时间 appendonly yes #数据持久化类型 在两台机器上分别执行这3个配置文件 #192.168.254.41 redis-server 7000.conf redis-server 7001.conf redis-server 7002.conf #192.168.254.45 redis-server 7003.conf redis-server 7004.conf redis-server 7005.conf redis须要的Ruby版本最低是2.2.2,可是CentOS7 yum库中ruby的版本支持到 2.0.0,可gem 安装redis须要最低是2.2.2,采用rvm来更新ruby: 安装RVM 1.curl -L get.rvm.io | bash -s stable 2.find / -name rvm -print(此时可能出现问题) 3.若是报错执行(4,5步) 4.curl -sSL https://rvm.io/mpapis.asc | gpg2 --import - 5.curl -sSL https://rvm.io/pkuczynski.asc | gpg2 --import - 6.出现以下内容表明成功
/usr/local/rvm
/usr/local/rvm/src/rvm
/usr/local/rvm/src/rvm/bin/rvm
/usr/local/rvm/src/rvm/lib/rvm
/usr/local/rvm/src/rvm/scripts/rvm
/usr/local/rvm/bin/rvm
/usr/local/rvm/lib/rvm
/usr/local/rvm/scripts/rvm
7.使刚安装的rvm当即生效 source /usr/local/rvm/scripts/rvm8.安装一个ruby版本 rvm install 2.4.1 9.使用一个ruby版本 rvm use 2.4.1 10.设置默认ruby版本 rvm use 2.4.1 --default 11.gem install redis
12.redis-cli --cluster create 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 127.0.0.1:7007 127.0.0.1:7008 --cluster-replicas 1
转载自:疯子7314
https://www.cnblogs.com/fengzi7314/