redis的操作
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 = ) # 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时,表示数据已经通过分片获取完毕
|
.
redis的操作的更多相关文章
- spring data redis RedisTemplate操作redis相关用法
http://blog.mkfree.com/posts/515835d1975a30cc561dc35d spring-data-redis API:http://docs.spring.io/sp ...
- Spring Framework 中启动 Redis 事务操作
背景: 项目中遇到有一系列对Redis的操作,并需要保持事务处理. 环境: Spring version 4.1.8.RELEASE Redis Server 2.6.12 (64位) spring- ...
- php的redis 操作类,适用于单台或多台、多组redis服务器操作
redis 操作类,包括单台或多台.多组redis服务器操作,适用于业务复杂.高性能要求的 php web 应用. redis.php: <?php /* redis 操作类,适用于单台或多台. ...
- 【springboot】【redis】springboot结合redis,操作List集合实现时间轴功能
springboot结合redis,操作List集合实现时间轴功能
- php redis队列操作
php redis队列操作 rpush/rpushx 有序列表操作,从队列后插入元素:lpush/lpushx 和 rpush/rpushx 的区别是插入到队列的头部,同上,'x'含义是只对已存在的 ...
- redis下操作hash对象
redis下操作hash对象 hash用于存储对象,对象的格式为键值对 命令 设置 设置单个属性 HSET key field value 设置多个属性 HMSET key field value [ ...
- Redis字符串操作
字符串命令 (基本用法) GET : 获取给定键的值 SET : 设置给定键的值 DEL : 删除给定键的值(这个命令可以用于任何类型) (自增命令和自减命令) INCR : INCR key-n ...
- 简单的redis缓存操作(get、put)
简单的redis缓存操作(get.put) 本文介绍简单的redis缓存操作,包括引入jedisjar包.配置redis.RedisDao需要的一些工具.向redis中放数据(put).从redis中 ...
- 封装php redis缓存操作类
封装php redis缓存操作类,集成了连接redis并判断连接是否成功,redis数据库选择,检测redis键是否存在,获取值,写入值,设置生存时间和删除清空操作. php redis类代码: &l ...
- Spring boot配置多个Redis数据源操作实例
原文:https://www.jianshu.com/p/c79b65b253fa Spring boot配置多个Redis数据源操作实例 在SpringBoot是项目中整合了两个Redis的操作实例 ...
随机推荐
- docker学习笔记二
知识点: 1)手动构建镜像 2)Dockerfile快速构建镜像 阿里云yum源https://opsx.alibaba.com/mirror 镜像制作nginx镜像实例 创建并运行centos容器 ...
- CMD & Git Shell & Bash Shell
CMD & Git Shell & Bash Shell https://mvdan.cc/sh/cmd/shfmt PC
- linux硬盘的分区、格式化、挂载以及LVM
linux硬盘的分区.格式化.挂载以及LVM 多块硬盘的组合: 硬盘分两种:ide和scsi. ide硬盘: /dev/hda 第一块IDE硬盘 /dev/hdb 第二块IDE硬盘 ... /de ...
- LOADING Redis is loading the dataset in memory Redis javaAPI实例
今天在实现Redis客户端API操作Jedis的八种调用方式详解中,遇到了LOADING Redis is loading the dataset in memory错误,经过多番查找资料,找到了解决 ...
- ADO.NET工具类(一)
using System; using System.Collections.Generic; using System.Text; using System.Data.SqlClient; usin ...
- 9.Pod控制器概念和基本操作2
利用一个简单的例子来启动一个deployment的Pod控制器 [root@master song]# cat deploy.yml apiVersion: apps/v1 kind: Deploym ...
- JS 强制类型转化
在Js中, 强制类型转化分为两种情况: 一种是引用类型转化基本类型, 如数组转化成数字:一种是两种不同基本类型之间的转化,如字符串转化为数字.你不能将基本类型转化成引用类型,比如,不可能把数字转化为数 ...
- Nginx geoip模块
需要编译进 --with-http_geoip_module 首先要安装maxMind里的geoip的c开发库 https://dev.maxmind.com/geoip/legacy/downloa ...
- django-admin和manage.py
目录 一.Django内置命令选项 check dbshell diffsettings flush makemigrations migrate runserver shell startapp s ...
- Redis——redis使用redis-dump,redis-load导出导入数据——【三】
来源 https://www.cnblogs.com/dadonggg/p/8662455.html https://blog.csdn.net/chenxinchongcn/article/deta ...