Day01 - Redis

Redis是什么?

数据库 -> 非关系型 ->开源、免费、高性能

存储介质:内存

数据库:存储数据

非关系型 对应关系型,关系型数据库:MySQL,SQLite等

特点: key->value

  • 基于内存存储的,速度更快
  • 存储的数据非结构化
  • 没有表的概念,也不存在外键之类的关系
  • 可以定时清除数据 set name zhangsan ex 10
  • 每次操作只有成功和失败两种可能
  • 单线程,同时只能执行一个任务,有效避免并发造成数据错乱

如何安装

以windows为例:

  1. 下载压缩包

    下载地址:https://github.com/tporadowski/redis/releases

    备用:https://hub.fastgit.xyz/tporadowski/redis/releases 切记:镜像站不要登录自己的github账号!!!

  2. 解压缩包

  3. 配置环境变量

  4. 注册服务并绑定使用的配置文件

    redis-server --service-install 配置文件地址  # 安装服务
    redis-server --service-uninstall  # 卸载服务
    
  5. 启动server程序

    redis-server --service-start # 启动redis服务器
    redis-server --service-stop # 停止redis服务器
    

    注意:修改配置文件之后,需要重启redis服务器

  6. 客户端连接数据库

如何卸载

  1. 停止server程序
redis-server --service-stop # 停止redis服务器
  1. 卸载服务
redis-server --service-uninstall  # 卸载服务
  1. 删除环境变量

此电脑 - 右键属性 - 高级系统设置 - 环境变量 - PATH

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IcLFe6G8-1655693743491)(day01_redis.assets/image-20220518152925284.png)]

  1. 删除掉redis的那一条环境变量
  2. 删除redis的解压目录

redis五大数据类型

  1. String 字符串类型
  2. List 列表
  3. Hash 哈希 理解成 python的字典 xiaoming = {“name”:“xiaoming”}
  4. Set 无序列表 [zhangsan,lisi ,wangwu]
  5. ZSet 有序列表 [zhangsan :60,lisi:100 ,wangwu:48] 默认从小到大

通用命令

ping #
select 3 #
keys * #
exists name #
type name #
rename name newname #
del name #
flushdb #
flushall #

数据库的本质就是增删改查,只要把增删改查掌握了,所有的数据库就都可以玩转了

常用命令

String类型

原生写法

# 增
set key value # 设置一个key-value 映射 value可以是字符串或者数字
mset key1 value1 key2 value2 ... # 同时设置多个key-value映射
set key value ex 60 # 数据有效期60秒
set key value nx # 只有当key不存在时,才会存入# 查
get key # 查看一个key的值
mget key1 key2 key3 ... # 同时获取多个key
strlen key1 # 获取key的长度
strrange key 0 4 # 获取字符串[0-4]之间的字符# 改
set # set 命令也可以用来修改数据
setrange key 1 oooo # 修改字符串的一部分:从1的位置开始修改字符串,以oooo覆盖# string的特殊类型:数字
# 数字可以直接增减
incr key # 自增 1
decr key # 自减 1
incrby key 5 # 自增 5
decrby key 5 # 自减 5# 删
del name

Python写法

# 第一步  安装库
# pip install redis  # 安装redis的库# 第二步 导入redis的库
import redis # 导包# 第三步 链接redis
r = redis.Redis(host="127.0.0.1",port=6379,password="123456",db=2)
# host 主机地址,默认localhost
# port reids 端口  默认6379
# password 密码 默认无密码
# db 你要连接的数据库编号 默认0  可选0-15# 第四步 执行相应的命令
r.set("python_name","hello python")name = r.get("python_name")
print(name)# 参考命令
r.set(key,value,ex=60)r.set(key,value,nx=True)r.mset({key1,value1,key2,value2})r.get(key)r.mget(key1,key2)r.strlen(key)r.strrange(key,0,4)r.setrange(key,1,'oooooo')r.incr(key)
r.decr(key)r.incrby(key,5)
r.decrby(key,5)

案例

记录某用户累计访问次数

Set类型(无序列表,无序集合)

Set 是 String 类型无序的容器结构。集合成员是唯一的,不能出现重复的数据。

Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。

特点:无序的,元素不可重复的

原生写法

# 增
sadd room zhangsan lisi wangwu # 增加3个玩家到游戏中# 查
smembers room # 查看当前所有在线的玩家
scard room # 查看当前房间里有多少玩家
sismember room zhangsan # 判断zhangsan是否已经加入游戏# 改
srem room zhangsan lisi # 把zhangsan , lisi 从房间移除# 删除
del name

Zset类型

它是 String 类型元素的有序集合,每个元素唯一且都会关联一个 double 类型的分值,根据分值来为集合中的成员从小到大排序。

原生写法

# 增
zadd guns 30 ak47 47 dp28 100 m247 # 查
zrange guns 0 -1 [withscores]  # 查看guns 下面的所有枪械,按照从小到大排列
zrevrange guns 0 -1 [withscores] # 从大到小排列
zrange guns 1 3  # 查看guns的弹容量排名从 [1-3] 包含 1 3的枪械zrangebyscore guns (30 100 # 查看弹容量在(30-100] 不包括30 之间的所有枪械
zrangebyscore guns 30 100 limit 2 1 withscores # 分页,每页1条,第三页
zrevrangebyscore guns 100 30 # 查看弹容量在(30-100]之间的所有枪械
zrevrangebyscore guns 100 30  limit 2 1 withscores # 分页,每页1条,第三页zcard guns # 查看系统中枪的种类数
zcount guns (20 50 # 获取(20-50] 区间内的所有枪械数zrank name dp28 # 按照从小到大,查看排名
zrevrank name dp28 # 按照从大到小zscore guns ak47 # 查看ak47的弹容量# 改
zincrby guns 10 m247 # 给m247枪增加10发子弹
zincrby guns -10 dp28 # 给dp28 减少10发子弹zrem guns ak47 ... # 按照字符串来移除元素,可同时多个
zremrangebyrank guns 1 2 # 按照弹容量排名  0-3 区间内的元素移除
zremrangebyscore guns 0 30 # 把弹容量小于30发的,全部删除掉# 删
del guns

Hash类型

哈希加密 关系不大

hash类型 大大降低了查找时候的难度 O(1)

ak47 -> 弹容量 威力

ak47 = {"name":"ak47","bullet":30,"bullet_now":27,"power":50,"num":1,
}ak47 键
name / bullet 名
ak47 / 30  值世间万物,全部转化成这种形式角色 = {性别:男、女攻击力:防御力:技能等级
}

Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储字典数据。

原生写法

# 增
hset ak47 num 1 bullet 30 now_bullet 27 power 50 # 设置一个ak47Hash字典,分别是 数量 弹容量 当前子弹  威力# 查
hget ak47 bullet # 获取ak47的弹容量hkeys ak47 # 获取ak47的所有属性
hvals ak47 # 获取ak47的所有值
hgetall ak47 # 获取ak47下面的所有字段和值# 改
hdel ak47 num # 删除一个或多个字段# 删
del guns

List类型

name = [“zhangsan”,“lisi”,“wangwu”]

原生写法

# 增 l left 左    r right 右
lpush history maoyi liangtuo leifengmao # 从list左边依次插入,顺序要注意
rpush history bijini # 从列表右边依次插入# 查
lrange history 0 -1 # 查看所有
lrange history 0 4 # 查看下标为[0-4]的元素# 改
lset history 2 qiuyi # 修改指定下标的元素值
lpop history # 从左边删除一个元素
rpop history # 从右边删除一个元素
lrem history 5 chenyi # 删除name中值为zhangsan的元素 最多删除5个,0为删除所有
ltrim history 1 5 # 只保留数组中[1-5]的元素,把其他的删除掉# 删除
del history
brpop history 5 # 当list为空时,删除整个LIST,并阻塞redis进程5秒中
blpop history 5 # 删除整个list 并阻塞redis进程5秒中
ry 0 4 # 查看下标为[0-4]的元素# 改
lset history 2 qiuyi # 修改指定下标的元素值
lpop history # 从左边删除一个元素
rpop history # 从右边删除一个元素
lrem history 5 chenyi # 删除name中值为zhangsan的元素 最多删除5个,0为删除所有
ltrim history 1 5 # 只保留数组中[1-5]的元素,把其他的删除掉# 删除
del history
brpop history 5 # 当list为空时,删除整个LIST,并阻塞redis进程5秒中
blpop history 5 # 删除整个list 并阻塞redis进程5秒中

day01_redis相关推荐

最新文章

  1. redis字符串匹配_Redis的数据类型和抽象概念介绍
  2. [转载] CSS模块化【封装-继承-多态】
  3. 网课谁的最好_报补习班,还是“上网课”?利用课余时间提高成绩,网课更加适合...
  4. 【硬核书】树与网络上的概率
  5. UHF RFID编码之TPP编码
  6. python做图像识别好还是c++好_OpenCV人脸检测(C++/Python)
  7. ismm rejection from cambridge
  8. springmvc 前端传给后台中文数据时,会产生乱码
  9. Spring MVC上下文父子容器
  10. 大规模天线阵列(massive-mimo)的介绍
  11. 【GCC】Bug 36793 - x86-64 does not get __sync_synchronize right
  12. 如果外卖APP想窃听我,有几个骚操作?
  13. [Beego模型] 三、高级查询
  14. 框架原理第三讲,RTTCreate,运行时类型创建.(以MFC框架讲解)
  15. freeswitch 电话会议
  16. docker容器网络通讯——外部访问内部
  17. (丘维声)高等代数课程笔记:商空间
  18. 集群环境下的文件上传和下载和文件服务器的配置
  19. Rime输入法第三方词库配置
  20. SH7001单电池恒压线性充电IC

热门文章

  1. microRNA靶基因预测
  2. 你为什么进入游戏业?
  3. 计算机bios怎么进入安全模式,安全模式设置-怎样进入bios和安全模式呢?为什么我按F – 手机爱问...
  4. kali 学习成长之路
  5. 市面百兆宽带多为假货 下载速度仅两家合格
  6. 【时代新未来 产业新发展】茉莉元宇宙芯片技术交流会圆满落幕
  7. 解决elasticsearch未授权访问的安全问题
  8. 科大讯飞的2022:夯实“根据地”业务,以技术创新点燃大模型产业落地的“星星之火”...
  9. java akka 实战_akka集群实战
  10. 越吃越瘦的15样东西