redis

使用redis

我们介绍一下redis的使用吧经过按部就班的安装之后,服务端是默认开启的,可以查看本地服务,找到Redis

那我们也可以通过cmd终端开启客户端 ,需要先切盘,cd 是在本盘中更换目录 盘d:切到d盘,然后更换目录 cd e:/redis

这样就可以输入开启命令行了 Redis-cli,可以select 加上索引更换db,默认是db0。

也可以通过可视化软件,redis desktop manage来操作redis数据库,我们不妨对比navicat,更有助于我们掌握理解知识。

redis的数据类型

Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。 

1、String(字符串) 
一个key对应一个value。一个键最大能存储512MB。string类型是二进制安全的。                                                                                           2、Hash(哈希) 
Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。

每个 hash 可以存储 232 - 1 键值对(40多亿)。     

3、List(列表) 
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。列表最多可存储 232 - 1 元素 (4294967295, 每个列表可存储40多亿)。

4、Set(集合) 
Redis的Set是string类型的无序集合。值不重复。

sadd 添加一个 string 元素到 key 对应的 set 集合中,成功返回1,如果元素已经在集合中返回 0,

如果 key 对应的 set 不存在则返回错误。

5、zset(sorted set:有序集合) 
Redis zset 和 set 一样也是string类型元素的集合。且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。

python连接redis

方式一:实例化的对象连接

import redis
r = redis.Redis(host='localhost',port = '6379')
r.set('foo' ,'bar')
print(r.get('foo'))

方式二:连接池

import redis

pool = redis.ConnectionPool(host='127.0.0.1',port='6379')
r = redis.Redis(connection_pool=pool)
r.set('outer','inner')
print(r.get('outer'))

python操作redis数据

-redis之字符串常用操作
set 和 get就是设置和获取值,前面已经提过 

msetmget就是一次设置多个值和获取多个值

import redis

conn = redis.Redis(host ='127.0.0.1',port ='6379')
conn.mset({'k1':'v1',"k2":'v2'})  #批量设置值
print(conn.mget('k1', 'k2'))  #批量获取
print(conn.mget(['k1', 'k2']))  #批量获取

incr就是增长,decr就是减少

conn.incr('age',2)  #默认是有amount参数等于1 也可以自己传参数
conn.decr('age',3)  #默认是有amount参数等于1 也可以自己传参数

append:字符串追加

conn.set('hub',12)
conn.append('hub',4)
print(conn.get('hub'))

得到的结果是:b'124'

redis之hash操作

hset  hget 单个哈希的设置与获取

conn.hset('h1','key1','val1')
print(conn.hget('h1', 'key1'))

hmset hmget批量哈希的设置与获取

conn.hmset('h2',{'key1':'val1','key2':'val2'})
print(conn.hmget('h2', ['key1', 'key2']))

hgetall获取全部的key值,hlen哈希的长度

print(conn.hgetall('h2'))
print(conn.hlen('h2'))

hdel删除hincrby自增

conn.hdel('h2','key1')  #删除
conn.hset('h3','k1',1)  #设置
conn.hincrby('h3','k1')  #value自增,默认amount=1 ,也可以传参

hscan

增量式迭代获取,对于数据大的数据非常有用,hscan可以实现分片的获取数据,并非一次性将数据全部获取完,从而放置内存被撑爆
 
参数:
    # name,redis的name
    # cursor,游标(基于游标分批取获取数据)
    # match,匹配指定key,默认None 表示所有的key
    # count,每次分片最少获取个数,默认None表示采用Redis的默认分片个数
for i in range(10000):
    conn.hset('hash3','key%s'%i,'value%s'%i)     # 生成的哈希是无序的
print(conn.hscan('hash3',0,count=100)) 

hscan_iter

  利用yield封装hscan创建生成器,实现分批去redis中获取数据

 
 参数:
    # match,匹配指定key,默认None 表示所有的key
    # count,每次分片最少获取个数,默认None表示采用Redis的默认分片个数
for i in conn.hscan_iter('hash3',count=100):  #每次100的取数据 防止内存撑爆
    print(i)

redis之列表操作:

  lpush设置值

conn.lpush('list2','a','b','c')
print(conn.lindex('list2',2))

  llen列表长度

conn.llen('list2')  #可以加print打印出列表长度

  linsert插入

conn.linsert('list2','after','c','bc')

  lpop删除

在name对应的列表的左侧获取第一个元素并在列表中移除,返回值则是第一个元素
在name对应的列表的左侧获取第一个元素并在列表中移除,返回值则是第一个元素conn.lpop('list2') #山到最后一个就把整个name删除了

  blpop阻塞态删除

 类似于消费者生产者模型 我们先定义一个list1 通过模块导入实现单例

from redis import Redis
conn=Redis()
conn.lpush('list1',10)

在另一个py文件中引入list1

print(conn.lpop('list1'))
#没有值可以阻塞住,可以实现分布式
# print(conn.blpop('list1'))

管道实现事物

conn=Redis()
pipe = conn.pipeline(transaction=True)
pipe.multi()
pipe.set('name', 'alex')
pipe.set('role', 'sb')
pipe.execute()

django中应用redis

方式一:

新建redis_pool.py:

import redis
POOL = redis.ConnectionPool(host='127.0.0.1', port=6379,password='1234',max_connections=1000)

那么在视图函数中我们就可以引用了

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('设置成功')
def order(request):
    conn = redis.Redis(connection_pool=POOL)
    conn.hget('kkk','age')

    return HttpResponse('获取成功')

方式二:

安装django-redis模块,在settings里面配置

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",
        }
    }
}

在视图函数中:

from django_redis import get_redis_connection
conn = get_redis_connection('default')
print(conn.hgetall('xxx'))
承蒙关照
原文地址:https://www.cnblogs.com/guanlei/p/11157444.html