模块一:基础
redis 是基于内存的KV非关系型数据库。
redis基本数据类型有:String,list,hash,set,zset。
redis的使用场景有:缓存,计数器(String自增自减)。
- redis启动过程
先去/usr/local/bin打开redis-server
然后启动redis-cli(redis的客户端)就可以了
默认进入0号数据库。
- redis为什么快
基于内存
数据结构简单
采用单线程
多路复用IO
- 基本的数据结构
String:
普通的KV字符串,一个k对应一个v。
代码语言:javascript复制set me syyyj
get me
结果输出了syyyj。
List:
简单的字符串集合。按插入顺序来排序,可头插(L)可尾插(R)
代码语言:javascript复制rpush me syyyj
//输出1
rpush me syj
//输出2
rpush me syjjj
//输出3
rrange me
//输出
//"syyyj"
//"syj"
//"syjjj"
Hash:
映射表操作
代码语言:javascript复制hmset set okk me nb we upup
hget okk me
//输出nb
hget okk we
//输出 upup
出现hash冲突的解决方式和hashmap一样,用拉链法解决hash冲突,不过没有红黑树。
set:
String类型的无序集合。
集合是用hash来实现的,所以增删查都是O(1)。
使用sadd的时候,返回1是成功,返回0是已存在。
代码语言:javascript复制sadd key value;
//输出1
sadd key value2;
//输出1
sadd key value;
//输出0
smembers key:
//输出
//"value"
//"value2"
Zset:
关于String的有序集合,底层使用跳表来实现。
同时不可以重复。
运用每个项的得分来排序,从小到大排序。
集合是用hash来实现的,所以增删查都是O(1)。
使用zadd的时候,返回1是成功,返回0是已存在。
代码语言:javascript复制zadd key score member 基本示范。
zadd vv 0 me
zadd vv 1 me2
zadd vv 2 me3
ZRANGE vv 0 1000
模块二:事务
redis的事务是非原子性的,所以也不会回滚,如果要实现回滚,要用命令watch。
- redis的事务基本命令
multi 创建事务
exec 启动事务
discard 关闭事务
watch < KEY > 监听key
unwach 取消所有监听
- 如何实现事务?
使用watch命令监听某个key,如果事务中使用这个key,同时监听到这个key发生变化,事务则会发送回滚。如果key没有变化,则继续下去,同时这个watch会没掉。所以watch监听只会用一次。
我的博客即将同步至腾讯云 社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=1m9564neirmdi