redis文档

redis文档

一、redis的安装

centos7 中redis的安装为例

1、安装依赖

装gcc依赖
由于 redis 是用 C 语言开发,安装之前必先确认是否安装 gcc 环境(gcc -v),如果没有安装,执行以下命令进行安装
[root@localhost local]# yum install -y gcc 

2、下载并解压安装包

[root@localhost local]# wget http://download.redis.io/releases/redis-5.0.3.tar.gz

[root@localhost local]# tar -zxvf redis-5.0.3.tar.gz

3、cd切换到redis解压目录下,执行编译

[root@localhost local]# cd redis-5.0.3

[root@localhost redis-5.0.3]# make

4、安装并指定安装目录

[root@localhost redis-5.0.3]# make install PREFIX=/usr/local/redis

5、启动服务

前台启动
[root@localhost redis-5.0.3]# cd /usr/local/redis/bin/
[root@localhost bin]# ./redis-server

后台启动
从 redis 的源码目录中复制 redis.conf 到 redis 的安装目录
[root@localhost bin]# cp /usr/local/redis-5.0.3/redis.conf /usr/local/redis/bin/
[root@localhost bin]# vi redis.conf
修改 redis.conf 文件,把 daemonize no 改为 daemonize yes

后台启动
[root@localhost bin]# ./redis-server redis.conf

6、设置开机启动

添加开机启动服务

[root@localhost bin]# vi /etc/systemd/system/redis.service
复制粘贴以下内容:
复制代码
[Unit]
Description=redis-server
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/bin/redis.conf
PrivateTmp=true

[Install]
WantedBy=multi-user.target

复制代码
注意:ExecStart配置成自己的路径 
设置开机启动

[root@localhost bin]# systemctl daemon-reload
[root@localhost bin]# systemctl start redis.service
[root@localhost bin]# systemctl enable redis.service

创建 redis 命令软链接
[root@localhost ~]# ln -s /usr/local/redis/bin/redis-cli /usr/bin/redis

测试 redis
服务操作命令
systemctl start redis.service   #启动redis服务
systemctl stop redis.service   #停止redis服务
systemctl restart redis.service   #重新启动服务
systemctl status redis.service   #查看服务当前状态
systemctl enable redis.service   #设置开机自启动
systemctl disable redis.service   #停止开机自启动

二、基本配置

1、配置

  • 在源文件/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

2、使用配置文件方式启动

  • 直接运行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

三、数据操作

1、介绍一下

  • redis是key-value的数据,所以每个数据都是一个键值对
  • 键的类型是字符串
  • 值的类型分为五种:
    • 字符串string
    • 哈希hash
    • 列表list
    • 集合set
    • 有序集合zset
  • 数据操作的全部命令,可以查看中文网站
  • 接下来逐个介绍操作各类型的命令

2、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

3、键的命令

  • 查找键,参数支持正则
KEYS pattern
  • 判断键是否存在,如果存在返回1,不存在返回0
EXISTS key [key ...]
  • 查看键对应的value的类型
TYPE key
  • 删除键及对应的值
DEL key [key ...]
  • 设置过期时间,以秒为单位
  • 创建时没有设置过期时间则一直存在,直到使用使用DEL移除
EXPIRE key seconds
  • 查看有效时间,以秒为单位
TTL key

4、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

5、list类型

列表的元素类型为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

6、set类型

无序集合

元素为string类型

元素具有唯一性,不重复

设置
  • 添加元素
SADD key member [member ...]
获取
  • 返回key集合所有的元素
SMEMBERS key
  • 返回集合元素个数
SCARD key
其它
  • 求多个集合的交集
SINTER key [key ...]
  • 求某集合与其它集合的差集
SDIFF key [key ...]
  • 求多个集合的合集
SUNION key [key ...]
  • 判断元素是否在集合中
SISMEMBER key member

7、zset

  • 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

四、高级

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

1、发布订阅
  • 发布者不是计划发送消息给特定的接收者(订阅者),而是发布的消息分到不同的频道,不需要知道什么样的订阅者订阅
  • 订阅者对一个或多个频道感兴趣,只需接收感兴趣的消息,不需要知道什么样的发布者发布的
  • 发布者和订阅者的解耦合可以带来更大的扩展性和更加动态的网络拓扑
  • 客户端发到频道的消息,将会被推送到所有订阅此频道的客户端
  • 客户端不需要主动去获取消息,只需要订阅频道,这个频道的内容就会被推送过来

消息的格式

  • 推送消息的格式包含三部分
  • part1:消息类型,包含三种类型
    • subscribe,表示订阅成功
    • unsubscribe,表示取消订阅成功
    • message,表示其它终端发布消息
  • 如果第一部分的值为subscribe,则第二部分是频道,第三部分是现在订阅的频道的数量
  • 如果第一部分的值为unsubscribe,则第二部分是频道,第三部分是现在订阅的频道的数量,如果为0则表示当前没有订阅任何频道,当在Pub/Sub以外状态,客户端可以发出任何redis命令
  • 如果第一部分的值为message,则第二部分是来源频道的名称,第三部分是消息的内容

命令

  • 订阅
SUBSCRIBE 频道名称 [频道名称 ...]
  • 取消订阅
  • 如果不写参数,表示取消所有订阅
UNSUBSCRIBE 频道名称 [频道名称 ...]
  • 发布
PUBLISH 频道 消息
2、主从配置
  • 一个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交互

1、安装包

sudo pip install redis
  • 使用源码安装
unzip redis-py-master.zip
cd redis-py-master
sudo python setup.py install

2、交互代码

  • 引入模块
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()

3、封装

  • 连接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
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值