目录
Redis相关
简介
首先我们要知道Redis是什么,他是一个数据库,是一个key-value型的数据库,或者说内存型的数据库.
Redis相对于其他key-value型的数据库有什么优点呢,大致可以分为以下三点:
- Redis支持数据的持久化,也就是说并不是简单的只存在于内存中,Redis是会把内存中的数据存储到磁盘中的,这样数据库重启的时候数据也不会丢失,可以再次加载使用.
- Redis支持多种类型的数据,除了最基础的key-value之外,还支持list,set,zset,hash等数据结构的存储.
- Redis还支持数据的备份,即master-slave模式的数据备份.
- Redis的性能极高,大概读的速度是110000次/s左右,写的速度是81000次/s左右.
所以,这些优点就决定了我们会经常使用redis数据库.
Redis的安装
windows下的安装
下载地址: https://github.com/MSOpenTech/redis/releases
里面有32位和64位的安装包,根据情况下载即可,文件名为Redis-x64-xxx.zip,解压后将文件重命名为redis即可.
# 安装完之后,我们通过cmd终端来进入解压好的文件夹,然后执行以下指令
# 启动服务:注意,启动之后cmd终端不能关闭,否则server会断开
redis-server
# 连接默认数据库
redis-cli
# 连接指定数据库
redis-cli -h ip地址 -p 端口号 -n 数据库名
# eg:
redis-cli -h 127.0.0.1 -p 6379 -n 1
# 切换数据库
select 数据库名
# eg:
select 1
为了解决server端的cmd窗口一旦关闭server就会断开的问题,我们可以把redis安装成windows服务,步骤如下:
# 1. cmd窗口cd进入redis的文件夹,执行下面语句
redis-server --service-install redis.windows.conf
# 2. 安装好之后,用下面的语句启动服务
redis-server --service-start
# 3. 可以通过下面语句停止服务
redis-server --service-stop
# 4. 还可以通过下面语句卸载服务
redis-server --service-uninstall
linux下的安装
linux下输入以下指令:
wget http://download.redis.io/releases/redis-2.8.17.tar.gz
tar xzf redis-2.8.17.tar.gz
cd redis-2.8.17
make
# 上面执行完之后,就可以启动redis的server端了,进入安装目录的src目录下
cd src
./redis-server
redis对五种数据类型的操作
字符串(String)
# 1. 设置指定key值 set key value
set today happy
# 2. 获取指定的key值 get key
get today
"happy"
# 3. 获取key中字符串的子字符串 getrange key start end
getrange today 0 2
"hap"
# 4. 当key不存在时设置key的值, setnx key value
setnx today hap
(integer) 0 # 因为today存在,所以设置key值不成功,影响行数为0
setnx tomo 10
(integer) 1 # 因为tomo不存在,所以设置key-value成功,影响行数为1
# 5. 获取key所存储的字符串的长度 strlen key
strlen today
(integer) 5 # happy长度为5
# 6. 将key中储存的数字值减一(如果是数字的话) decr key
decr tomo
(integer) 9
decr today # 如果key对应的value值不是数字,会报错
(error) ERR value is not an integer or out of range
哈希(Hash)
# 1. 设置指定hash值, hmset hash表名 key1 value1 key2 value2 key3 value3
hmset redis name "redis" description "redis basic commands for caching" likes 20 visitors 23000
# 2. 获取指定的hash值, hgetall key
hgetall redis
1) "name"
2) "redis"
3) "description"
4) "redis basic commands for caching"
5) "likes"
6) "20"
7) "visitors"
8) "23000"
# 3. 获取hash表中所有key, hgetall 哈希表名
hgetall redis
1) "name"
2) "description"
3) "likes"
4) "visitors"
列表(List)
# 1. lpush 向列表内添加值, lpush key value
lpush lis 1
lpush lis 2
lpush lis 3
lpush lis 4
# 2. 查看列表值 : lrange key start end
lrange lis 0 1000
1) "4"
2) "3"
3) "2"
4) "1"
# 3. 将一个值插入到已存在的列表头部:lpushx key value
lpushx lis 5
# 4. 移除列表最后一个元素: rpop key
rpop lis
"1"
集合(Set)
集合的特点在于可以自动去重,添加重复元素的时候会自动去除
# 1. 添加集合元素: sadd key value
sadd set1 a
sadd set1 b
sadd set1 c
sadd set1 a
# 2. 查看集合元素,注意,集合是无序的,并不是按我们存进去的顺序查出来的
smembers set1
1) "b"
2) "a"
3) "c"
# 3. 判断member元素是否是集合key的成员:sismember key member
sismember set1 b
(integer) 1 # 存在b,就会返回1
有序集合(sorted set)
有序集合和集合相同的一点在于,同样不允许有重复的元素存在.
不同的是每个元素会关联一个double类型的分数(权重),这个分数就是redis对集合排序的依据.
# 1. 添加有序集合元素: zadd key score1 member1 [score2 member2] 同时如果member重复会更新其对应score的值
zadd sset1 1 a
zadd sset1 2 b
zadd sset1 3 c
zadd sset1 4 d
zadd sset1 5 a
# 2. 查看集合: zrange key 集合元素位置 withscores
zrange sset1 0 1 withscores
1) "b"
2) "2"
3) "c"
4) "3"
# 3. 返回有序集合中指定成员的索引: zrank key member
zrank sset1 a
(integer) 3
# 4. 移除有序集合里面给定的分数区间的所有成员: zremrangebyscore key min max
zremrangebyscore sset1 0 2
redis在Python中的使用
首先,毫无疑问,我们需要安装redis模块
pip install redis
然后我们就可以直接使用redis来连接一个redis数据库,而且我们可以选择直接连接一个redis数据库或者建立一个连接池,有更多的用处
import redis
# 直接连接
r = redis.Redis(host = '127.0.0.1',port = 6379, db = 1)
'''
host是连接的数据库地址
port是连接的端口号
db是数据库的名字
'''
# 连接池连接
pool = redis.ConnectionPool(host = '127.0.0.1',port = 6379, db = 1,max_connections=100)
# 上面max_connections是连接池的最大连接数
r = redis.Redis(connection_pool = pool)
# 在建立完连接之后,我们就可以直接用r来点出来方法从而完成对redis数据库的操作,大概操作和本身的redis代码几乎完全一样
r.set('name','bob')
r.setex('name', 3, 'jerry')
print(r.get('name'))
r.rpush('stus', 's1', 's2', 's3')
print(r.lrange('stus', 0, 1000))
r.zadd('game', {'a': 10, 'b': 20, 'c': 15})
print(r.zrevrange('game', 0, 1))
print(r.zrange('game', 0, 1))
redis在Django中的使用
django中使用redis大多使用两种方法,即直接使用或者借用缓存cache来使用redis.
- 直接使用redis,单例或者连接池
# 在django的utils文件夹下,建立redis_pool.py,写入
import redis
POOL = redis.ConnectionPool('127.0.0.1',6379,max_connection = 100)
# 然后就可以在视图函数里面导入这个文件,使用其连接池的方法
from django.shortcuts import render, HttpResponse
import redis
# 写一个模块,写一个pool,导入
from app01.redis_pool import POOL
def setname(request):
conn = redis.Redis(connection_pool=POOL)
conn.set('name', 'bob')
return HttpResponse('设置成功')
def getname(request):
conn = redis.Redis(connection_pool=POOL)
name = conn.get('name').decode('utf-8')
return HttpResponse(name)
- 借用缓存的话需要安装django-redis模块
pip install django-redis
# 1. 在django里的settings.py里面配置缓存存储的位置
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/11",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
"CONNECTION_POOL_KWARGS": {"max_connections": 100}
}
}
}
# 2.操作cache模块直接操作缓存:views.py
from django.core.cache import cache # 结合配置文件实现插拔式
# 存放token,可以直接设置过期时间,不加单位默认是秒
cache.set('token', 'header.payload.signature', 10)
# 取出token
token = cache.get('token')