课程学习地址:

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 基础入门的更多相关文章

  1. spring boot集成redis基础入门

    redis 支持持久化数据,不仅支持key-value类型的数据,还拥有list,set,zset,hash等数据结构的存储. 可以进行master-slave模式的数据备份 更多redis相关文档请 ...

  2. Redis基础入门

    学习redis之前,要了解NoSQL.. 一.NoSql概述 由于关系型数据库很难实现: 1.高并发读写 2.海量数据的高校率存储和访问 3.高可扩展性和高可用性 所以出现NoSql,(Not Onl ...

  3. Docker系列01—Docker 基础入门

    一.初识Docker和容器 1.1 什么是docker 容纳其他物品的工具,可以部分或完全封闭,被用于容纳.存储.运输物品.物体可以被放置在容器中,而容器则可以保护内容物. 容器? 容器就是在隔离的环 ...

  4. 了不起的分支和循环01 - 零基础入门学习Python007

    了不起的分支和循环01 让编程改变世界 Change the world by program 我们今天的主题是"了不起的分支和循环",为什么小甲鱼不说C语言,不说Python了不 ...

  5. Redis基础入门,Redis的优点也特点,Redis五种数据类型

    Redis是一个开源,高级的键值存储和一个适用的解决方案,用于构建高性能,可扩展的Web应用程序. 1.Redis的主要特点 Redis有三个主要特点,使它优越于其它键值数据存储系统 - Redis将 ...

  6. 01 Redis基础

    NoSQL 学名(not only sql) 特点: 存储结构与mysql这一种关系型数据库完全不同,nosql存储的是KV形式 nosql有很多产品,都有自己的api和语法,以及业务场景 产品种类: ...

  7. 【01】SpringBoot2核心技术-基础入门

    SpringBoot 2 1. SpringBoot2核心技术-基础入门 01 Spring与SpringBoot 1.Spring 能做什么 1.1 Spring的能力 微服务:将一个应用的所有功能 ...

  8. windows下使用redis,Redis入门使用,Redis基础命令

    windows下使用redis,Redis入门使用,Redis基础命令 >>>>>>>>>>>>>>>> ...

  9. CSS3基础入门01

    CSS3 基础入门 01 前言 相对于css2来说,css3更新了很多的内容,其中包括选择器.颜色.阴影.背景.文本.边框.新的布局方案.2d.3d.动画等等. 而如果想要学习css3的诸多部分,不妨 ...

  10. javascript基础入门之js中的数据类型与数据转换01

    javascript基础入门之js中的数据结构与数据转换01 js的组成(ECMAScript.BOM.DOM)        js中的打印语句:        数据类型        变量      ...

随机推荐

  1. KingbaseES checkpoint_timeout参数对wal日志量的影响

    前言 在KingbaseESV8R6数据库中,必须先将更改写入WAL日志(老版本称为 xlog),然后才能将这些更改从内存shared_buffer 写入到磁盘. 前两天有个同事遇到一个问题,wal日 ...

  2. KingbaseES Json 系列二:Json对象函数

    KingbaseES Json 系列二--Json对象函数(JSONB_BUILD_OBJECT,JSONB_OBJECT,JSON_BUILD_OBJECT,JSON_OBJECT) JSON 数据 ...

  3. SQLite数据库(来自菜鸟教程)

    SQLite是什么?为什么要用SQLite?SQLite有什么特点? 答:下面请听小猪娓娓道来: ①SQLite是一个轻量级的关系型数据库,运算速度快,占用资源少,很适合在移动设备上使用, 不仅支持标 ...

  4. C#第一个helloworld程序

    1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 usin ...

  5. Unity 2022.3.20f1新功能,异步实例化预制体Object.InstantiateAsync

    今天查看Unity 2022.3.20f1更新日志,发现新增了个异步实例化的功能,这个功能解决了Unity历史上实例化预制体卡顿的痛点,简直不要太爽. 具体的API文档请点击跳转. 做了个简单的实例化 ...

  6. 网络协议之:memcached text protocol详解

    目录 简介 memcached protocol介绍 memcached支持的命令 存储命令 读取命令 常用的其他命令 memcached服务器的返回值 支持UDP协议 总结 简介 用过缓存系统的肯定 ...

  7. 巴延兴:从主导多个SIG组到OpenHarmony“代码贡献之星”,我是如何做到的?

    编者按:在 OpenHarmony 生态发展过程中,涌现了大批优秀的代码贡献者,本专题旨在表彰贡献.分享经验,文中内容来自嘉宾访谈,不代表 OpenHarmony 工作委员会观点. 巴延兴 深圳开鸿数 ...

  8. 有奖调研 | 让虚拟照入现实的完美AR开发平台长什么样?

    6年前的夏天,一款现实与虚拟结合的手游成了无数玩家的心头好,手握智能手机,玩家就能在真实世界来一场妙趣横生的探险,收集动漫作品里如数家珍的宠物精灵.AR技术结合用户熟识喜爱的内容形式,与现实环境中扩充 ...

  9. HDC2021技术分论坛:分布式调试、调优能力解决方案

    作者:yangjianwei 华为高级工程师 HarmonyOS致力于提供1+8+N智慧全场景解决方案,打造设备流转.多端协同的分布式体验,实现一次开发.多端部署,让分布式应用的开发更加简单. 针对分 ...

  10. 同义词查找,关键词扩展,使用腾讯Tencent AILAB的800万词向量,gensim,annoy

    最近在做一个关键词匹配系统,为了更好的效果, 添加一个关键词扩展的功能.使用Tencent AIlab的800万词向量文件. 腾讯AILAB的800万词向量下载地址:https://ai.tencen ...