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) 数据结构 字典 跳跃表 使用场景 会话缓存 缓存 计数器 查找表 消息队列 ...
随机推荐
- LCS(最长公共子序列)问题
例题见挑战程序设计竞赛P56 解释:子序列是从原序列中按顺序(可以跳着)抽取出来的,序列是不连续的,这是其和子串最大的区别: 我们可以定义dp数组为dp[i][j],表示的是s1-si和t1-ti对应 ...
- 『Python』skimage图像处理_旋转图像
一段简短的实现图像旋转的代码,使用了skimage库,据说和PIL相比,skimage对numpy等科学计算库的支持更好,这里是为了完成师兄给的帮他修改程序的任务,如果以后有需求的话可能会对pytho ...
- 5月16 JSON的一些知识点及AJAX的应用
什么是JSON? JSON(JavaScript Object Notation)是一种轻量级的数据交换语言,以文字为基础,(文本数据交换格式).JSON简单说就是javascript中的对象和数组, ...
- CacheManager.NET
Cache缓存在计算机领域是一个被普遍使用的概念.硬件中CPU有一级缓存,二级缓存, 浏览器中有缓存,软件开发中也有分布式缓存memcache, redis.缓存无处不在的原因是它能够极大地提高硬件和 ...
- 函数使用十一:FTP
网上很多FTP说明的文档,也很详细,写这玩意是备份一下: 注:有的系统需要配置FTP地址和端口,有的好像没有... SM30->SAPFTP_SERVERS_V,默认端口21. 在做之前可以做个 ...
- MySQL5.6复制技术(1)-原理详解
SQL复制功能介绍 MySQL内建的复制功能是构建大型,高性能应用程序的基础.这类应用使用所谓的“水平扩展”的架构.我们可以通过为服务器配置一个或多个备库的方式来进行数据同步,将MySQL的数据分布到 ...
- Oracle 11.2.0.4.0 Dataguard部署和日常维护(7) - Dataguard Flashback篇
1. 设置备库的闪回目录 show parameter db_recovery_file; NAME TYPE VALUE ------------------------------------ - ...
- 微信小程序初见+nodejs服务端 (一个简单的博客)
推荐网址: 腾讯云快速开发(nodejs前后端):https://developers.weixin.qq.com/miniprogram/dev/qcloud/qcloud.html#%E5%AF% ...
- dvwa安装、配置、使用教程(Linux)
一.搭建LAMP环境 首先搭建好LAMP环境,如没配好参见“Linux+Apache+MySQL+PHP配置教程” 或者使用官方推荐的XAMPP:https://www.apachefriends.o ...
- 交互式shell编程
FQ #!/usr/bin/env shxfce4-terminal -x sudo python ./local/proxy.py 连续执行 gnome-terminal -x bash -c &q ...