Redis实战

Redis,python,缓存,非关系型DB

Redis实战

一、安装和启动

参考菜鸟教程
https://www.runoob.com/redis/redis-install.html
https://www.runoob.com/w3cnote/python-redis-intro.html

(一)Windows

1. 下载

redis本没有windows的,后微软官方开发了win版的redis,并放到了github上。
微软官方制作的redis下载地址:https://github.com/tporadowski/redis/releases
打开后,选择适合自己的版本,下载zip包即可,如:
在这里插入图片描述

2. 安装和配置

将下载的zip包放到自定义的目录下直接解压即可,如:D:\Program Files\Redis
在这里插入图片描述

  • 环境变量配置
    D:\Program Files\Redis添加到系统变量
3. 启动和操作

1)简洁命令
(1)启动
win+r输入cmd打开cmd命令窗口,由于之前已经添加了环境变量,直接输入
redis-server
注:这种方式启动 redis 使用的是默认配置redis.windows.conf
(2)操作redis
再打开一个cmd命令窗口,输入
redis-cli
注释:操作命令类似 centos下的mysqld、 Ubuntu下的mysql
这时,可以里面操作redis了。
例:
存:
set myKey1 abc
取:
get myKey1
删:
del myKey1
2)详细命令
(1)打开cmd命令窗口,
cd D:/Program Files/Redis/ (如果没将 D:/Program Files/Redis/ 添加到系统变量。)
redis-server.exe redis.windows.conf
注:以redis.windows.conf配置方式启动 redis,我们可以根据需要使用自己的配置文件
(2)操作redis
再打开一个cmd命令窗口,输入
redis-cli.exe -h 127.0.0.1 -p 6379
注释:操作命令类似 centos下的mysqld、 Ubuntu下的mysql

(二)Linux

1. 下载

官方:http://redis.io/download,如下载6.0.8版本的;
或者wget命令下载

$ wget http://download.redis.io/releases/redis-6.0.8.tar.gz
2. 安装、启动、操作

注意!下面的编译过程要保证有gcc,没有可以输入sudo apt install gcc 来安装。

# 安装编译。
$ tar xzf redis-6.0.8.tar.gz
$ cd redis-6.0.8
$ make

#编译后redis-6.0.8的src目录下会出现编译后的 redis 服务程序 redis-server,还有用于测试的客户端程序 redis-cli
# 启动1(以默认配置启动)
$ cd src
$ ./redis-server

# 启动2(以指定的redis.conf 文件配置启动)
$ cd src
$ ./redis-server ../redis.conf

# 操作(使用测试客户端程序 redis-cli 和 redis 服务交互)
$ cd src
$ ./redis-cli
redis> set foo bar
OK
redis> get foo
"bar"
附:Ubuntu下的apt安装方法

Ubuntu也可以采用apt在线安装

$ sudo apt update
$ sudo apt install redis-server
$ redis-server
$ redis-cli
redis 127.0.0.1:6379> ping
PONG
3. 其他配置
vim /redis/redis.conf
daemonize yes  # 开启守护进程
# bind ip地址  # 远程
port 6379  # 端口号
db filename dump.rdb  # 数据文件
1)开启守护进程

即:终端启动redis后,不再以终端运行,而是以后台服务运行的方式。
好处:不必单独开启redis运行终端,关闭终端仍然可以运行redis。
daemonize no 改成 daemonize yes,如下图:
在这里插入图片描述

2)绑定ip

如果需要远程访问,则可绑定(bind)上本机redis的ip:
在这里插入图片描述

3)端口号

默认 6379,非必要不建议更改。

port 6379

二、使用操作

在python中使用redis,需要先用pip install redis安装好redis接口包。
python代码:

import redis
import time


# # 法1:init
# r = redis.StrictRedis(host='127.0.0.1', port=6379, db=0)

# 法2:连接池(推荐)
pool = redis.ConnectionPool(host='127.0.0.1', port=6379, decode_responses=True)
r = redis.Redis(connection_pool=pool)

# # 存
# r.set('foo', 'bar')
# # 取
# res = r.get('foo') # 等价 res = r['foo']
#
# print(res) # b'bar'
# print(type(res)) # <class 'bytes'>
#
#
# """
# 1.1 [过期s] setex(name, time, value)
# ex - 过期时间(秒) 这里过期时间是3秒,3秒后p,键food的值就变成None
# """
# print('例子1.1:')
# r.set('food', 'mutton', ex=3) # 等价 r.setex('food', 3, 'mutton')
# print(r.get('food'))
# time.sleep(2)
# print(r.get('food'))
# time.sleep(1)
# print(r.get('food'))
#
#
# """
# 1.2 [过期ms] psetex(name, time_ms, value)
# px - 过期时间(豪秒) 这里过期时间是3豪秒,3毫秒后,键foo的值就变成None
# """
# print('例子1.2:')
# r.set('food', 'beef', px=3) # 等价  r.psetex("fruit3", 3, "apple")
# print(r.get('food'))
# print(r.get('food'))
# time.sleep(0.003)
# print(r.get('food'))
#
#
# """
# 1.3 [插入INSERT] setnx(key, value)
# nx = True (保证新建--insert)。保证键唯一,出现重复key时value不覆盖。
# 如果设置为True,则key存在时不执行。即只有key不存在时,当前set操作才执行 (新建)
# 如果设置为False,则该功能开关关闭,请忽略此参数
# """
# print('例子1.3:')
# r.set('food', 'water')
# print(r.get('food'))
# r.set('food', 'watermelon', nx=True) # 等价 r.setnx('food', 'watermelon', nx=True)
# print(r.get('food'))
# r.set('food', 'watermelon')
# print(r.get('food'))
#
# """
# 1.4 xx = True(保证更新--update)
# 如果设置为True,则只有key存在时,当前set操作才执行(修改)
# 如果设置为False,则该功能开关关闭,请忽略此参数
# """
# print('例子1.4:')
# r.set('fru', 'wat', xx=True)
# print(r.get('fru'))
# r.set('fruit', 'water')
# print(r.get('fruit'))
# r.set('fruit', 'watermelon', xx=True)
# print(r.get('fruit'))


"""
二、批量操作
m = many 批量
"""
"""
2.1 批量设置值mset()和取值mget()
"""
# mset中 m=many 批量

r.mset({
    "k1":"v1",
    "k2":"v2",
    'k3':'v3'
})

r.mget({
    'k1':'v1',
    'k2':'v2',
    'k3':'v3'
})
print(r.mget("k1", "k2", "k3")) # 结果:['v1', 'v2', 'v3']
# 等价下面
print(r.mget(["k1", "k2", "k3"])) # 结果:['v1', 'v2', 'v3']

"""
2.2 取出redis所有key
"""
# 法1 [推荐] r.scan()
# 一次读取2000
keys_tuple = r.scan(cursor=0, count=1000)
print(keys_tuple)
keys = keys_tuple[1]
print(keys) # 结果如:['k2', 'w2ckey', 'k3', 'food', 'foo', 'w3ckey', 'fruit', 'ff', 'k1']
# 法2 [十分不建议用!数据量大时容易使redis集群崩溃] r.keys() 
keys = r.keys()
print(keys)

3. 应用场景

应用场景 – 页面点击数。---- 使用 incr()

假定我们对一系列页面需要记录点击次数。例如论坛的每个帖子都要记录点击次数,而点击次数比回帖的次数的多得多。如果使用关系数据库来存储点击,可能存在大量的行级锁争用。所以,点击数的增加使用redis的INCR命令最好不过了。

当redis服务器启动时,可以从关系数据库读入点击数的初始值(12306这个页面被访问了34634次)

r.set("visit:12306:totals", 34634) # 键visit:12306:totals ----> 值34634
print(r.get("visit:12306:totals"))

每当有一个页面点击,则使用INCR增加点击数即可。

r.incr("visit:12306:totals") # incr == increase增加
r.incr("visit:12306:totals")

页面载入的时候则可直接获取这个值

print(r.get("visit:12306:totals"))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值