SpringBoot系列: Redis基础

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

老版本 32bit 下载地址, 适合开发:  https://github.com/dmajkic/redis/downloads

windows下适合生产环境的发行版  https://www.memurai.com/  ,当然更推荐使用官网的 linux 发行版

 

windows 免费的客户端:

  https://github.com/caoxinyu/RedisClient

  https://github.com/qishibo/AnotherRedisDesktopManager/releases

  https://github.com/cinience/RedisStudio/releases

 

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

posted @ 2018-07-24 13:52  harrychinese  阅读(321)  评论(0编辑  收藏  举报