redis

1 . 安装

下载:打开redis官方网站,推荐下载稳定版本(stable)

解压

tar zxvf redis-3.2.5.tar.gz

复制:推荐放到usr/local目录下

sudo mv -r redis-3.2.3/* /usr/local/redis/

进入redis目录

cd /usr/local/redis/

生成

sudo make

测试

sudo make test

这段运行时间会较长

安装:将redis的命令安装到/usr/bin/目录

sudo make install

运行

启动服务器:在桌面目录

redis-server

按ctrl+c停止

启动客户端:在新终端中运行如下代码

redis-cli

运行命令

ping

set 'a' '123'

当添加键值后,发现在当前运行的目录下,创建了一个文件:dump.rdb,这个文件用于将数据持久化存储

2 . 基本配置

在源文件/usr/local/redis目录下,文件redis.conf为配置文件

绑定地址:如果需要远程访问,可将此行注释

bind 127.0.0.1

端口,默认为6379

port 6379

是否以守护进程运行

如果以守护进程运行,则不会在命令行阻塞,类似于服务

如果以非守护进程运行,则当前终端被阻塞,无法使用

推荐改为yes,以守护进程运行

daemonize no|yes

数据文件

dbfilename dump.rdb

数据文件存储路径

dir的默认值为./,表示当前目录

推荐改为:dir /var/lib/redis

使用配置文件方式启动

直接运行redis-server会直接运行,阻塞当前终端

一般配置文件都放在/etc/目录下

sudo cp /usr/local/redis/redis.conf /etc/redis/

推荐指定配置文件启动

sudo redis-server /etc/redis/redis.conf

停止redis服务

ps ajx|grep redis

sudo kill -9 redis的进程id

3.数据操作

数据操作

redis是key-value的数据,所以每个数据都是一个键值对

键的类型是字符串

值的类型分为五种:

1字符串string

2哈希hash

3列表list

4集合set

5有序集合zset

数据操作的全部命令,可以查看中文网站

接下来逐个介绍操作各类型的命令

1.string

string是redis最基本的类型

最大能存储512MB数据

string类型是二进制安全的,即可以为任何数据,比如数字、图片、序列化对象等

命令

设置

设置键值

set key value

设置键值及过期时间,以秒为单位

SETEX key seconds value

设置多个键值

MSET key value [key value ...]

获取

根据键获取值,如果不存在此键则返回nil

GET key

根据多个键获取多个值

MGET key [key ...]

运算

要求:值是数字

将key对应的value加1

INCR key

将key对应的value加整数

INCRBY key increment

将key对应的value减1

DECR key

将key对应的value减整数

DECRBY key decrement

其它

追加值

APPEND key value

获取值长度

STRLEN key

键的命令

查找键,参数支持正则

KEYS pattern

判断键是否存在,如果存在返回1,不存在返回0

EXISTS key [key ...]

查看键对应的value的类型

TYPE key

删除键及对应的值

DEL key [key ...]

设置过期时间,以秒为单位

创建时没有设置过期时间则一直存在,直到使用使用DEL移除

EXPIRE key seconds

查看有效时间,以秒为单位

TTL key

2 hash

hash用于存储对象,对象的格式为键值对

命令

设置

设置单个属性

HSET key field value

设置多个属性

HMSET key field value [field value ...]

获取

获取一个属性的值

HGET key field

获取多个属性的值

HMGET key field [field ...]

获取所有属性和值

HGETALL key

获取所有的属性

HKEYS key

返回包含属性的个数

HLEN key

获取所有值

HVALS key

其它

判断属性是否存在

HEXISTS key field

删除属性及值

HDEL key field [field ...]

返回值的字符串长度

HSTRLEN key field

3list

列表的元素类型为string

按照插入顺序排序

在列表的头部或者尾部添加元素

命令

设置

在头部插入数据

LPUSH key value [value ...]

在尾部插入数据

RPUSH key value [value ...]

在一个元素的前|后插入新元素

LINSERT key BEFORE|AFTER pivot value

设置指定索引的元素值

索引是基于0的下标

索引可以是负数,表示偏移量是从list尾部开始计数,如-1表示列表的最后一个元素

LSET key index value

获取

移除并且返回 key 对应的 list 的第一个元素

LPOP key

移除并返回存于 key 的 list 的最后一个元素

RPOP key

返回存储在 key 的列表里指定范围内的元素

start 和 end 偏移量都是基于0的下标

偏移量也可以是负数,表示偏移量是从list尾部开始计数,如-1表示列表的最后一个元素

LRANGE key start stop

其它

裁剪列表,改为原集合的一个子集

start 和 end 偏移量都是基于0的下标

偏移量也可以是负数,表示偏移量是从list尾部开始计数,如-1表示列表的最后一个元素

LTRIM key start stop

返回存储在 key 里的list的长度

LLEN key

返回列表里索引对应的元素

LINDEX key index

4 set

无序集合

元素为string类型

元素具有唯一性,不重复

命令

设置

添加元素

SADD key member [member ...]

获取

返回key集合所有的元素

SMEMBERS key

返回集合元素个数

SCARD key

其它

求多个集合的交集

SINTER key [key ...]

求某集合与其它集合的差集

SDIFF key [key ...]

求多个集合的合集

SUNION key [key ...]

判断元素是否在集合中

SISMEMBER key member

5zset

sorted set,有序集合

元素为string类型

元素具有唯一性,不重复

每个元素都会关联一个double类型的score,表示权重,通过权重将元素从小到大排序

元素的score可以相同

命令

设置

添加

ZADD key score member [score member ...]

获取

返回指定范围内的元素

ZRANGE key start stop

返回元素个数

ZCARD key

返回有序集key中,score值在min和max之间的成员

ZCOUNT key min max

返回有序集key中,成员member的score值

ZSCORE key member

高级

主要讨论发布订阅模块、主从配置两个知识点

发布订阅

发布者不是计划发送消息给特定的接收者(订阅者),而是发布的消息分到不同的频道,不需要知道什么样的订阅者订阅

订阅者对一个或多个频道感兴趣,只需接收感兴趣的消息,不需要知道什么样的发布者发布的

发布者和订阅者的解耦合可以带来更大的扩展性和更加动态的网络拓扑

客户端发到频道的消息,将会被推送到所有订阅此频道的客户端

客户端不需要主动去获取消息,只需要订阅频道,这个频道的内容就会被推送过来

消息的格式

推送消息的格式包含三部分

part1:消息类型,包含三种类型

subscribe,表示订阅成功

unsubscribe,表示取消订阅成功

message,表示其它终端发布消息

如果第一部分的值为subscribe,则第二部分是频道,第三部分是现在订阅的频道的数量

如果第一部分的值为unsubscribe,则第二部分是频道,第三部分是现在订阅的频道的数量,如果为0则表示当前没有订阅任何频道,当在Pub/Sub以外状态,客户端可以发出任何redis命令

如果第一部分的值为message,则第二部分是来源频道的名称,第三部分是消息的内容

命令

订阅

SUBSCRIBE 频道名称 [频道名称 ...]

取消订阅

如果不写参数,表示取消所有订阅

UNSUBSCRIBE 频道名称 [频道名称 ...]

发布

PUBLISH 频道 消息

主从配置

一个master可以拥有多个slave,一个slave又可以拥有多个slave,如此下去,形成了强大的多级服务器集群架构

比如,将ip为192.168.1.10的机器作为主服务器,将ip为192.168.1.11的机器作为从服务器

设置主服务器的配置

bind 192.168.1.10

设置从服务器的配置

注意:在slaveof后面写主机ip,再写端口,而且端口必须写

bind 192.168.1.11

slaveof 192.168.1.10 6379

在master和slave分别执行info命令,查看输出信息

在master上写数据

set hello world

在slave上读数据

get hello

与python交互

安装包

中文官网查找客户端代码

联网安装

sudo pip install redis

使用源码安装

unzip redis-py-master.zip

cd redis-py-master

sudo python setup.py install

交互代码

引入模块

import redis

连接

try:

    r=redis.StrictRedis(host='localhost',port=6379)

except Exception,e:

    print e.message

方式一:根据数据类型的不同,调用相应的方法,完成读写

更多方法同前面学的命令

r.set('name','hello')

r.get('name')

方式二:pipline

缓冲多条命令,然后一次性执行,减少服务器-客户端之间TCP数据库包,从而提高效率

pipe = r.pipeline()

pipe.set('name', 'world')

pipe.get('name')

pipe.execute()

封装

连接redis服务器部分是一致的

这里将string类型的读写进行封装

import redis

class RedisHelper():

    def __init__(self,host='localhost',port=6379):

        self.__redis = redis.StrictRedis(host, port)

    def get(self,key):

        if self.__redis.exists(key):

            return self.__redis.get(key)

        else:

            return ""

    def set(self,key,value):

        self.__redis.set(key,value)

示例:用户登录

业务过程如下:

输入用户名、密码

密码加密

判断redis中是否记录了用户名,如果有则成功

如果redis中没有用户名,则到mysql中查询

从mysql中查询成功后,将用户名记录到redis中

#encoding=utf-8

from t2 import RedisHelper

from t3 import MysqlHelper

import hashlib

name=raw_input("请输入用户名:")

pwd=raw_input("请输入密码:")

sha1=hashlib.sha1()

sha1.update(pwd)

pwd1=sha1.hexdigest()

try:

    redis=RedisHelper()

    if redis.get('uname')==name:

        print 'ok'

    else:

        mysql=MysqlHelper('localhost',3306,'test1','root','mysql')

        upwd=mysql.get_one('select upwd from userinfos where uname=%s',[name])

        if upwd==None:

            print '用户名错误'

        elif upwd[0]==pwd1:

            redis.set('uname', name)

            print '登录成功'

        else:

            print "密码错误"

except Exception,e:

    print e.message

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271

推荐阅读更多精彩内容