课程学习地址:

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 核心配置说明

  1. daemonize:#是否以后台守护进程方式运行
  2. pidfile:#pid 文件位置
  3. port:#监听的端口号
  4. timeout:#请求超时时间
  5. loglevel:#log 信息级别,总共支持四个级别:debugverbosenotice 默认为 verbose
  6. logfile:#默认为标准输出(stdout ,如果配置为守护进程方式运行,而这里又配置为日志记录方式为标准输出,则日志将会发送给/dev/
  7. databases:#开启数据库的数量。使用“SELECT ID”方式切换操作各个数据库
  8. save * *:#保存快照的频率,第一个*表示多长时间,第二个*表示执行多少次写操作。在一定时间内执行一定数量的写操作时,自动保存快照。可设置多个条件。
  9. rdbcompression:#保存快照是否使用压缩
  10. dbfilename:#数据快照文件名(只是文件名,不包括目录) 。默认值为 dump.rdb
  11. dir:#数据快照的保存目录(这个是目录)
  12. requirepass:#设置 Redis 连接密码,如果配置了连接密码,客户端在连接 Redis 时需 要通过 AUTH <password>命令提供密码,默认关闭

Redis 对key的通用操作命令

常用命令

key是一个字符串,通过key获取redis中保存的数据

key所涉及的操作

  1. 对于key自生状态的相关操作,例如:删除,判定存在,获取类型等
  2. 对于key有效性控制的相关操作,例如:有效期设定,判断是否有效,有效状态的切换等
  3. 对于key快速查询操作,例如:按指定策略查询key

key基本操作

  1. 删除指定key: del key
  2. 获取key是否存在:exists key
  3. 获取key的类型:type key
  4. 具体实现:

  1. key扩展操作
  2. 为指定key设置有效期
  3. expire key seconds
  4. pexpire key milliseconds
  5. expireat key timestamp
  6. pexpireat key milliseconds-timestamp
  7. 获取key的有效时间
  8. ttl key
  9. pttl key毫秒
  10. 切换key从时效性转化为永久性
  11. persist key
  12. 具体实现:
  13. 查询key
  14. keys pattern
  15. 查询模式规则
  16. *:匹配任意数量的任意字符
  17. ?:匹配一个任意符号
  18. []:匹配一个指定符号
  19. key的其他操作
  20. key改名
  21. rename key newkey
  22. renamenx key newkey
  23. 对所有key排序
  24. sort
  25. 删除key
  26. del key1 key2 ... keyn
  27. 其他key的通用操作
  28. help @generic

  1. 127.0.0.1:6379> ping
  2. PONG
  3. 127.0.0.1:6379> set name haima
  4. OK
  5. 127.0.0.1:6379> set age 19 # 设置键值
  6. OK
  7. 127.0.0.1:6379> get name # 获取键值
  8. "haima"
  9. 127.0.0.1:6379> dbsize # 返回当前库里所有的key的数量
  10. (integer) 2
  11. 127.0.0.1:6379> move age 2 # 移动某一个键到其他仓库
  12. (integer) 1
  13. 127.0.0.1:6379> exists age #判断key是否存在
  14. (integer) 0
  15. 127.0.0.1:6379> select 2 #选择库 有0-15个库
  16. OK
  17. 127.0.0.1:6379[2]> get age
  18. "19"
  19. 127.0.0.1:6379[2]> select 0 #选择库 有0-15个库
  20. OK
  21. 127.0.0.1:6379> keys * # keys* 获取所有的key 慎用
  22. 1) "name"
  23. 127.0.0.1:6379> KEYS na* #获取以na开头的key *通配任意多个
  24. 1) "name"
  25. 127.0.0.1:6379> KEYS *ame*
  26. 1) "name"
  27. 127.0.0.1:6379> keys a?? # ?通配单个字符
  28. 1) "age"
  29. redis 127.0.0.1:6379> keys ag[eaw]
  30. "age"
  31. 127.0.0.1:6379> exists name # 查key是否存在
  32. (integer) 1
  33. 127.0.0.1:6379> type age # 获取key值的类型
  34. string
  35. 127.0.0.1:6379> set a 11
  36. OK
  37. 127.0.0.1:6379> get a
  38. "11"
  39. 127.0.0.1:6379> del a # 删除key
  40. (integer) 1
  41. 127.0.0.1:6379> get a
  42. (nil)
  43. 127.0.0.1:6379> expire nme 10 #作用:设置key 10秒后过期
  44. (integer) 1
  45. 127.0.0.1:6379> ttl nme # 查看key还有多久过期
  46. (integer) 6
  47. 127.0.0.1:6379> ttl age # -1 为永久
  48. (integer) -1
  49. 127.0.0.1:6379> ttl b # -2 key不存在
  50. (integer) -2
  51. 127.0.0.1:6379> persist nme # 作用:把指定key设置为永久有效
  52. 127.0.0.1:6379> randomkey # 从当前数据库中随机返回一个 key 。
  53. "name"
  54. 127.0.0.1:6379> randomkey
  55. "age"
  56. 127.0.0.1:6379> keys *
  57. 1) "name"
  58. 2) "age"
  59. 127.0.0.1:6379> rename name name2 # 修改 key 的名称 如果新key已经存在,会覆盖key里的值
  60. OK
  61. 127.0.0.1:6379> keys *
  62. 1) "name2"
  63. 2) "age"
  64. 127.0.0.1:6379> renamenx name2 name # 仅当 newkey 不存在时,将 key 改名为 newkey 。
  65. (integer) 1
  66. 127.0.0.1:6379> keys *
  67. 1) "age"
  68. 2) "name"
  69. 127.0.0.1:6379> renamenx name age # 如果新key已经存在了,就修改不成功
  70. (integer) 0
  71. 127.0.0.1:6379> flushdb #删除当前数据库
  72. OK
  73. 127.0.0.1:6379> flushall #删除所有库中的数据
  74. OK

字符串

基本介绍:

命名规范:

常用命令

  1. 127.0.0.1:6379> set key1 v1 设置key
  2. OK
  3. 127.0.0.1:6379> get key1 # 获key值
  4. "v1"
  5. 127.0.0.1:6379> keys * # 获取所有的key
  6. 1) "key1"
  7. 127.0.0.1:6379> exists key1 # 判断key是否存在
  8. (integer) 1
  9. 127.0.0.1:6379> append key1 hello # append:在尾部追加值,格式是:append key值 追加的值
  10. (integer) 7
  11. 127.0.0.1:6379> get key1
  12. "v1hello"
  13. 127.0.0.1:6379> strlen key1 # 获取key值的长度
  14. (integer) 7
  15. 127.0.0.1:6379> append key1 ,haima #append:在尾部追加值,格式是:append key值 追加的值
  16. (integer) 13
  17. 127.0.0.1:6379> strlen key1
  18. (integer) 13
  19. 127.0.0.1:6379> get key1
  20. "v1hello,haima"
  1. # i++
  2. # 步长 i+=
  3. 127.0.0.1:6379> set views 0
  4. OK
  5. 127.0.0.1:6379> get views
  6. "0"
  7. 127.0.0.1:6379> incr views # 自增1 浏览量变为1
  8. (integer) 1
  9. 127.0.0.1:6379> get views
  10. "1"
  11. 127.0.0.1:6379> decr views # 自减1 浏览量变为1
  12. (integer) 0
  13. 127.0.0.1:6379> get views
  14. "0"
  15. 127.0.0.1:6379> incrby views 10 # 自增 步长10
  16. (integer) 10
  17. 127.0.0.1:6379> get views
  18. "10"
  19. 127.0.0.1:6379> decrby views 5 # 自减 步长5
  20. (integer) 5
  21. 127.0.0.1:6379> get views
  22. "5"
  1. # 客符串范围 range
  2. 127.0.0.1:6379> set key1 hello,haima
  3. OK
  4. 127.0.0.1:6379> get key1
  5. "hello,haima"
  6. 127.0.0.1:6379> getrange key1 0 3 # 截取范围[0,3]
  7. "hell"
  8. 127.0.0.1:6379> getrange key1 0 -1 # 获取全部的字符串,和get key是一样的
  9. "hello,haima"

应用场景:

1.字符串

2.对象字符串 # set user:1 {name:zhangsan,age:30}

3.这里的key是一个巧妙的设计: user:{id}:{filed} #如此设计在redis中是完全ok的

  1. 127.0.0.1:6379> mset user:1:name haima user:1:age 30
  2. OK
  3. 127.0.0.1:6379> mget user:1:name user:1:age
  4. 1) "haima"
  5. 2) "30"

Hash类型

Map集合,key-map!时候这个值是一个map集合!本质和String类型没有太大区别,还是一个简单的key-value!

命令:

存/取/删除操作:

  1. ##############################################################################################
  2. 127.0.0.1:6379> hset user01 name haima # 设置
  3. (integer) 1
  4. 127.0.0.1:6379> hget user01 name # 获取
  5. "haima"
  6. 127.0.0.1:6379> hmset user01 gender nan gender 30 # 批量设置
  7. OK
  8. 127.0.0.1:6379> hmget user01 name gender gender # 批量获取
  9. 1) "haima"
  10. 2) "nan"
  11. 3) "30"
  12. 127.0.0.1:6379> hdel user01 denger # 删除指定的map里的key
  13. (integer) 1
  14. 127.0.0.1:6379> hgetall user01 # 获取所有的map 键值
  15. 1) "name"
  16. 2) "haima"
  17. 3) "gender"
  18. 4) "nan"
  19. ##############################################################################################
  20. # hlen # 获取map表的字段数量
  21. # hexists # 判断健是否存在
  22. 127.0.0.1:6379> hmset user1 name haima denger nan
  23. OK
  24. 127.0.0.1:6379> hgetall user1
  25. 1) "name"
  26. 2) "haima"
  27. 3) "denger"
  28. 4) "nan"
  29. 127.0.0.1:6379> hlen user1 # 获取map表的字段数量
  30. (integer) 2
  31. 127.0.0.1:6379> hexists user1 name # 判断健是否存在 返回 1:存在 0:不存在
  32. (integer) 1
  33. 127.0.0.1:6379> hexists user1 age
  34. (integer) 0
  35. ##############################################################################################
  36. # 只获取所有的field
  37. # 只获取所有的value
  38. 127.0.0.1:6379> hkeys user1
  39. 1) "name"
  40. 2) "denger"
  41. 127.0.0.1:6379> hvals user1
  42. 1) "haima"
  43. 2) "nan"
  44. ##############################################################################################
  45. incr int/负int
  46. 127.0.0.1:6379> hset user1 age 30 # 指定增量
  47. (integer) 1
  48. 127.0.0.1:6379> hincrby user1 age 2
  49. (integer) 32
  50. 127.0.0.1:6379> hincrby user1 age -1
  51. (integer) 31
  52. 127.0.0.1:6379> hsetnx user1 height 170 # 如果key不存在,添加成功
  53. (integer) 1
  54. 127.0.0.1:6379> hsetnx user1 height 171 # 如果key存在,添加失败
  55. (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例程_普通表在线转分区表(基于规则)

    KingbaseES例程_普通表在线转分区表 概述 普通表转分区表,使用视图的替换式规则,以路由方式,实现在线转移数据. 数据准备 /*普通大表*/ create table tab_single a ...

  2. Amazon免费CE2基于docker部署nginx,并实现访问

    在部署之前,请确保你已经申请好了CE2免费的服务器,网上的相关教程很多,可以自由参考. 一.使用xshell+公钥连接实例 1.打开xshell,导入密钥, 选择"工具" -> ...

  3. Modbus报文详解

    Modbus是一种串行通信协议,最初由Modicon公司(现为施耐德电气的一部分)在1979年为使用其PLC(可编程逻辑控制器)而开发.Modbus已成为工业领域内广泛使用的一种通信协议,特别是对于监 ...

  4. 初学STM32 CAN通信(三)

    1. stm32 CAN通信标准库函数 //CAN通信初始化函数 uint8_t CAN_Init(CAN_TypeDef* CANx, CAN_InitTypeDef* CAN_InitStruct ...

  5. kafka集群启动命令脚本文件kf.sh

    注意代码缩进 添加执行权限 chmod +x kf.sh 1 #! /bin/bash 2 case $1 in 3 "start"){ 4 for i in hadoop102 ...

  6. C语言线程安全问题

    线程安全问题 #include <stdio.h> #include <tinycthread.h> #include <io_utils.h> int count ...

  7. 使用OHOS SDK构建filament

    参照OHOS IDE和SDK的安装方法配置好开发环境. 从gitee下载源码. 执行如下命令: git clone https://gitee.com/oh-graphics/filament.git ...

  8. JDK12的新特性:teeing collectors

    目录 简介 talk is cheap, show me the code Teeing方法深度剖析 Characteristics 总结 简介 JDK12为java.util.stream.Coll ...

  9. JDK 14的新特性:文本块Text Blocks

    目录 举个例子 Indentation编排 Escaping转义 formatted格式化 总结 说起来,Text Blocks是在JDK13中以第一次预览版本引入的.现在在JDK14中是第二次预览版 ...

  10. C# Break 和 Continue 语句以及数组详解

    C# Break 它被用于"跳出" switch 语句. break 语句也可用于跳出循环. 以下示例在 i 等于 4 时跳出循环: 示例: for (int i = 0; i & ...