redis 基础应用
-redis支持5大数据类型
-字符 Memcached 只支持字符串类型
-列表
-字典
-集合
-有序集合
-可以持久化,单线程,单进程(10w)
-安装模块pip3 install redis
import redis # 拿到一个redis链接
coon = redis.Redis(host='127.0.0.1',port=6379) # pool为单例模式 连接池
pool = redis.ConnectionPool(host='127.0.0.1',port=6379) # 从链接池 去一个链接
conn = redis.Redis(connection_pool=pool) redis字符串操作
# ex,过期时间(秒)
# px,过期时间(毫秒)
# nx,如果设置为True,则只有name不存在时,当前set操作才执行,反之则不执行
# xx,如果设置为True,则只有name存在时,当前set操作才执行,值存在才能修改,反之不进行更新
conn.set('name', 'egon', nx=True) import datetime
v=datetime.timedelta(weeks=2)
ctime=datetime.datetime.now()
ctime+v # 设置值,只有name不存在时,执行设置操作(添加),如果存在,不会修改 过期时间为5秒
conn.setex('ttt', 5,'xxx') # 批量插入
conn.mset({"k1": 'v1', "k2": 'v12', "k3": 'v3'}) # 可自动识别列表
value1=conn.mget('name','k1','k2')
value2=conn.mget(['name','k1','k2']) # 设置新值并获取原值
print(conn.getset('name','xxxxxx')) # 获取子序列(开始字节 结束字节)
conn.getrange('name',1,2) # 修改字符串内容(指定索引后替换)
conn.setrange('name', 1, 'eerrrrrrrrrrrrrrrr') # 查询对应值字节长度
print(conn.strlen('name')) # 自增(需要在此之前set)
conn.incr('age',-4) # 追加 在name中追加内容
conn.append('name','0000000') redis字典操作
# 插入或修改字典
conn.hset('person','age','18') # 批量插入字典
conn.hmset('person2',{'age':'19','name':'egon','xx':'xx'}) # 在name对应的hash中获取根据key获取value
print(conn.hget('person','name')) # 在name对应的hash中获取多个key的值
print(conn.hmget('person2',['age','name','xx'])) # 获取name对应hash的所有键值
print(conn.hgetall('person')) # 获取name对应的hash中键值对的个数
print(conn.hlen('person')) # 获取name对应的hash中所有的key的值
print(conn.hkeys('person')) # 检查name对应的hash是否存在当前传入的key
print(conn.hexists('person','nameee')) # 将name对应的hash中指定key的键值对删除
conn.hdel('person2','name','age') # 自增name对应的hash中的指定key的值,不存在则创建key=amount
conn.hincrby('person','age') for i in range(1000000):
conn.hmset('person2',{'eeeeee%s'%i:i})
# 如果数据量不大,自动全取出来
cour2 = 0
count = 1
while True:
cour2, data2 = conn.hscan('person2', cursor=cour2, match=None, count=3000)
count += len(data2)
if cour2 == 0:
break
# 不用getall的方式取,用这种方式取,也能把所有数据取出来,但是不会吧内存撑爆
data=conn.hscan_iter('person2', match=None, count=100)
# 内部有915371条数据
# 先去取100条
# 做成了生成器
# 取值的时候,100以内,没有再去查,用的是生成器
# 当超过一百,再去取100条.做成了生成器
for i in data:
print(i) redis操作列表
# 添加元素在列表的最左边
conn.lpush('list','2') # 添加元素在列表的最右边
conn.rpush('list','3') # 只有name已经存在时,值添加到列表的最左边
conn.lpushx('list2','3') # 列表list元素个数
print(conn.llen('list')) # 在列表list 第三个值前/后插入一个新值
conn.linsert('list', 'after', "3", '444444')
conn.linsert('list', 'before', "3", '5555555') # 对列表中索引值进行重新赋值
conn.lset('list',4,'66666666') # 删除指定值
conn.lrem('list',0,"3") # 删除列表左(右)侧第一个值并返回该值
print(conn.lpop('list'))
print(conn.rpop('list')) # 按索引取值,支持负索引
print(conn.lindex('list',-2)) # 将多个列表排列,按照从左到右去pop对应列表的元素
# 可以用于简单的分布式爬虫
print(conn.blpop('list')) # 批量插入数据
conn.lpush('list',*[1,2,3,4,45,5,6,7,7,8,43,5,6,768,89,9,65,4,23,54,6757,8,68]) # 在list对应的列表元素分片获取数据
print(conn.lrange('list',0,-1)) # 自定义列表的增量迭代
def scan_list(name,count=2):
index=0
while True:
data_list=conn.lrange(name,index,count+index-1)
if not data_list:
return
index+=count
for item in data_list:
yield item
# print(conn.lrange('test',0,100))
for item in scan_list('list',5):
print(item) redis模拟事物
# 事务(不支持事务,但是通过管道模拟)
conn=redis.Redis(host='127.0.0.1', port=6379) # # 拿到一个管道,transaction=True表示管道内部都是原子性
pi=conn.pipeline(transaction=True) # # 说明是批量命令
pi.multi()
pi.set('xx','xxx')
pi.set('yy','yyy')
pi.execute() redis其他操作
# 其它操作
conn.delete('name1')
# 根据key值模糊查询
print(conn.keys('k*')) # 对redis中的某一个name设置超时时间
exprie(name,time) # # 将多个列表排列,按照从左到右去pop对应列表的元素
print(conn.type('person'))
redis 基础应用的更多相关文章
- windows下使用redis,Redis入门使用,Redis基础命令
windows下使用redis,Redis入门使用,Redis基础命令 >>>>>>>>>>>>>>>> ...
- [.net 面向对象程序设计深入](14)Redis——基础
[.net 面向对象程序设计深入](14)Redis——基础 很长一段时间没更新博客了,坚持做一件事,真不是件容易的事,后面我会继续尽可能的花时间更新完这个系列文章. 因这个系列的文章涉及的范围太大了 ...
- linux redis基础应用 主从服务器配置
Redis基础应用 redis是一个开源的可基于内存可持久化的日志型,key-value数据库redis的存储分为内存存储,磁盘存储和log文件三部分配置文件中有三个参数对其进行配置 优势:和memc ...
- [.net 面向对象程序设计深入](36)Redis——基础
[.net 面向对象程序设计深入](36)Redis——基础 很长一段时间没更新博客了,坚持做一件事,真不是件容易的事,后面我会继续尽可能的花时间更新完这个系列文章. 因这个系列的文章涉及的范围太大了 ...
- mysql主从复制、redis基础、持久化和主从复制
一.mysql(mariadb)基础 1.基础命令(centos7操作系统下) 1.启动mysql systemctl start mariadb 2.linux客户端连接自己 mysql -uroo ...
- Redis基础用法、高级特性与性能调优以及缓存穿透等分析
一.Redis介绍 Redis是一个开源的,基于内存的结构化数据存储媒介,可以作为数据库.缓存服务或消息服务使用.Redis支持多种数据结构,包括字符串.哈希表.链表.集合.有序集合.位图.Hype ...
- Redis基础知识补充及持久化、备份介绍(二)--技术流ken
Redis知识补充 在上一篇博客<Redis基础认识及常用命令使用(一)--技术流ken>中已经介绍了redis的一些基础知识,以及常用命令的使用,本篇博客将补充一些基础知识以及redis ...
- Spring-Boot之Redis基础
Spring-Boot之Redis基础 准备 Redis下载地址:github.com/MSOpenTech/redis/releases Redis数据库的默认端口号是 6379 开启Redis服务 ...
- mongodb,Mysql,redis基础教程
数据库基础 1:mongodb基础教程 1:pymongo基础教程 2:Mysql基础教程 3:redis基础教程
- Redis基础知识点面试手册
Redis基础知识点面试手册 基础 概述 数据类型 STRING LIST SET HASH ZSET(SORTEDSET) 数据结构 字典 跳跃表 使用场景 会话缓存 缓存 计数器 查找表 消息队列 ...
随机推荐
- python基础之 反射,md5加密 以及isinstance, type, issubclass内置方法的运用
内容梗概: 1. isinstance, type, issubclass 2. 区分函数和方法 3. 反射(重点) 4. md5加密 1. isinstance, type, issubclass1 ...
- kohana操作数据库
一.读取数据库记录 读取数据库记录需要使用到 DB::select() 方法 // 返回一个结果对象 $result = DB::select('column')->from('table_na ...
- CRS添加、删除节点
一.如何删除一个节点: 1.1 在存活的节点上操作,使用dbca删除DB实例 1.2 清除ASM实例 在存活的节点上做如下操作 1.2.1 停止ASM实例 export ORACLE_HOM ...
- Redshift中查看database、schema、table数据大小
1. 查看当前数据库大小以及记录行数 select trim(pgdb.datname) as database, sum(b.mbytes) as mbytes, sum(a.rows) as ro ...
- 十七、Spring框架(IOC/DI)
一.Spring框架 Spring是一个基于IOC和AOP的结构J2EE系统的框架. 1.IOC反转控制是Spring的基础(Inversion Of Control).也就是说创建对象由以前的程序员 ...
- 2015-09-16 html课程总结1
HTML (HyperText Makeup Language)是超文本标记语言. 1.HTML结构 <html> <head> <title>标题</tit ...
- Chargen UDP服务远程拒绝服务攻击漏洞修复教程
一.前置说明 chargen服务最初设计用于测试网络状态,监听19端口(包括TCP和UDP),其中UDP协议存在“Chargen UDP服务远程拒绝服务攻击漏洞”. chargen一般不会使用,所以直 ...
- ssh和ssl的联系和区别
ssh:Secure Shell,安全Shell,是一个软件,处于应用层旨在取代明文通信的telnet:对应的开源实现程序是openssh. ssl:Secure Sockets Layer,安全套接 ...
- 微信小程序开发工具 POST net::ERR_PROXY_CONNECTION_FAILED 代理问题
几天不动代码,再运行成这样了, {errMsg: "getLocation:fail Error: tunneling socket could not…d, cause=connect E ...
- vue 项目中的坑 在项目中遇到 持续更新ing
1.vue2.0 不支持 v-html 后绑定的内容使用过滤,可是有时候过滤必须使用-----------解决:通过methods中定义方法 然后 v-html='myMethods(string)' ...