============================
Redis 安装
============================
redis 采用单线程多路复用的机制提供并发访问, 用到了 Linux 的一些独有的特性, 所以官网不提供 Windows 版本, 微软和开源界曾经将 redis 移植到 Windows, 在 github 上可以下载使用, 不过最后的 release 版本是 2016 年 7 月的 3.2.100 版, 貌似已经弃坑了. 不过作为开发环境已经是足够了.
下载地址: https://github.com/MicrosoftArchive/redis/tags

Windows 下安装后, 会自动创建一个 redis 的服务名. 该服务的命令其实是:
C:\Program Files\Redis\redis-server.exe" --service-run "C:\Program Files\Redis\redis.windows-service.conf"
可以看到关键的配置参数是在 redis.windows-service.conf 文件中.

redis 默认的端口是 6379, 这个端口一般不需要修改, 默认访问是不需要密码的, 所以需要加一个登陆口令.
修改文件 redis.windows-service.conf 的 requirepass 参数, 配置登陆口令:
requirepass Redis!123

============================
Redis 部署形式
============================
单机:
主从: 读写分离, 多节点数据备份
哨兵: 高可用, 读写分离
集群: 数据分片, 扩展存储能力, 同时包含主从及哨兵特性
一般生产环境, 使用哨兵就够了, 机器需要的不多, 同时运维也比较省心.

============================
redis 的基本概念
============================

redis 是 KV 数据库, redis 默认情况下共有 16 个数据库, 不同数据库内的 key 是可以重名的, 在同一个数据库中 key 是唯一的.
修改文件 redis.windows-service.conf 的 databases 参数, 设置数据库的数量.
databases 16

dbsize 命令, 可以获取当前 db 的 key 的数量.
select 命令, 切换当前数据库, 登陆后默认进入的是 index 为 0 的 db.
flushdb 命令, 清空当前数据库中所有的 key.

keys * 命令,列出所有的key
type key 命令,得到key的类型(string或list/hash或set等)

key 的命名规范:
redis 的 key 名称可以非常随意的, key 名可以是任意英文字母和字符的组合, 包括中文也可以作为 key 名, 所以项目中, 最好确立 key 的命名规范, 比如:
namespace:keyname
namespace:keygroup.keyname

============================
redis-cli 常用命令
============================
redis-cli 工具是自带的命令行工具, 有很好的命令提示功能, 使用 tab 键可以补齐命令名, redis-cli 的命令是大小写不敏感的.

登陆命令行是:
redis-cli -h 127.0.0.1 -p 6379
redis-cli -h 127.0.0.1 -p 6379 -a "Redis!123"
redis-cli -h 127.0.0.1 -p 6379 --raw
其中, -a 参数指定密码
--raw 参数, 只有带上该参数, 命令行工具才能显示中文字符, 否则将显示\xaa 这样的格式.

使用 ping 命令, 检查连接是否 OK.
127.0.0.1:6379> ping
(error) NOAUTH Authentication required.

使用 auth 命令, 输入登陆口令:
127.0.0.1:6379> auth "Redis!123"
OK

============================
redis 基本的 key value 操作
============================
使用 set 命令, 设置一个 key-value
127.0.0.1:6379> set platform:info "simple information"
OK

使用 get 命令, 获取 key 的 value
127.0.0.1:6379> get platform:info
"simple information"

使用 mset 命名, 一次性设置多个 key-value 对.
127.0.0.1:6379> mset platform:version 1 platform:info "simple information"
OK

使用 mget 命令, 一次性获取多个 key 对应的 values
127.0.0.1:6379> mget platform:version platform:info
1) "1"
2) "simple information"

对于数值型的字符串, 可以使用下面命令进行加减操作
decr 自减 1
incr 自增 1
decrby 减去一个整数, 可正可负
incrby 加上一个整数, 可正可负
incrbyfloat 加上一个浮点数, 可正可负

使用 keys 命令查询 Redis 中的所有 key, keys 支持通配符 * 和 ?.

使用 exists 命令可以判断指定的 key 是否存在, 返回值为 0 代表不存在, 1 代表存在. exists 命令可以有多个 keys 作为参数, 返回值是所有单个返回值之和.

使用 del 命令 可以删除指定的 key, 返回值为 1 代表成功, 0 代表不成功, 不成功很可能是因为指定的 key 不存在. del 命令也可以有多个 keys 作为参数, 返回值是所有单个返回值之和.

使用 expire 命令设定要给 key 的过期时间 (单位为秒), 返回值为 1 代表成功.
127.0.0.1:6379> expire a 10
(integer) 1

使用 ttl 命令可以查询指定 key 的剩余存活时间 (秒), 范围值为-1 代表该 key 永远有效, -2 代表该 key 已经被删除.

============================
redis List 操作
============================
除了字符串可以作为 value, list 也可以作为 key 的 value, Redis 的 List 是通过链表实现的, 所以插入元素速度很快, 但按照索引检索的速度较慢.

rpush 命令, 可以将多个值插入到 list 的尾部.
127.0.0.1:6379> rpush platform:history 20180721 20180722
(integer) 2

lpush 命令, 可以将多个值插入到 list 的头部.
127.0.0.1:6379> lpush platform:versions 1 2 3 4
(integer) 4

lrange 命令, 可以返回指定下表范围的元素值, 第 1 个参数是 key, 第 2 个参数是起始下标, 第三个参数是结束下标.
lrange 命令中的下标也可以用负数标识, -1 代表倒数第一个下标, -2 代表倒是第 2 个下标, 和 python 语言类似.
127.0.0.1:6379> lrange platform:history 0 1
1) "20180721"

llen 命令, 可以求得 list 的长度

rpop 命令是从 list 尾部取出一个元素, 如果 list 已经为空, 则返回 nil.
lpop 命令是从 list 头部取出一个元素, 如果 list 已经为空, 则返回 nil.

blpop 命令是以阻塞的形式从 list 尾部取一个元素, 如果 list 已经为空, 该命令一致处于等待, 直到列表中有了新的元素.
brpop 命令是以阻塞的形式从 list 尾部取一个元素, 如果 list 已经为空, 该命令一致处于等待, 直到列表中有了新的元素.
blpop 和 brpop 命令常用于消息服务需求, 他们能自动监听队列并取出一个元素.
blpop 和 brpop 命令最后一个参数是阻塞超时秒数, 0 为永远不超时; 前面的参数是 list key 清单, 可以是多个 key, 命令取出第一个非空 list 列表的元素.
127.0.0.1:6379> blpop platform:history platform:history2 0
1) "platform:history"
2) "20180723"

============================
redis Hash 操作
============================
Redis 本身是一个 Key-Value 数据库, 而 Value 也可以是一个 dictionary, 为了避免混淆, 将dictionary 中的 key 用 field 术语表示. Spring Boot 就使用该结构保存 Spring Session 数据, 以实现 web 系统的水平扩展.

hset key field value 命令, 设定 field 值.
hget key field 命令, 获取 field 值.
hexists key field 命令, 判断 field 是否存在.
hkeys key 命令, 列出指定 key 的 hashmap 的所有 field.
hgetall key 命令, 返回所有字段名和字段值.
hdel key field 命令, 删除指定 field.
hincrby key field byvalue 命令, 字段值加上一个整数
hincrbyfloat key field byvalue 命令, 字段值加上一个浮点数.

============================
redis Set 操作
============================
Redis 也存储 set 型和 sorted set 型值, 可以进行集合的交集和并集操作, 这里仅介绍 set 型操作.
sadd key member1 [member2..] 命令, 向集合中增加元素
smembers key 命令, 列出集合的所有元素
sinter key1 key2 命令, 两集合求交集.
sunion key2 key2 命令, 两集合求并集.
sdiff key1 key2 命令, 两集合求差集.
sinter key1 key2 key3 命令, 将 key2 和 key3 的交集存到 key1 中.
sunion key2 key2 key3 命令, 将 key2 和 key3 的并集的交集存到 key1 中.
sdiff key1 key2 key3 命令, 将 key2 和 key3 的差集的交集存到 key1 中.
smove key1 key2 memeber 命令, 从 key1 中移动 member 到 key2 集合.
sismember key memeber 命令, 判断元素是否在集合中.

============================
Redis的细节资料
============================
https://www.w3cschool.cn/redis_all_about/redis_all_about-sfc726u6.html
http://doc.redisfans.com/
Redis创建高可用集群教程【Windows环境】https://blog.csdn.net/u010648555/article/details/79427608

SpringBoot系列: Redis基础的更多相关文章

  1. Spring-Boot之Redis基础

    Spring-Boot之Redis基础 准备 Redis下载地址:github.com/MSOpenTech/redis/releases Redis数据库的默认端口号是 6379 开启Redis服务 ...

  2. [转帖]《吊打面试官》系列-Redis基础

    <吊打面试官>系列-Redis基础 https://www.cnblogs.com/aobing/archive/2019/11/07/11811194.html   你知道的越多,你不知 ...

  3. SpringBoot系列——Redis

    前言 Redis是一个缓存.消息代理和功能丰富的键值存储.StringBoot提供了基本的自动配置.本文记录一下springboot与redis的简单整合实例 官方文档:https://docs.sp ...

  4. SpringBoot系列: Redis 共享Session

    Web项目Session管理是一个很重要的话题, 涉及到系统横向扩展, SpringBoot已经为共享Session很好的解决方案, 这篇文章关注使用Redis共享会话, 同时这也是最常用的方法. = ...

  5. 《吊打面试官》系列-Redis基础

    你知道的越多,你不知道的越多 点赞再看,养成习惯 前言 Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对小伙伴们进行360°的刁难.作为一个在互联 ...

  6. 《吊打面试官》系列-Redis基础知识

    前言Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对小伙伴们进行360°的刁难.作为一个在互联网公司面一次拿一次offer的面霸(请允许我使用一下 ...

  7. 《吊打面试官》系列-Redis哨兵、持久化、主从、手撕LRU

    你知道的越多,你不知道的越多 点赞再看,养成习惯 前言 Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对小伙伴们进行360°的刁难.作为一个在互联 ...

  8. 《吊打面试官》系列-Redis常见面试题(带答案)

    你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源,有面试点思维导图,欢迎[Star]和[完善] 前言 Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在 ...

  9. SpringBoot系列——Spring-Data-JPA(究极进化版) 自动生成单表基础增、删、改、查接口

    前言 我们在之前的实现了springboot与data-jpa的增.删.改.查简单使用(请戳:SpringBoot系列——Spring-Data-JPA),并实现了升级版(请戳:SpringBoot系 ...

随机推荐

  1. 反射中Class.forName()和classLoader的区别

    搞清楚两者之间区别前,我们来了解下类加载过程. 一.类加载过程 1.加载 通过一个类的全限定名来获取定义此类的二进制字节流. 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构. 在内存中生 ...

  2. luogu4602 混合果汁 (主席树)

    按照美味值从大到小排序,对于每个询问,我想二分找到一个前缀来满足条件 那么以单价为下标建主席树,维护区间的最大体积和 以及满足这个最大体积需要的价钱 然后二分答案,再在主席树上二分,找到恰好满足的那个 ...

  3. bzoj2288 生日礼物 (线段树)

    我当然想选最大的子段和啦 但要选M次 那不一定就是最好的 所以提供一个反悔的选项,我选了一段以后,就把它们乘个-1,然后再选最好的(类似于网络流的思路) 这个可以用线段树来维护,记一个区间包含左端点/ ...

  4. [SDOI2015]序列统计(多项式快速幂)

    题目描述 小C有一个集合S,里面的元素都是小于M的非负整数.他用程序编写了一个数列生成器,可以生成一个长度为N的数列,数列中的每个数都属于集合S.小C用这个生成器生成了许多这样的数列.但是小C有一个问 ...

  5. SHOI2008仙人掌图(tarjan+dp)

    Solution 好题啊没的说. 本题需要求出仙人掌的直径,但仙人掌是一个带有简单环的一张图无法直接用树形dp求解,但它有一个好东西就是没有类似环套环的东西,所以我们在处理时就方便了一些. 思路:ta ...

  6. 闲聊javascript继承和原型

    javascript继承已经是被说烂的话题了,我就随便聊一点~ 一.javascript的复制继承 javascript的继承有复制继承和原型继承,基于复制继承用的不太多,而且无法通过instance ...

  7. JS监听滚动条进度

    HTML部分: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <s ...

  8. A1131. Subway Map (30)

    In the big cities, the subway systems always look so complex to the visitors. To give you some sense ...

  9. python中深拷贝和浅拷贝

    python中所谓浅拷贝就是对引用的拷贝,所谓深拷贝就是对对象的资源的拷贝. 首先,对赋值操作我们要有以下认识: 赋值是将一个对象的地址赋值给一个变量,让变量指向该地址( 旧瓶装旧酒 ). 修改不可变 ...

  10. c# WebApi之身份验证:Basic基础认证

    为什么需要身份认证 身份认证是为了提高接口访问的安全性,如果没有身份验证,那么任何匿名用户只要知道服务器的url,就可以随意访问服务器,从而访问或者操作数据库,这会是很恐怖的事. 什么是Basic基础 ...