雪崩的时候没有一片雪花是无辜的 开源都是王道
技术没有高低之分,看你如何使用 敬畏之心,敬畏生命,敬畏自然;敬畏使人进步 追求幸福(帮助他人),探索未知!
NoSQL的四大分类
KV键值对
文档型数据库
列式存储
图形存储
Redis入门
Remote Dictionary Server 远程字典服务
是一个开源的ANSI C语言编写,支持网络
性能测试
基础知识
- 默认有16个数据库
- 默认使用的是第0个
- 切换数据库:select num
- 查看数据库大小(默认是0):DBSIZE
- 设置key值:set name xx
- 获取key值:get name
- 查看数据库中所有的key:key *
- 清除当前数据库:flushdb
- 清除全部数据库的:EXISTS key
- 设置过期时间:EXPIRE key 10(单位是秒) —场景:热点事件
- tll key
- 移除key:remove key
- 判断key是什么类型:type key
Redis是单线程
基于内存操作,CPU不是redis的性能瓶颈。其瓶颈是机器的内存和网络带宽
Redis是C语言写的,官方提供的数据为100000+QPS,完全不比使用key-value的Memcache差
Redis 为什么快
五大基本数据类型
String
- 常见场景
- 计数器
- 统计多单位数量
- 粉丝数
- 对象缓存存储
- 动态追加字符串:append key ”xx“
- if key不存在,那就相当于setkey
- 查看字符串的长度:STRLEN key
- 数量 +1/-1 —场景:浏览量
- incr key
- decr key
- 设置增加的步长:INCRBY views(key) num
- 获取字符串范围:
- 指定长度:GETRANGE key 0 3([0,3])
- 全部长度:GETRANGE key 0 -1
- 替换(设置)指定位置开始的字符串
- SETRANGE key 1 xx
- 当前存在 setex(set with expire)
- case:设置过期时间
- eg:setex key 10 “xxx”
- 当前不存在 setnx (set if not exist)
- case:不存在的设置(在分布式锁中常常使用)
- eg:setnx key “xx”
- 重修改成功返回 1,反之 0
- 同时设置多个值(原子性的:同时成功或失败)
- format:mset
- mset
- 同时获取多个值
- format:gset
- 设置databases
- getset db redis
- get db
列表(List)
场景
- 栈
- 队列
- 阻塞队列
命令行(所有的命令都是以 ‘ L’ 开头的)
- 插入
- 左插入:lpush
- 右插入:rpush
- 移除
- 左移除:lpop
- 通过下标获取某一个值
- lindex list num
- 返回列表长度
- llen list
- 移除指定值
- Lrem list 1 2 three ## 移除两个three
127.0.0.1:6379> lpush list one
(integer) 1
127.0.0.1:6379> lpush list two
(integer) 2
127.0.0.1:6379> lpush list three
(integer) 3
127.0.0.1:6379> lrange list 0 2
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> rpush list right
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
4) "right"
127.0.0.1:6379>
Redis key