Redis基础(一)——字符串、hash类型的基本使用
day09——Redis
Redis介绍和安装
# Redis:软件,存储数据的,速度非常快,Redis是一个key-value存储系统(没有表的概念),cs架构的软件
服务端 客户端(python作为客户端,java,go都可以,图形化界面,命令窗口的命令)
# es:存数据的地方
# 关系型数据库和非关系型数据库
关系型:mysql,PostgreSQL,Oracle,SQLserver,db2
去 IOE:国产化
IBM---》浪潮信息,曙光,联想
Oracle---》数据----》达梦。。。。
EMC存储---》国产存储
非关系型数据库(nosql):redis(缓存),MongoDB(json文档数据存储),es(大数据量存储)
nosql 指非关系型数据库:not only sql,对关系型数据库的补充
# Redis特点:
开源软件,存数据,cs架构
key-value存储,5大数据类型 value的类型是5种:字符串,hash(字典),列表,集合,有序集合
速度快:
1.纯内存存储(核心)
2.使用了IO多路复用的网络模型
3.数据操作是单线程,避免了线程间切换,而且没有锁,也不会数据错乱
支持持久化
纯内存,可以存到硬盘上,防止数据丢失
redis又被称为 缓存数据库
安装Redis
# redis 是用c语言编写的,需要在不同平台编译成可执行文件,才能在这个平台上运行
redis 使用了io多路复用中的epoll模型,win不支持epoll
redis官方,不支持win版本
微软官方,就把redis改动,编译成可执行,能运行在win上,滞后 3.x版本
第三方:5.x版本
# redis 官方网:https://redis.io/download/
# redis中文网:http://redis.cn
# win:3.x:https://github.com/microsoftarchive/redis/releases
# win:5.x:https://github.com/tporadowski/redis/releases/
# 安装:一路下一步
安装完成后,在安装路径下有
redis-cli.exe # mysql
redis-server.exe # mysqld
redis.windows-service.conf # my.ini
并且会自动做成服务
服务的命令:redis-server.exe redis.windows-service.conf
# 启动redis服务端
1 命令行中 redis 就可以启动服务
2 命令行中,启动服务,并指定配置文件
redis-server 配置文件路径
3 使用服务启动
# 客户端链接
1 命令行客户端:
redis-cli # 默认连本地的6379端口
redis-cli -p 6379 -h 127.0.0.1
2 图形化客户端链接
1 最新版的Navicate支持链接redis了(收费的)
2 Redis Desktop Manager(https://resp.app/) 收费的 用的多 qt写图形化界面
qt是个平台,做GUI[图形化界面]开发
用c写,用python写 pyqt5
3 python的模块
pip install redis
Redis普通链接和连接池
1.普通链接
from redis import Redis
# 建立Redis链接
# conn = Redis()
conn = Redis(
host="127.0.0.1", # 链接地址
port=6379, # 链接端口 默认是6379
db=0, # 链接本地Redis的指定db 默认是0
decode_responses=True # 查询回来返回的结果是字符串类型,否则是byte格式,默认用utf-8编码
)
res = conn.get('name')
print(res) # 获取key名为name的value值
conn.close() # 关闭链接
2.连接池链接
# 一定要保证,池是单例的,以模块导入的形式做成了单例
# pool.py
import redis
POOL = redis.ConnectionPool(max_connections=1000,host='127.0.0.1',port=6379)
# 其它.py
import redis
from pool import POOL # 模块导入的方式, 天然单例
conn = redis.Redis(connection_pool=POOL) # 以后拿到链接,是从POOL种取,如果没有可用的了,默认不阻塞,可以通过某个参数配置,设置阻塞等待
res = conn.get('name') # 获取key名为name的value值
print(res)
conn.close() # 关闭链接
Redis字符串类型
import redis
conn = redis.Redis()
# 1 set(name, value, ex=None, px=None, nx=False, xx=False)
# 在Redis中设置值,默认,不存在则创建,存在则修改
"""
参数:
ex,过期时间(秒)
px,过期时间(毫秒)
nx,如果设置为True,则只有name不存在时,当前set操作才执行,值存在,就修改不了,执行没效果
xx,如果设置为True,则只有name存在时,当前set操作才执行,值存在才能修改,值不存在,不会设置新值
"""
# conn.set('age','18',ex=3)
# conn.set('age','18',px=3000)
# conn.set('age','20',nx=True)
# conn.set('age','20',xx=True)
# 2 setnx(name, value)
# conn.setnx('age', '20') # 等同于conn.set('age', '20', nx=True)
# 3 psetex(name, time_ms, value)
"""
参数:
time_ms,过期时间数字毫秒 或 timedelta对象
"""
# conn.psetex('hobby',3000,'足球')
# 4 mset(*args, **kwargs) 批量设置
# conn.mset({'name':'xxx', 'age':'18'})
# 5 get(name) 获取值
# print(conn.get('name'))
# 6 mget(keys, *args) 批量获取
# print(conn.mget('name', 'age')) # [b'xxx', b'18']
# 7 getset(name, value) 设置新值并获取原来的值
# print(conn.getset('name', 'zzz')) # b'yyy'
# 8 getrange(key, start, end)
"""
参数:
start:起始位置(字节)
end:结束位置(字节)
"""
# print(conn.getrange('name', 0, 1)) # b'zz' 前闭后闭
# 9 setrange(name, offset, value)
# 修改字符串内容,从指定字符串索引开始向后替换(新值太长时,则向后添加)
"""
参数:
offset:字符串的索引
value:要设置的值
"""
# conn.setrange('name',1,'abc')
# 14 strlen(name)
# 返回name对应值的字节长度(一个汉字3个字节)
# print(conn.strlen('name'))
# 15 incr(self, name, amount=1)
# 自增 name对应的值,当name不存在时,则创建,否则,则自增。
# conn.incr('age',amount=1)
# conn.incr('height',amount=1)
# 16 incrbyfloat(self, name, amount=1.0)
# 同上 但amount可以是整型也可以是浮点型
# conn.incrbyfloat('height',amount=1.5)
# conn.incrbyfloat('height',amount=2)
# 17 decr(self, name, amount=1)
# 自减 name对应的值,当name不存在时,则创建,否则,则自减。
# conn.decr('age',amount=1)
# conn.decr('xx',amount=1)
# 18 append(key, value)
# conn.append('name','haha')
# 重点掌握
get set strlen append
RedisHash类型
import redis
conn = redis.Redis(decode_responses=True)
# 1 hset(name, key, value)
"""
参数:
name,redis的name
key,name对应的hash中的key
value,name对应的hash中的value
"""
# conn.hset('userinfo','name','xxx')
# 2 hmset(name, mapping) # 弃用了,还能用
"""
参数:
name:redis中的name
mapping:字典
"""
# conn.hmset('userinfo',{'age':'18','hobby':'足球'})
# 3 hget(name,key)
# print(conn.hget('userinfo', 'name'))
# 4 hmget(name, keys, *args) 获取多个 两种写法
# print(conn.hmget('userinfo', ['name', 'age', 'hobby']))
# print(conn.hmget('userinfo','name','age','hobby'))
# 5 hgetall(name) 获取所有的键值对 慎用,如果hash中key非常的,可能会撑爆内存
# print(conn.hgetall('userinfo'))
# 6 hlen(name) 获取键值对的个数
# print(conn.hlen('userinfo'))
# 7 hkeys(name) 获取对应的hash中所有的key的值
# print(conn.hkeys('userinfo'))
# 8 hvals(name) 获取name对应的hash中所有的value的值
# print(conn.hvals('userinfo'))
# 9 hexists(name, key) 判断userinfo是否存在这个键
# print(conn.hexists('userinfo','name'))
# 10 hdel(name,*keys) 删除指定key的键值对
# conn.hdel('userinfo','hobby','age')
# 11 hincrby(name, key, amount=1) 自增对应的hash中键值对的值
# conn.hincrby('userinfo','age',amount=1)
# 12 hincrbyfloat(name, key, amount=1.0) 自增
# conn.hincrbyfloat('userinfo','height',amount=1.5)
# 13 他们是一家
# for i in range(1000):
# conn.hset('hash_test','egg_%s' % i,'鸡蛋%s号' % i)
# hscan(name, cursor=0, match=None, count=None) 分批获取,获取多少个,约等于,它不单独用
"""
参数:
cursor:游标(基于游标分批获取数据)
match:匹配指定key,默认none,表示所有
count:每次分批最少获取的个数 10
"""
# res = conn.hscan('hash_test', cursor=0, match=None, count=None)
# print(res)
# print(len(res[1]))
# res = conn.hscan('hash_test',cursor=0,count=10)
# print(res)
# print(len(res[1]))
# hscan_iter(name, match=None, count=None) 获取所有,但是分批获取
for item in conn.hscan_iter('hash_test',count=10): # 取出所有,每次拿10条,用完再取10条,直到取完,内部使用了hscan+生成器
print(item)
Redis基础(一)——字符串、hash类型的基本使用的更多相关文章
- redis基础的字符串类型
redis —— 第二篇 基础的字符串类型 我们都知道redis是采用C语言开发,那么在C语言中表示string都是采用char[]数组的,然后你可能会想,那还不简单,当我执行如下命令,肯定是直 接塞 ...
- Redis中Value使用hash类型的效率是普通String的两倍
什么Redis? 点击这里 最近要开发的一个项目是分布式缓存组件,解决参数缓存高效获取的问题.参数达到了500万级别,刚刚开始了解Redis.做设计的时候考虑到Value使用哪种类型的问题? 主要面临 ...
- Redis的String、Hash类型命令
String是最简单的类型,一个Key对应一个Value,string类型是二进制安全的.Redis的string可以包含任何数据,比如jpg图片或者序列化的对象.最大上限是1G字节. Hash ...
- redis基础二----操作List类型
1.lpush的使用方法 2.rpsuh的使用方法 3.删除元素 lrem中2值的是删除2个集合中的“b”元素 4. 通过上面的分析,redis中的list比较类型java的qunue队列
- Python(Redis 中 String/List/Hash 类型数据操作)
1.下载 redis 模块 pip install redis 2.redis 数据库两种连接方式 简单连接 decode_responses=True,写入和读取的键值对中的 value 为 str ...
- redis基础二----操作hash
上面usr就是hash的名字,usr这个hash中存储了key 为id.name和age的值 一个hash相当于一个数据对象,里面可以存储key为id name age的值 2.批量插入一个hash数 ...
- redis字典快速映射+hash釜底抽薪+渐进式rehash | redis为什么那么快
前言 相信你一定使用过新华字典吧!小时候不会读的字都是通过字典去查找的.在Redis中也存在相同功能叫做字典又称为符号表!是一种保存键值对的抽象数据结构 本篇仍然定位在[redis前传]系列中,因为本 ...
- 15天玩转redis —— 第二篇 基础的字符串类型
我们都知道redis是采用C语言开发,那么在C语言中表示string都是采用char[]数组的,然后你可能会想,那还不简单,当我执行如下命令,肯定是直 接塞给char[]数组的. 如果你真的这么想的话 ...
- Redis学习笔记(2) Redis基础类型及命令之一
1. 基础命令 (1) 获取符合规则的键名列表 格式为:KEYS pattern 其中pattern表示支持通配符 # 建立一个名为bar的键 > SET bar OK # 获取Redis所有键 ...
- 【redis】02string类型和hash类型
Redis的数据类型 Redis主要分为五个数据类型,一个是string,最简单的一个数据类型,hash,list, 还有set集合,还有zset有序集合,这是咱们redis的五种基础类型, 接下 ...
随机推荐
- Failed to instantiate [applets.nature.mapper.LogInfoMapper]: Specified class is an interface-项目启动报错
一.问题由来 周日下午项目在进行测试时,有些东西需要临时修改,自己已经打好一个包部署到测试服务器进行部署.在测试过程中发现一个问题,就是 现在的代码跑起来是没问题的,只是其他人又的东西还没做,所以暂时 ...
- audio currentTime 设置后,重置成0,解决方案(流文件-下载文件)
audio currentTime 设置后,重置成0,解决方案 第一步-流文件-下载文件: 先查看你的mp3文件是 流文件,还是下载文件. 检测方式,就是放到浏览器回车.在线播放就是流文件,直接下载了 ...
- Temporary notepad
20230412 快速帮助手册 很牛的风格 https://devhints.io/vue 印记中国 https://docschina.org/ 前台本地存储数据 兼容 https://github ...
- Docker 安装成功(win10家庭版)
https://desktop.docker.com/win/stable/Docker Desktop Installer.exe 安装遇到了 然后 更新 这个 https://wslstorest ...
- 基于 XAF Blazor 的规则引擎编辑器 - 实战篇
示例项目:https://gitee.com/easyxaf/recharge-rules-engine-sample 前言 继上一篇文章对规则引擎编辑器进行了初步介绍之后,本文将通过实际应用案例深入 ...
- 应急响应靶机训练-Linux1
靶机来源: 知攻善防实验室公众号 https://mp.weixin.qq.com/s/gCWGnBiwbqSnafXU1apJCA 我是在另一台主机上通过ssh连接到靶机进行解题的,以下为解题记录. ...
- java 发送 http 请求练习两年半(HttpURLConnection)
1.起一个 springboot 程序做 http 测试: @GetMapping("/http/get") public ResponseEntity<String> ...
- selenium 自动化常用操作
from selenium import webdriver from selenium.webdriver.common.keys import Keys import random import ...
- Unit 1 Computer hardware【石家庄铁道大学-专业英语课程复习资料】
Unit 1 Computer hardware 1.Introduction of computer A computer is a machine that can be instructed t ...
- #贪心#洛谷 6093 [JSOI2015]套娃
题目 分析 按好看度从大到小排序,每次选择一个尽量大的外径装入当前套娃的内径, 这样可以保证是最优的,删除选完的外径可以用平衡树实现 代码 #include <cstdio> #inclu ...