开启服务端命令:redis-server.exe redis.windows.conf
开启客户端命令:redis-cli.exe -h 127.0.0.1(目标IP) -p 6379(默认端口号,不建议修改)
redis设置密码和修改端口教程:点击打开链接
在python中使用Redis
import redis
from redis import Redis
# 建立连接池:
# redis-py使用connection pool来管理对一个redis server的所有连接,避免每次建立、释放连接的开销。
# 默认,每个Redis实例都会维护一个自己的连接池。可以直接建立一个连接池,然后作为参数Redis,
# 这样就可以实现多个Redis实例共享一个连接池。
POOL=redis.ConnectionPool(host='127.0.0.1', port=6379)
CONN=redis.Redis(connection_pool=POOL)
#列表类型操作
CONN.rpush('lmw_list','a','b','c') #把列表发送的服务器的Redis上 右边开始 ['c' ,'b','a']
CONN.lpush("lmw_list",'a','b','c') #把列表发送的服务器的Redis上 左边开始 ['a' ,'b','c']
CONN.llen("lmw_origin") # 查询lmw_origin的长度
CONN.lpop("lmw_list") # 取出lmw_list左边的值
CONN.delete("lmw_origin") # 删除列表
#字符串操作
CONN.set("lmw_reset",1)
CONN.get("lmw_reset")
Django-redis使用:
import django_redis
conn = django_redis.get_redis_connection()
Django-redis:封装好的redis连接池
一、安装:
pip install django-redis
二、作为 cache backend 使用配置
in settings.py
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
#套接字超时设置
#"SOCKET_CONNECT_TIMEOUT": 5, # in seconds
#"SOCKET_TIMEOUT": 5, # in seconds
#配置默认连接池
# "CONNECTION_POOL_KWARGS": {"max_connections": 100},
}
}
}
in view.py
from django.core.cache import cache
def index(request):
cache.set("busy", "python", timeout=60*60) # 超时单位:秒
value = cache.get("busy") # python
#django-redis 支持永不超时设置.
# timeout=0 立即过期
# timeout=None 永不超时
# cache.set("key", "value", timeout=None)
# 使用通配符搜索 、删除
# cache.keys("foo_*") # 搜索 ["foo_1", "foo_2"]
# cache.delete_pattern("foo_*") # 删除 会返回删掉的键的数量
# 查看连接池已经打开多少连接:
# from django_redis import get_redis_connection
# r = get_redis_connection("default")
# connection_pool = r.connection_pool
# print("Created connections so far: %d" % connection_pool._created_connections)
Redis 拥有五种类型:String list set zset(有序集合) hash(哈希)
三、Hash操作
conn.hset(name, key, value) #name对应的hash中设置一个键值对(不存在,则创建;否则,修改)
conn.hmset('xx', {'k1':'v1', 'k2': 'v2'}) #在name对应的hash中批量设置键值对
conn.hget(name,key) #在name对应的hash中获取根据key获取value
conn.hmget('xx', 'k1', 'k2') #在name对应的hash中获取多个key的值
hlen(name) # 获取name对应的hash中键值对的个数
hgetall(name) #获取name对应hash的所有键值
hvals(name) # 获取name对应的hash中所有的value的值
hexists(name, key) # 检查name对应的hash是否存在当前传入的key
hdel(name,*keys) # 将name对应的hash中指定key的键值对删除
hincrby(name, key, amount=1) # 自增name对应的hash中的指定key的值,不存在则创建key=amount
hincrbyfloat(name, key, amount=1.0) # 自增name对应的hash中的指定key的值,不存在则创建key=amount
hscan(name, cursor=0, match=None, count=None) # 增量式迭代获取,对于数据大的数据非常有用,hscan可以实现分片的获取数据,
# 并非一次性将数据全部获取完,从而放置内存被撑爆
hscan_iter(name, match=None, count=None) # 利用yield封装hscan创建生成器,实现分批去redis中获取数据
四、String:
set key value 设置指定 key 的值 set luo "哈哈"
get key 获取指定 key 的值。 get luo
getrange key start end 返回 key 中字符串值的子字符 getrange luo 0 1
getset key value 将给定 key 的值设为 value ,并返回 key 的旧值(old value)。
MGET key1 [key2..] 获取所有(一个或多个)给定 key 的值。
SETNX key value 只有在 key 不存在时设置 key 的值。
STRLEN key 返回 key 所储存的字符串值的长度。
MSET key value [key value ...] 同时设置一个或多个 key-value 对。
五、list:
BLPOP key1 [key2 ] timeout 移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
BRPOP key1 [key2 ] timeout 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
LINDEX key index 通过索引获取列表中的元素
LLEN key 获取列表长度
LPOP key 移出并获取列表的第一个元素
LPUSH key value1 [value2] 将一个或多个值插入到列表头部
LPUSHX key value 将一个值插入到已存在的列表头部
LRANGE key start stop 获取列表指定范围内的元素
LREM key count value 移除列表元素
LSET key index value 通过索引设置列表元素的值
LTRIM key start stop 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
RPOP key 移除并获取列表最后一个元素
RPUSH key value1 [value2] 在列表中添加一个或多个值
RPUSHX key value 为已存在的列表添加值
redis 相当于一台电脑的内存,访问速度快
redis一般跟数据库搭配使用。
客户端请求数据,先去redis服务器找数据,没有去数据库找
缺点:
1、如果一台电脑当做redis服务器,断电数据丢失
2、存储容量有限
用途:
1、redis可以做缓存
2、redis可以做消息队列
特性:
1、可以做数据持久化
2、支持存放多种数据格式(5种)
{
"k1":"python" # "666"
"k2": 666 # redis会转化给 “666”
"k4":{ #redis只关注第一层的格式
"n1":'xxx', # 'xxx' 改为 {'a':1} ,这是我们定义格式,
"n2":'iii'
}
}
本质:将数据保存到内存中