博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
redis的操作
阅读量:6578 次
发布时间:2019-06-24

本文共 5943 字,大约阅读时间需要 19 分钟。

 

 redis相当于是一个在内存中创建的大字典

 

redis的value有5大数据类型:

  

redis的value有5大数据类型:    字符串   

    import redis

    conn = redis.Redis(host='192.168.11.61',port=6379)
    # 设置值
    conn.set('laowang_name','laowang')
      # 获取值
    val = conn.get('laowang_name').decode('utf-8')
    print(val)

列表    字典    集合     有序集合

 

其实redis是一个可以构造内部数据的大字典

只要外面的大字典类型不变  那么我们就可以随意构造内部的字典,(里面的key的长度类型可以随意拼接)

 

首先你要知道redis怎么设置值和获取值

你要先导入redis模块import redis然后去连接你的redis 并且设置一个对象获取连接内容CONN = redis.Redis(host="192.169.11.11",port = 6379)  # redis默认的端口是6379 然后设置值: CONN.set(键,值)  #设置键值 然后获取值 CONN.get(键,).decode("utf-8")

x

 

redis设置值:

  

set 字符串设置 h获取的是字符串类型的值  
hset 字典类型设置 字典类型的值  
       

 

  

CONN.set("laowang","老王")  #给redis设置一个键值laowang,值是老王的值 CONN.hset("xx","laowang","老王")  # 给redis中的xx中字典中设置一个键laowang值是老王

 

 

Django连接数据库有两种,一种是配置在全局(比较麻烦,但是一次搞定终身使用),一种是配置在你使用的视图函数中(直接连接,但是每一个需要的视图函数都要连接一次)

 

 

在每一个使用的视图中配置:

import redis   # 导入rdis模块CONN = redis.Redis(host = "211.159.153.150",port = 6379)  # 连接redis数据库并且创建一个连接对象后面的操作都用这个连接对象来进行操作

 

 

在settings中配置全局系信息:

 

    

CACHES = {    "default": {        "BACKEND": "django_redis.cache.RedisCache",        "LOCATION": "redis://192.168.11.61:6379",        "OPTIONS": {            "CLIENT_CLASS": "django_redis.client.DefaultClient",            "CONNECTION_POOL_KWARGS": {
"max_connections": 100}, # "PASSWORD": "密码", } }} 如果配置了全局信息就要从你的全局中找 就不能用redis模块而是django_redis
from django_redis import get_redis_connection # 导入连接模块 CONN = get_redis_connection("default")  # 进行连接  和你的全局中的redis信息连接
  settings中的default:如果你只使用一个redis服务器就用这个名字,要是你用多个redis服务器就需要用不同的名字来区分不同的redis的服务器

 

 

连接池:

redis-py使用connection pool来管理对一个redis server的所有连接,避免每次建立、释放连接的开销。默认,每个Redis实例都会维护一个自己的连接池。可以直接建立一个连接池,然后作为参数Redis,这样就可以实现多个Redis实例共享一个连接池。

#!/usr/bin/env python# -*- coding:utf-8 -*- import redis pool = redis.ConnectionPool(host='10.211.55.4', port=6379) r = redis.Redis(connection_pool=pool)r.set('foo', 'Bar')print r.get('foo')

 

 

操作

String操作,redis中的String在在内存中按照一个name对应一个value来存储

set(name, value, ex=None, px=None, nx=False, xx=False)

在Redis中设置值,默认,不存在则创建,存在则修改参数:     ex,过期时间(秒)     px,过期时间(毫秒)     nx,如果设置为True,则只有name不存在时,当前set操作才执行     xx,如果设置为True,则只有name存在时,岗前set操作才执行
setnx(name, value)1    设置值,只有name不存在时,执行设置操作(添加)

 

setnx(name, value)

1
设置值,只有name不存在时,执行设置操作(添加)

setex(name, value, time)

1
2
3
# 设置值
# 参数:
    
# time,过期时间(数字秒 或 timedelta对象)

psetex(name, time_ms, value)

1
2
3
# 设置值
# 参数:
    
# time_ms,过期时间(数字毫秒 或 timedelta对象)
conn.psetex("name",6000, "老张")  # 设置一个只值6000毫秒后过期

 

 

mset(*args, **kwargs)

1
2
3
4
5
批量设置值
如:
    
mset(k1=
'v1'
, k2=
'v2'
)
    
    
mget({
'k1'
:
'v1'
,
'k2'
:
'v2'
})

 

 获取值就是用get

val = conn.get("laowang_name").decode("utf8")  # 获取道的值需要decode

 

批量获取:mget

批量获取如:    mget('ylr', 'wupeiqi')    或    r.mget(['ylr', 'wupeiqi'])

 

conn.psetex("name",6000, "老张")val = conn.mget("laowang_name", "name")print(val)  # [b'laowang', b'\xe8\x80\x81\xe5\xbc\xa0'] 得到的是一个列表for i in val:    m = i.decode("utf8")    print(m)

 

getset(name, value)

1
设置新值并获取原来的值

 

 

hash操作,redis中Hash在内存中的存储格式如下图:

"

 

设置值:

hset(name, key, value)

# name对应的hash中设置一个键值对(不存在,则创建;否则,修改) # 参数:    # name,redis的name    # key,name对应的hash中的key    # value,name对应的hash中的value # 注:    # hsetnx(name, key, value),当name对应的hash中不存在当前key时则创建(相当于添加)

 

hset(name, key, value)

1
2
3
4
5
6
7
8
9
# name对应的hash中设置一个键值对(不存在,则创建;否则,修改)
 
# 参数:
    
# name,redis的name
    
# key,name对应的hash中的key
    
# value,name对应的hash中的value
 
# 注:
    
# hsetnx(name, key, value),当name对应的hash中不存在当前key时则创建(相当于添加)

hmset(name, mapping)

1
2
3
4
5
6
7
8
# 在name对应的hash中批量设置键值对
 
# 参数:
    
# name,redis的name
    
# mapping,字典,如:{'k1':'v1', 'k2': 'v2'}
 
# 如:
    
# r.hmset('xx', {'k1':'v1', 'k2': 'v2'})

hget(name,key)

1
# 在name对应的hash中获取根据key获取value

hmget(name, keys, *args)

1
2
3
4
5
6
7
8
9
10
11
# 在name对应的hash中获取多个key的值
 
# 参数:
    
# name,reids对应的name
    
# keys,要获取key集合,如:['k1', 'k2', 'k3']
    
# *args,要获取的key,如:k1,k2,k3
 
# 如:
    
# r.mget('xx', ['k1', 'k2'])
    
# 或
    
# print r.hmget('xx', 'k1', 'k2')

hgetall(name)

1
获取name对应
hash
的所有键值

hlen(name)

1
# 获取name对应的hash中键值对的个数

 

hkeys(name)

1
# 获取name对应的hash中所有的key的值

hvals(name)

1
# 获取name对应的hash中所有的value的值

hexists(name, key)

1
# 检查name对应的hash是否存在当前传入的key

hdel(name,*keys)

1
# 将name对应的hash中指定key的键值对删除

hincrby(name, key, amount=1)

1
2
3
4
5
# 自增name对应的hash中的指定key的值,不存在则创建key=amount
# 参数:
    
# name,redis中的name
    
# key, hash对应的key
    
# amount,自增数(整数)

 

 

hincrbyfloat(name, key, amount=1.0)

1
2
3
4
5
6
7
8
# 自增name对应的hash中的指定key的值,不存在则创建key=amount
 
# 参数:
    
# name,redis中的name
    
# key, hash对应的key
    
# amount,自增数(浮点数)
 
# 自增name对应的hash中的指定key的值,不存在则创建key=amount

hscan(name, cursor=0, match=None, count=None)

1
2
3
4
5
6
7
8
9
10
11
12
13
# 增量式迭代获取,对于数据大的数据非常有用,hscan可以实现分片的获取数据,并非一次性将数据全部获取完,从而放置内存被撑爆
 
# 参数:
    
# name,redis的name
    
# cursor,游标(基于游标分批取获取数据)
    
# match,匹配指定key,默认None 表示所有的key
    
# count,每次分片最少获取个数,默认None表示采用Redis的默认分片个数
 
# 如:
    
# 第一次:cursor1, data1 = r.hscan('xx', cursor=0, match=None, count=None)
    
# 第二次:cursor2, data1 = r.hscan('xx', cursor=cursor1, match=None, count=None)
    
# ...
    
# 直到返回值cursor的值为0时,表示数据已经通过分片获取完毕

hscan_iter(name, match=None, count=None)

1
2
3
4
5
6
7
8
9
# 利用yield封装hscan创建生成器,实现分批去redis中获取数据
 
# 参数:
    
# match,匹配指定key,默认None 表示所有的key
    
# count,每次分片最少获取个数,默认None表示采用Redis的默认分片个数
 
# 如:
    
# for item in r.hscan_iter('xx'):
    
#     print item

  

List操作,redis中的List在在内存中按照一个name对应一个List来存储。如图:

                                                                  

 

hincrbyfloat(name, key, amount=1.0)

1
2
3
4
5
6
7
8
# 自增name对应的hash中的指定key的值,不存在则创建key=amount
 
# 参数:
    
# name,redis中的name
    
# key, hash对应的key
    
# amount,自增数(浮点数)
 
# 自增name对应的hash中的指定key的值,不存在则创建key=amount

hscan(name, cursor=0, match=None, count=None)

1
2
3
4
5
6
7
8
9
10
11
12
13
# 增量式迭代获取,对于数据大的数据非常有用,hscan可以实现分片的获取数据,并非一次性将数据全部获取完,从而放置内存被撑爆
 
# 参数:
    
# name,redis的name
    
# cursor,游标(基于游标分批取获取数据)
    
# match,匹配指定key,默认None 表示所有的key
    
# count,每次分片最少获取个数,默认None表示采用Redis的默认分片个数
 
# 如:
    
# 第一次:cursor1, data1 = r.hscan('xx', cursor=0, match=None, count=None)
    
# 第二次:cursor2, data1 = r.hscan('xx', cursor=cursor1, match=None, count=None)
    
# ...
    
# 直到返回值cursor的值为0时,表示数据已经通过分片获取完毕

 

 

 

 

.

转载于:https://www.cnblogs.com/zhaoyunlong/p/9468375.html

你可能感兴趣的文章
table头部固定,内容滚动
查看>>
插入DOM元素
查看>>
Android SDK Manager 更新
查看>>
第一次作业:Linux 2.6.32的进程模型与调度器分析
查看>>
C# Excel嵌入到Winform
查看>>
修改HTML5 input placeholder 颜色及修改失效的解决办法
查看>>
Windows 服务器部署 asp.net core
查看>>
html5 随机数函数
查看>>
数据结构之图(2-1)【十字链表】适用于有向图
查看>>
你必须知道的简单的位操作技巧
查看>>
怎样合并排序数组(How to merge 2 sorted arrays?)
查看>>
年礼成快递企业不再接件主因:苹果产品最疯狂
查看>>
实习第三天
查看>>
Java第四次实验
查看>>
CSS3transition实现的简单动画菜单
查看>>
C语言基础回顾
查看>>
在Java中,以下关于方法重载和方法重写描述正确的是?
查看>>
Codeforces Round #315 (Div. 2A) 569A Music (模拟)
查看>>
提升代码内外部质量的22条经验(转载)
查看>>
利用Linq对集合元素合并、去重复处理
查看>>