01 redis 基础入门
课程学习地址:
https://www.bilibili.com/video/BV1S54y1R7SB?p=23
中间手册地址:
http://www.redis.cn/
介绍
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。
特点
redis与memcache比较
1.存储类型:m string r:字哈链俩集合,空基bitmaps
2.持久化:m 内存 r:内存/硬盘
3.存在大小 一个键m:1M r:1G
适用场景
redis 核心配置说明
daemonize:#是否以后台守护进程方式运行
pidfile:#pid 文件位置
port:#监听的端口号
timeout:#请求超时时间
loglevel:#log 信息级别,总共支持四个级别:debug、verbose、notice、 默认为 verbose
logfile:#默认为标准输出(stdout) ,如果配置为守护进程方式运行,而这里又配置为日志记录方式为标准输出,则日志将会发送给/dev/
databases:#开启数据库的数量。使用“SELECT 库 ID”方式切换操作各个数据库
save * *:#保存快照的频率,第一个*表示多长时间,第二个*表示执行多少次写操作。在一定时间内执行一定数量的写操作时,自动保存快照。可设置多个条件。
rdbcompression:#保存快照是否使用压缩
dbfilename:#数据快照文件名(只是文件名,不包括目录) 。默认值为 dump.rdb
dir:#数据快照的保存目录(这个是目录)
requirepass:#设置 Redis 连接密码,如果配置了连接密码,客户端在连接 Redis 时需 要通过 AUTH <password>命令提供密码,默认关闭
Redis 对key的通用操作命令
常用命令
key是一个字符串,通过key获取redis中保存的数据
key所涉及的操作
对于key自生状态的相关操作,例如:删除,判定存在,获取类型等
对于key有效性控制的相关操作,例如:有效期设定,判断是否有效,有效状态的切换等
对于key快速查询操作,例如:按指定策略查询key
key基本操作
删除指定key: del key
获取key是否存在:exists key
获取key的类型:type key
具体实现:
key扩展操作
为指定key设置有效期
expire key seconds
pexpire key milliseconds
expireat key timestamp
pexpireat key milliseconds-timestamp
获取key的有效时间
ttl key秒
pttl key毫秒
切换key从时效性转化为永久性
persist key
具体实现:
查询key
keys pattern
查询模式规则
*:匹配任意数量的任意字符
?:匹配一个任意符号
[]:匹配一个指定符号
key的其他操作
为key改名
rename key newkey
renamenx key newkey
对所有key排序
sort
删除key
del key1 key2 ... keyn
其他key的通用操作
help @generic
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> set name haima
OK
127.0.0.1:6379> set age 19 # 设置键值
OK
127.0.0.1:6379> get name # 获取键值
"haima"
127.0.0.1:6379> dbsize # 返回当前库里所有的key的数量
(integer) 2
127.0.0.1:6379> move age 2 # 移动某一个键到其他仓库
(integer) 1
127.0.0.1:6379> exists age #判断key是否存在
(integer) 0
127.0.0.1:6379> select 2 #选择库 有0-15个库
OK
127.0.0.1:6379[2]> get age
"19"
127.0.0.1:6379[2]> select 0 #选择库 有0-15个库
OK
127.0.0.1:6379> keys * # keys* 获取所有的key 慎用
1) "name"
127.0.0.1:6379> KEYS na* #获取以na开头的key *通配任意多个
1) "name"
127.0.0.1:6379> KEYS *ame*
1) "name"
127.0.0.1:6379> keys a?? # ?通配单个字符
1) "age"
redis 127.0.0.1:6379> keys ag[eaw]
"age"
127.0.0.1:6379> exists name # 查key是否存在
(integer) 1
127.0.0.1:6379> type age # 获取key值的类型
string
127.0.0.1:6379> set a 11
OK
127.0.0.1:6379> get a
"11"
127.0.0.1:6379> del a # 删除key
(integer) 1
127.0.0.1:6379> get a
(nil)
127.0.0.1:6379> expire nme 10 #作用:设置key 10秒后过期
(integer) 1
127.0.0.1:6379> ttl nme # 查看key还有多久过期
(integer) 6
127.0.0.1:6379> ttl age # -1 为永久
(integer) -1
127.0.0.1:6379> ttl b # -2 key不存在
(integer) -2
127.0.0.1:6379> persist nme # 作用:把指定key设置为永久有效
127.0.0.1:6379> randomkey # 从当前数据库中随机返回一个 key 。
"name"
127.0.0.1:6379> randomkey
"age"
127.0.0.1:6379> keys *
1) "name"
2) "age"
127.0.0.1:6379> rename name name2 # 修改 key 的名称 如果新key已经存在,会覆盖key里的值
OK
127.0.0.1:6379> keys *
1) "name2"
2) "age"
127.0.0.1:6379> renamenx name2 name # 仅当 newkey 不存在时,将 key 改名为 newkey 。
(integer) 1
127.0.0.1:6379> keys *
1) "age"
2) "name"
127.0.0.1:6379> renamenx name age # 如果新key已经存在了,就修改不成功
(integer) 0
127.0.0.1:6379> flushdb #删除当前数据库
OK
127.0.0.1:6379> flushall #删除所有库中的数据
OK
字符串
基本介绍:
命名规范:
常用命令
127.0.0.1:6379> set key1 v1 设置key值
OK
127.0.0.1:6379> get key1 # 获key值
"v1"
127.0.0.1:6379> keys * # 获取所有的key
1) "key1"
127.0.0.1:6379> exists key1 # 判断key是否存在
(integer) 1
127.0.0.1:6379> append key1 hello # append:在尾部追加值,格式是:append key值 追加的值
(integer) 7
127.0.0.1:6379> get key1
"v1hello"
127.0.0.1:6379> strlen key1 # 获取key值的长度
(integer) 7
127.0.0.1:6379> append key1 ,haima #append:在尾部追加值,格式是:append key值 追加的值
(integer) 13
127.0.0.1:6379> strlen key1
(integer) 13
127.0.0.1:6379> get key1
"v1hello,haima"
# i++
# 步长 i+=
127.0.0.1:6379> set views 0
OK
127.0.0.1:6379> get views
"0"
127.0.0.1:6379> incr views # 自增1 浏览量变为1
(integer) 1
127.0.0.1:6379> get views
"1"
127.0.0.1:6379> decr views # 自减1 浏览量变为1
(integer) 0
127.0.0.1:6379> get views
"0"
127.0.0.1:6379> incrby views 10 # 自增 步长10
(integer) 10
127.0.0.1:6379> get views
"10"
127.0.0.1:6379> decrby views 5 # 自减 步长5
(integer) 5
127.0.0.1:6379> get views
"5"
# 客符串范围 range
127.0.0.1:6379> set key1 hello,haima
OK
127.0.0.1:6379> get key1
"hello,haima"
127.0.0.1:6379> getrange key1 0 3 # 截取范围[0,3]
"hell"
127.0.0.1:6379> getrange key1 0 -1 # 获取全部的字符串,和get key是一样的
"hello,haima"
应用场景:
1.字符串
2.对象字符串 # set user:1 {name:zhangsan,age:30}
3.这里的key是一个巧妙的设计: user:{id}:{filed} #如此设计在redis中是完全ok的
127.0.0.1:6379> mset user:1:name haima user:1:age 30
OK
127.0.0.1:6379> mget user:1:name user:1:age
1) "haima"
2) "30"
Hash类型
Map集合,key-map!时候这个值是一个map集合!本质和String类型没有太大区别,还是一个简单的key-value!
命令:
存/取/删除操作:
##############################################################################################
127.0.0.1:6379> hset user01 name haima # 设置
(integer) 1
127.0.0.1:6379> hget user01 name # 获取
"haima"
127.0.0.1:6379> hmset user01 gender nan gender 30 # 批量设置
OK
127.0.0.1:6379> hmget user01 name gender gender # 批量获取
1) "haima"
2) "nan"
3) "30"
127.0.0.1:6379> hdel user01 denger # 删除指定的map里的key
(integer) 1
127.0.0.1:6379> hgetall user01 # 获取所有的map 键值
1) "name"
2) "haima"
3) "gender"
4) "nan"
##############################################################################################
# hlen # 获取map表的字段数量
# hexists # 判断健是否存在
127.0.0.1:6379> hmset user1 name haima denger nan
OK
127.0.0.1:6379> hgetall user1
1) "name"
2) "haima"
3) "denger"
4) "nan"
127.0.0.1:6379> hlen user1 # 获取map表的字段数量
(integer) 2
127.0.0.1:6379> hexists user1 name # 判断健是否存在 返回 1:存在 0:不存在
(integer) 1
127.0.0.1:6379> hexists user1 age
(integer) 0
##############################################################################################
# 只获取所有的field
# 只获取所有的value
127.0.0.1:6379> hkeys user1
1) "name"
2) "denger"
127.0.0.1:6379> hvals user1
1) "haima"
2) "nan"
##############################################################################################
incr 正int/负int
127.0.0.1:6379> hset user1 age 30 # 指定增量
(integer) 1
127.0.0.1:6379> hincrby user1 age 2
(integer) 32
127.0.0.1:6379> hincrby user1 age -1
(integer) 31
127.0.0.1:6379> hsetnx user1 height 170 # 如果key不存在,添加成功
(integer) 1
127.0.0.1:6379> hsetnx user1 height 171 # 如果key存在,添加失败
(integer) 0
使用场景:
hash适合对象的存储,string适合字符串的存储
保存经常变更的信息(用户信息):
hmset user:1 name haima age 30
01 redis 基础入门的更多相关文章
- spring boot集成redis基础入门
redis 支持持久化数据,不仅支持key-value类型的数据,还拥有list,set,zset,hash等数据结构的存储. 可以进行master-slave模式的数据备份 更多redis相关文档请 ...
- Redis基础入门
学习redis之前,要了解NoSQL.. 一.NoSql概述 由于关系型数据库很难实现: 1.高并发读写 2.海量数据的高校率存储和访问 3.高可扩展性和高可用性 所以出现NoSql,(Not Onl ...
- Docker系列01—Docker 基础入门
一.初识Docker和容器 1.1 什么是docker 容纳其他物品的工具,可以部分或完全封闭,被用于容纳.存储.运输物品.物体可以被放置在容器中,而容器则可以保护内容物. 容器? 容器就是在隔离的环 ...
- 了不起的分支和循环01 - 零基础入门学习Python007
了不起的分支和循环01 让编程改变世界 Change the world by program 我们今天的主题是"了不起的分支和循环",为什么小甲鱼不说C语言,不说Python了不 ...
- Redis基础入门,Redis的优点也特点,Redis五种数据类型
Redis是一个开源,高级的键值存储和一个适用的解决方案,用于构建高性能,可扩展的Web应用程序. 1.Redis的主要特点 Redis有三个主要特点,使它优越于其它键值数据存储系统 - Redis将 ...
- 01 Redis基础
NoSQL 学名(not only sql) 特点: 存储结构与mysql这一种关系型数据库完全不同,nosql存储的是KV形式 nosql有很多产品,都有自己的api和语法,以及业务场景 产品种类: ...
- 【01】SpringBoot2核心技术-基础入门
SpringBoot 2 1. SpringBoot2核心技术-基础入门 01 Spring与SpringBoot 1.Spring 能做什么 1.1 Spring的能力 微服务:将一个应用的所有功能 ...
- windows下使用redis,Redis入门使用,Redis基础命令
windows下使用redis,Redis入门使用,Redis基础命令 >>>>>>>>>>>>>>>> ...
- CSS3基础入门01
CSS3 基础入门 01 前言 相对于css2来说,css3更新了很多的内容,其中包括选择器.颜色.阴影.背景.文本.边框.新的布局方案.2d.3d.动画等等. 而如果想要学习css3的诸多部分,不妨 ...
- javascript基础入门之js中的数据类型与数据转换01
javascript基础入门之js中的数据结构与数据转换01 js的组成(ECMAScript.BOM.DOM) js中的打印语句: 数据类型 变量 ...
随机推荐
- Android将数据导入到已有的excel表格_0
用到的jxl2.6.12 jar 包下载地址: https://mvnrepository.com/artifact/net.sourceforge.jexcelapi/jxl/2.6.12
- #dp,齐肯多夫定理#CF126D Fibonacci Sums
题目 \(T(T\leq 10^5)\) 组数据,每次给定数字 \(n(n\leq 10^{18})\), 问有多少种方案将 \(n\) 分解成若干个互不相同的斐波那契数 分析 如果找到一个方案使得所 ...
- 2024最新AIGC系统ChatGPT网站源码,GPTs应用,Ai绘画网站源码
一.前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型+国内AI全模型.本期针对源码系统整体测试下来非常完美,那么 ...
- OpenHarmony Docker移植实践
Docker简介 从操作系统诞生之日起,虚拟化技术就不断的演进与发展,结合目前云原生的发展态势,容器无疑是其中的重要一环. Docker是一个开源的软件项目,可以在Linux操作系统上提供一层额外的 ...
- Numpy数组索引和切片
数组可以通过索引或切片的方式进行访问或修改,数组切片x[start:stop:step],与Ptyhon内置的list标准索引和切片类似,只是数组产生的是一个非副本视图,根据条件索引的值如果修改,直接 ...
- 【FAQ】运动健康服务云侧数据常见问题及解答
目录 Q1:v2接口相比于v1接口传参及返回的数据格式有变化吗?是否可以直接将v1接口改成v2接口? Q2:如何获取采集健康数据的穿戴设备信息? Q3:如何处理非华为手机产生的步数调用采样明细接口查询 ...
- loguru 简单使用
使用Python自带的 logging 来记录日志会比较麻烦,查了下 大家都在用 loguru,看了下文档,发现是挺好用的,记录下笔记 安装 pip install loguru 简单使用 f ...
- 开发案例:使用canvas实现图表系列之折线图
一.功能结构 实现一个公共组件的时候,首先分析一下大概的实现结构以及开发思路,方便我们少走弯路,也可以使组件更加容易拓展,维护性更强.然后我会把功能逐个拆开来讲,这样大家才能学习到更详细的内容.下 ...
- UML 哲学之道——领域模型[四]
前言 简单整理一下领域模型. 正文 领域模型是对领域内的概念类或现实中的对象的可视化表示 领域模型也称概念模型.领域对象模型和分析对象模型 领域模型是可以在业务建模科目中创建的制品之一 领域模型是up ...
- task 如何终止线程
前言 这个直接上代码. 代码逻辑是使用var tokenSource = new CancellationTokenSource(); 让tokenSource 去取消.值得注意的是取消线程后,线程会 ...