• 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'))
    承蒙关照
  • 相关阅读:
    linux常用的一些访问目录
    专业术语
    java基础知识回顾之javaIO类--File类应用:获取指定目录下面的指定扩展名的文件,将文件的绝对路径写入到目的文件当中
    java基础知识回顾之javaIO类--File类应用:删除带内容的目录
    java基础知识回顾之javaIO类--File类应用:过滤器接口FilenameFilter和FileFilter
    java基础知识回顾之javaIO类--File类应用:递归深度遍历文件
    java基础知识回顾之javaIO类--File类
    java基础知识回顾之java集合类-Properties集合
    java基础知识回顾之---java StringBuffer,Stringbuilder与String的区别
    java基础知识回顾之---java StringBuilder与StringBuffer异同点
  • 原文地址:https://www.cnblogs.com/guanlei/p/11157444.html
Copyright © 2020-2023  润新知