redis 基本

joynet00 2020-05-27

hash、list、set、sorted set,可存储2^32-1个元素

string长度为512m字节,即2^(9+10+10+3)=2^32

优点:速度快,数据类型多,可持久化,支持主从备份,水平扩展

快的原因:c语言开发 纯内存操作 单进程单线程 epoll多路复用 高效的数据结构

每次传输的数据量小网络不会堵塞

lua脚本可以实现更强大的功能,例如判断库存大于0的时候才减1

用途:

String:缓存、分布式锁、计数器等。

List:队列、链表、微博关注人时间轴列表等。

Hash:用户信息、Hash 表等。

Set:去重、赞、踩、共同好友等。

Zset:排行榜

HyperLogLog:统计总数

布隆过滤器:判断是否存在

Session共享(单点登录)

发布/订阅

简单的分布式锁:set k uuid nx px 100 当k不存在时,把k设为uuid,100毫秒过期

锁用完了要 del k,为防止del前线程挂掉,要设置过期时间

expire命令执行前可能宕机或重启,形成永久的锁。所以用set的px参数更好

当前线程A未执行完锁a可能就过期了,然后线程B加了锁b,线程A执行完会删掉锁B,

解决办法是把v设为随机数或者uuid,删的时候只删自己加的锁,这样不会删其他线程的锁,但会出现多个线程同时运行的情况,为避免这种情况,可以开个线程定时检测锁是否存在,如果存在就增加过期时间,这样的话,可能原本线程删锁的同时,新线程恰好增加锁的过期时间,导致删锁失败。

更好的办法是用lua实现原子性

主从架构,可能刚加完锁,还没同步,主就挂了,从变成了新主,另一个线程在新主里加锁成功

命令文档: 官方 中文

exists k key是否存在

keys p 查找所有符合模式p的key

randomKey 随机返回一个key

rename k1 k2 将k1改名为k2

renameNx k1 k2 k2不存在时,将k1改名为k2

del k 删除key

type k 返回k所存储值的类型

dump k 返回序列化的值

move k db 把当前数据库中的key移到数据库db中

expire k s 过期时间设为s秒后

pExpire k m 过期时间设为m毫秒后

expireAt k t 过期时间设为t,t是时间戳

pExpireAt k mt 过期时间设为mt,mt是毫秒时间戳

ttl k 返回剩余的时间(秒) ,time to live

pttl k 返回剩余的时间(毫秒)

persist k 移除k的过期时间,k将永久保存

设置密码:config set requirepass 123456

提供密码:auth 123456

Pipeline:插入大数据量时,将多次请求合并为一次,减少请求往返时间。

前提是多次请求之间不能有因果关系。

info命令:查看redis状态

config set/get:运行时修改/获取配置项

相关推荐