Redis 简介
Posted 俄洛伊
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis 简介相关的知识,希望对你有一定的参考价值。
1. 简介
1、key-value存储系统,key为字符串类型,只能通过key对value进行操作
2、支持的数据类型
String: 字符串
Hash: 散列
List: 列表
Set: 集合
Sorted Set: 有序集合
3、支持组从同步,数据从主服务器上向任意从服务器上同步
4、事务,允许一组命令在单一步骤下执行
5、原子性,都执行或都不执行
2. redis与mysql关系
- 存储区域:内存 硬盘
- redis 适合存放频繁使用的数据,由于在内存读取速度快,如:排行榜,计数; MySQL 存储冷数据
- mysql(主)+redis(辅),redis当做缓存来处理数据,与用户交互时查数据优先去redis,再去mysql
- 数据类型少,查询功能弱,开发效率较低,是个高速存储器,适合做缓存使用
3. 基本操作
- string
1、创建单个值set,多个值mset
import redis
r=redis.Redis (host=‘127.0.0.1‘,port=6379)
r.set(‘foo‘,‘Bar‘)
2、取单个值get,取多个值mget
print(r.mget(‘k3‘,‘k4‘)) # 根据key 取多个值
3、strlen.key #通过key取对应value值的长度
4、getrange(key, start, end) #切片获取指定的值
5、setrange(key,offset, value) # 修改值 指定索引offset修改成value
6、print(r.incr(‘nam‘,amount=4))
# 自增,key值存在在原有的值上加amount,key 值不存在创建key:amount
7、append(key, value) #追加
- Hash
1、创建hset(name, key, value)
2、批量创建 hmest(name,{‘k1‘:‘v1‘, ‘k2‘: ‘v2‘})
3、hget 取单个; hmget 取多个值
4、hgetall(‘key‘) #获取key 对应的所有值
5、hlen(‘key‘) #获取key对应的hash中键值对的个数
6、hkeys(name) # name 对应的所有key的值
7、hvals(name) # 所有value值
8、hdel(name,*keys) 指定hash的中key,删除键值对
8、hincrby(name, key, amount=1)
#key 存在自增,不存在创建key:amount
注:hincrbyfloat 自增浮点数
9、hscan(name, cursor=0, match=None, count=None)
注:用于取大数据,迭代取值
参数:
# name,redis的name
# cursor,游标(基于游标分批取获取数据)
# match,匹配指定key,默认None 表示所有的key
# count,每次分片最少获取个数,默认None表示采用Redis的默认分片个数
例:
print(conn.hscan(‘k2‘,cursor=2,count=3))
print(conn.hscan_iter(‘k2‘))
for item in conn.hscan_iter(‘k2‘):
print(item)
- List
1、添加 lpush(name,values)
# print(r.lpush(‘kk‘,‘ff‘,44,99))
2、lpushx(name,value)
# name 存在 从左边开始添加
3、llen(name) # 对应 list的个数
4、linsert(name, where, refvalue, value)) # 在某一个值的前或者后插入值
参数:
# name,redis的name
# where,BEFORE或AFTER(小写也可以)
# refvalue,标杆值,即:在它前后插入数据(如果存在多个标杆值,以找到的第一个为准)
# value,要插入的数据
5、lset(name, index, value) # 指定索引修改值
6、lrem(name, value, num) #在name对应的list中删除指定的值
参数:
# name,redis的name
# value,要删除的值
# num, num=0,删除列表中所有的指定值;
num=2,从前到后,删除2个;
num=-2,从后向前,删除2个
7、lpop(name) # #删除name对应的列表中左侧第一个元素
注: rpop 删除右侧第一个
8、lindex(name, index) # 根据索引取值
9、rpoplpush(src, dst) #将数据从一个列表添加到另一个列表
10、lrange(name, start, end) #分片获取数据
11、列表数据较大需要自定义增量迭代
def ll_sacn(name,count=2):
index=0
while True:
data_list=conn.lrange(name,index,index+count-1)
if not data_list:
return
index=index+count
for item in data_list:
yield item
for i in ll_sacn(‘ll‘):
print(i)
- Set 无序集合
- Sorted Set 有序集合
- 其他操作
1、delete(*names) #删除任意数据类型
2、exists(name) #判断name是否存在
3、keys(pattern=‘*‘) # 根据模型匹配key值
4、expire(name ,time) #设置超时时间
5、rename(src, dst) # 重命名
6、scan(cursor=0, match=None, count=None)
scan_iter(match=None, count=None)
# 增量迭代获取key
7、move(name, db)) # name移动的指定的db下
4. 使用redis
4.1 在pychram 中使用
import redis
#添加数据
r=redis.Redis (host=‘127.0.0.1‘,port=6379)
r.set(‘foo‘,‘Bar‘)
print(r.get(‘foo‘))
#连接池
pool =redis .ConnectionPool (host=‘127.0.0.1‘,port=6379)
r=redis.Redis (connection_pool= pool)
r.set(‘name‘,77)
print(r.get(‘name‘))
4.2 在Django中使用
- 方式一:
1、utils文件夹下,建立redis_pool.py
import redis
POOL = redis.ConnectionPool(host=‘127.0.0.1‘, port=6379,password=‘1234‘,max_connections=1000)
2、视图函数中
import redis
from django.shortcuts import render,HttpResponse
from utils.redis_pool import POOL
def index(request):
conn = redis.Redis(connection_pool=POOL)
conn.hset(‘kkk‘,‘age‘,18)
return HttpResponse(‘设置成功‘)
- 方式二:
1、安装django-redis模块
2、在setting中配置
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}
# "PASSWORD": "123",
}
}
}
3、视图函数中
from django_redis import get_redis_connection
conn = get_redis_connection(‘default‘)
print(conn.hgetall(‘xxx‘))
以上是关于Redis 简介的主要内容,如果未能解决你的问题,请参考以下文章
SpringCloud系列十一:SpringCloudStream(SpringCloudStream 简介创建消息生产者创建消息消费者自定义消息通道分组与持久化设置 RoutingKey)(代码片段
C#-WebForm-★内置对象简介★Request-获取请求对象Response相应请求对象Session全局变量(私有)Cookie全局变量(私有)Application全局公共变量Vi(代码片段