redis 学习2

2019/08/19 21:25
阅读数 159

网站

 

启动 

服务端

启动redis 服务端

在redis 安装目录下 src 里面

./redis-server &
 

可以指定 配置文件或者端口

 

客户端

 

在 redis 的安装目录里面的 src 里面

./redis-cli 

 可以指定 指定 连接 服务端的端口 或者  ip 

默认连接的端口是6379 

可以指定连接的 密码

关闭

 

配置

 

redis 关闭

  关闭服务器端,  使用 kill -9 pid 即可,

当然了 关闭 redis 服务的时候并没有将最近操作的给持久化到磁盘,

因此 客户端要  执行 save 命令即可。

但是不建议这样使用

应该在 redis 安装目录 下的 src 下面 使用  ./redis-cli shutdown 

这样 就可以保持 最近的记录持久化到磁盘了, redis 服务也就关闭了

基础命令

keyspace

用途:比如 多个测试环境, 每个测试环境存的数据就使用对应的 db 即可, 这样 在代码里面控制切换即可。

默认都是使用 db0 

切换 DB命令: select  index  , 比如 select 10 就切换到 db10 了

flush

flushdb 清除当前的 db

flushall  清除当前所有的 keyspacce 里面的db , 所有的key

dbsize
 

当前 db里面有多少个 key 的数量

quit 

退出  客户端连接

 

键命令

ttl   查询 剩余生存时间

就是 查询 对应的  key的剩余生存时间

比如    ttl a  如果返回 -1 代表永久生存,没有时间限制

如果返回值是 1 就是马上结束了,如果是  -2 表示已过期,该key已被删除


expire 设置过期时间

比如 expire a 10 即 10秒后过期

比如 在 存储 session 这样 ,模拟session 的有效期

type

返回key 的类型

比如 type b  返回  string

如果返回 none 就代表 不存在该key 即没有类型了

rename  重命名key

比如 rename a d 即将 key为 a 的重命名为 d

但是如果 被重命名的 key 已存在,旧值将会被删除。

比如  存在 key  a 和 d , rename a d  之后, a将被 d 覆盖,而原来的 d  的值将 被 改为 对应 a的key的值。

会覆盖已存在的。

 

renamenx  与nx

即 如果 对应的 key 已存在将 rename 失败

renamenx a b  , 因为 b 已存在 ,因此 renamenx 不成功。

就  nx 就去校验,如果对应的 key 已存在则 不执行对应的命令
renamenx a m 将成功,因为不存在 key为 m的 

setex 

设置对应的key 并 给与有效期

比如 setex c 100 c 即  设置一个 key为c 值为 c ,有效期为 100秒

psetexx  设置过期时间为毫秒

psetex d 10000 d 

这里是 设置一个 key d 的 值为d 过期时间 为 10000 毫秒


monitor

可以通过 monitor 来 查看redis 的日志和记录,排查问题时候,比较好用

 

数据结构

string 

默认就是 字符串类型

getrange 获取对应 key的内容的 范围

比如 getrange word 0 2  

获取 key 为 word 的内容 的 index 从 0到2 的内容,包括 2 的内容 

getset 

获取并设置, 并且会将 旧的值给返回 

mset  批量 设置 key 

mset  a1 a1 b1 b1 c1 c1


mget 批量获取 key的值

比如 mget  a1 b1 同时获取 ba, b1 的内容

setnx

当 key 不存在才会 set 成功,存在则设置失败

不会覆盖存在的 key

msetnx  批量 设置 不存在的 key 

同时它是具有 原子性的,要么都设置成功,要么都设置 失败。 只要当某个设置 不成功,其余都不成功

append 增加内容

即在 value 后面 加上 对应的内容

incr 自增

每次执行 都会将 对应 key 的value 是数字的 自增 1 

value 必须为 数值,且没有超出范围, 比如 integer 类型

incrby  设置自增步长

比如  incrby 1 100  自增 100 ,将原值加上 100 

decr 自减

减少 1 , 将 值 减 1 

decrby 根据 幅度 自减

比如 decrby 1 100 自减 100 

 

哈希hash

hexists 判断map是否存在

 hexists map xx 

hsestnx map xxkey  xxvalue 

即 如果 key 不存在才 设置成功,否则存在就不能设置

 

list 列表

lpush

lpush list 1 2 3 4 5 6 7 8 9 10
 也就是 最后放入的 就在 最首位

lrange list 0 1 结果是 10 , 9 

lpop 移除 列表第一个元素


lpop list 将list 移除 第一个 元素, 比如 10 

rpop 移除列表最后一个

lrange 范围 显示,不会出现越界的情况

lrange list  0 100

如果 list 列表只有几个元素,就将  list 内容都显示出来,超过了100 才会只显示 0到 100 的

 

set 集合 ,去重,无序

scard 
将  set 集合所有内容数量都显示出来

sdiff 差集, sinter 交集, sunion 并集

即获取两个集合的差集 

sdiff set1 set2  即显示 set1 相对 set2 的差集

srem 移除 元素 

spop 随机移除一个元素,并返回移除的元素

可以使用在一些随机获取内容的场景:比如 用户下单的时候,从set 集合里面随机获取一个订单号给对应的订单。

获取也可以用于抽奖相关的场景

sortedset 有序集合

zadd

zadd sortedset1 100 a 200 b 300 c 即 一个集合 ,第一元素a的值是 100 ,第二是 200 ,第三个是 300

将会按照 值给排序,默认是从小到大排序

zincrby  新增对应的内容

zincrby soredset 1000 a
将 a的值 增加 1000

zrange 范围取值,闭区间方式,不会出现越界

zrange sortedset 0 100


score 显示分数

zrange sortedset 0 100 withscores 

将 集合的内容 从 0到 100 显示,并显示分数

zscore sortedset b  现在 key 为 b的值 分数

 

key 命名可以 带上 :

比如 set aa:bb:cc  abc

这样就 存在 key 为  aa:bb:cc 值为 abc 了。

将会 以 树状的 结构方式 存储 内容的。

比如可以加上 set aa:bb:dd abd  

这样就比较规范,而且维护也比较好,比如来一个 商品的 good  之后接着其他属性。

比如 good:name  ,  good:price  等 ,

可以这样方式来 命名    redis 的 key 

分布式redis
 

可以将 已经 解压安装好的redis 文件夹 给 复制一份,就是另一个redis了,稍微配置一下,就可以做完另一个redis 来用了。

一致性hash算法

环形hash空间

命中率公式: (1 - n/(n+m) )* 100% 

n 代表 服务器节点, m 代表 变动的服务器数量。

随着 分布式集群的服务器越多,当 服务器节点变动的M越大,那么命中率越高,受到的影响越低。

而且有虚拟节点,因此影响就更低了

 

redis 物理形态是集群,工作方式是 分布式。

保证高可用就是 每一个分布式节点的 redis 配置 主从, 一般 可以不用 分布式的redis形式,

可以来一个 redis 主从即可 来保障高可用即可。除非 需要缓存的数据量很大,需要使用分布式加主从的方式。

 

spring session 

 

官网 https://spring.io/projects/spring-session

里面就有一些使用 的 demo 了

 

总结

如果不想对之前的代码进行修改,可以使用 spring session 结合redis,

如果要自定义 ,和灵活性,则可以自己实现了 

 

redis 分布式锁

实现用的命令

setnx 不存在就设值 , getset 获取旧对的值,获取旧的值, expire 设值过期,  del删除

流程图

 

优化版

 

参考代码 https://www.cnblogs.com/zuolun2017/p/8028208.html

redisson 框架

 

 

redis 主从

redis 配置主从很简单, 从库只能读,不能写

同时 主从的话,就不用 使用 redis 的 分布式分片功能了。

具体怎么使用就根据具体情况进行 使用了

 

 

 

 

 

 

 

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部