Redis学习Python3.6实现备忘录

菜鸟教程

Mac安装

推荐使用 Homenbrew 安装,执行 brew 命令即可。

brew install redis

启动 Redis 服务:

brew services start redis
redis-server /usr/local/etc/redis.conf

这样就启动了 Redis 服务。
同样可以使用 redis-cli 进入 Redis 命令行模式。
Mac 下 Redis 的配置文件路径是 /usr/local/etc/redis.conf,可以通过修改它来配置访问密码。

修改配置文件后需要重启 Redis 服务,停止、重启 Redis 服务的命令如下:

brew services stop redis
brew services restart redis

另外在 Mac 下也可以安装 Redis Desktop Manager 可视化管理工具来管理 Redis。

redis客户端启动

redis-cli

Ubuntu安装

Ubuntu 下安装
在 Ubuntu 系统安装 Redis 可以使用以下命令:

$sudo apt-get update
$sudo apt-get install redis-server

启动 Redis

$ redis-server

查看 redis 是否启动?

$ redis-cli

以上命令将打开以下终端:

redis 127.0.0.1:6379>

127.0.0.1 是本机 IP ,6379 是 redis 服务端口。现在我们输入 PING 命令。

redis 127.0.0.1:6379> ping
PONG

以上说明我们已经成功安装了redis

启动服务

redis-server
按ctrl+c停止

客户端启动

redis-cli

查看总体数据库命令

127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> get name
"mikejing"
127.0.0.1:6379> INFO keyspace
# Keyspace
db0:keys=1,expires=0,avg_ttl=0
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> set name 111
OK
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> INFO keyspace
# Keyspace
db0:keys=1,expires=0,avg_ttl=0
db1:keys=1,expires=0,avg_ttl=0
127.0.0.1:6379> *1
(error) ERR unknown command `*1`, with args beginning with: 
127.0.0.1:6379> CONFIG GET databases
1) "databases"
2) "16"
127.0.0.1:6379> select 16
(error) ERR DB index is out of range
127.0.0.1:6379> select 15
OK

1.select 选择数据库
2.INFO keyspace 查看所有数据库
3.CONFIG GET databases 默认配置16个 index到15,查看数量

然后根据下面介绍操作即可,默认选择0

基本配置

/var/lib/redis 数据文件存储路径
/usr/bin/redis-cli /usr/bin/redis-service 源文件路径
/etc/redis/redis.conf 为配置文件

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

bind 127.0.0.1

端口,默认为6379

port 6379

是否以守护进程运行

如果以守护进程运行,则不会在命令行阻塞,类似于服务 如果以非守护进程运行,则当前终端被阻塞,无法使用

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

daemonize no|yes

数据文件存储路径

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

数据操作

Redis中文网

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

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

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

set

无序集合
元素为string类型
元素具有唯一性,不重复

添加元素

SADD key member [member ...]

获取
返回key集合所有的元素

SMEMBERS key

返回集合元素个数

SCARD key

其它
求多个集合的交集

SINTER key [key ...]

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

SDIFF key [key ...]

求多个集合的合集

SUNION key [key ...]

判断元素是否在集合中

SISMEMBER key member

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

发布订阅

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

消息的格式 推送消息的格式包含三部分 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的机器作为从服务器
设置主服务器的配置

Mac开启两个终端,通过ssh连接两台电脑,然后修改这两台电脑的配置文件主服务器
这里写图片描述

从服务器
这里写图片描述

这两台电脑分别启动
这里的ip一定要写,因为之前把配置文件给修改了,不在默认是127.0.0.1了

redis-cli -h 自己对应的ip

bind 192.168.13.99

设置从服务器的配置
注意:在slaveof后面写主机ip,再写端口,而且端口必须写

bind 192.168.13.78
slaveof 192.168.13.99 6379

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

set hello world

在slave上读数据

get hello

也就是两台不同的电脑,redis服务可以通过修改配置文件设置主从的方式进行数据同步

python3.6实现

安装

pip3 install redis

交互代码
引入模块

import redis

连接

try:
    r=redis.StrictRedis(host='ip地址',port=6379)
except Exception as result:
    print (result)

方式一:根据数据类型的不同,调用相应的方法,完成读写
更多方法同前面学的命令

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 as result:
    print result

这里写图片描述

这里写图片描述

这里写图片描述

这几个图是根据看完redis之后记录下来的,方便理解,没有细分,画个大概,高手可以留言指点下,毕竟只是初步学习了下,方便以后理解

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值