首页 > 其他 > 详细

redis

时间:2019-07-10 00:16:42      阅读:114      评论:0      收藏:0      [点我收藏+]

使用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))

 

redis

原文:https://www.cnblogs.com/guanlei/p/11157444.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!