Redis
redis
一、redis特点
Redis(全称:Remote Dictionary Server 远程字典服务)是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。
redis VS mysql:
redis: 内存数据库(读写快)、非关系型(操作数据方便);
mysql: 硬盘数据库(数据持久化)、关系型(操作数据间关系);
大量访问的临时数据,才有redis数据库更优;
redis VS memcache:
redis: 操作字符串、列表、字典、无序集合、有序集合 | 支持数据持久化(数据丢失可以找回、可以将数据同步给mysql) | 高并发支持;
memcache: 操作字符串 | 不支持数据持久化 | 并发量小;
二、Redis操作
2.1 基础操作:
启动服务:redis-server &
连接数据库:redis-cli
连接指定数据库:redis-cli -h 127.0.0.1 -p 6379 -n 1
切换数据库:select 1
2.2 操作字符串
设置指定 key 的值:set key value
获取指定 key 的值:get key
将给定 key 的值设为 value ,并返回 key 的旧值(old value):getset key value
将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位):setex key seconds value
只有在 key 不存在时设置 key 的值:setnx key value
将 key 中储存的数字值减一:decr key
将 key 中储存的数字值增一:incr key
将 key 所储存的值加上给定的增量值(increment):incrby key increment
key 所储存的值减去给定的减量值(decrement):decrby key decrement
将 key 所储存的值加上给定的浮点增量值(increment):incrbyfloat key increment
如果 key 已经存在并且是一个字符串, APPEND 命令将指定的 value 追加到该 key 原来值(value)的末尾:append key value
2.3 列表命令
移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止:blpop key1[key2] timeout
移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止:brpop key1[key2] timeout
通过索引获取列表中的元素:lindex key index
在列表的元素前或者后插入元素:linsert key before|after pivot value
获取列表长度:llen key
移出并获取列表的第一个元素:lpop key
将一个或多个值插入到列表头部:lpush key value1[value2]
移除列表元素:lrem key count value
通过索引设置列表元素的值:lset key index count value
2.4 集合命令
向集合添加一个或多个成员:sadd key member1[member2]
获取集合的成员数:scard key
返回给定所有集合的差集:sdiff key1[key2]
返回给定所有集合的交集:dinter key1[key2]
判断 member 元素是否是集合 key 的成员:sismember key member
返回集合中的所有成员:smebers key
移除并返回集合中的一个随机元素:spop key
返回集合中一个或多个随机数:srandmember key [count]
移除集合中一个或多个成员:srem key member1 [member2]
2.5 有序集合命令
向有序集合添加一个或多个成员,或者更新已存在成员的分数:zadd key score1 member1 [score2 member2]
获取有序集合的成员数:zcard key
计算在有序集合中指定区间分数的成员数:zcount key min max
在有序集合中计算指定字典区间内成员数量:zlexcount key nin max
返回有序集合中指定成员的索引:zrank key member
移除有序集合中的一个或多个成员:zrem key member[member...]
返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序:zrevrank key member
返回有序集中,成员的分数值:zscore key member
2.6 字典命令
删除一个或多个字典表字段:hdel key field1 [field2]
查看字典 key 中,指定的字段是否存在:hexists key field
获取存储在字典中指定字段的值:hget key field
获取在字典中指定 key 的所有字段和值:hgetall key
获取所有字典中的字段:hkeys key
获取字典中字段的数量:hlen key
获取所有给定字段的值:hmget key field1 [field2]
同时将多个 field-value (域-值)对设置到字典 key 中:hmset key field1 value1 [field2 value2]
将字典 key 中的字段 field 的值设为 value :hset key field value
只有在字段 field 不存在时,设置字典字段的值:hsetnx key field value
获取字典中所有值:hvals key
三、redis数据库
# 1.安装redis与可视化操作工具
# 2.在服务中管理redis服务器的开启关闭
# 3.命令行简单使用redis:
-- redis-cli # 启动客户端
-- set key value # 设置值
-- get key # 取出值
# 4.redis支持:字符串、字典、列表、集合、有序集合
# https://www.runoob.com/redis/redis-tutorial.html
# 5.特点:可持久化、单线程单进程并发
四、python使用redis
4.1 依赖
>: pip3 install redis
4.2 直接使用
import redis
r = redis.Redis(host='127.0.0.1', port=6379, db=1)
4.3 连接池使用
import redis
pool = redis.ConnectionPool(host='127.0.0.1', port=6379, db=10, max_connections=100)
r = redis.Redis(connection_pool=pool)
4.4 缓存使用:要额外安装 django-redis
# 1.将缓存存储位置配置到redis中:settings.py
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379",
"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')