概述
- redis 是一个开源的,内存中的数据解构存储系统,可以用作数据库,缓存和消息中间件
redis 内置了 复制,lua脚本,lru驱动事件,事务和不同级别的磁盘持久化,并通过redis哨兵和自动分区提供高可用性
数据类型
String
- 数值类型
- 字符类型
- bitmaps
- hashs
- list
- sets
- sorted sets
redis 是单进程 ,单线程,单实例的,并发请求很多的时候是如何变快的呢?
使用help帮助自己学习redis
String 字符串类型操作
- set key value kv 赋值
- get key 得到key对应的value
- mget
- mset
- append
- range
- getrange
- setrange
- strlen
- getset k1 value 设定新值并吧老值返回过来
- msetnx k1 v1 k2 v2
- 只能新建
- msetxx k1 v1 k2 v2
- 只能更新
set key value [EX seconds|PX milliseconds|EXAT timestamp|PXAT milliseconds-timestamp|KEEPTTL] [NX|XX] [GET] — nx 只能新建 为如果key不存在的情况下进行kv赋值 使用场景为分布式锁 — 比如很多人同时对一个redis进行赋值使用,谁先进行了赋值之后,其他人的操作都会返回nil,即赋值不成功 — xx 只能更新,意为当key存在的时候才可以进行赋值 mset k1 v1 k2 v2 — 批量进行赋值,取值 mget k1 k2 append 对k对应的值进行追加 set k1 hello append k1 addicated get k1 hello addicated getrange k start end —按照下标进行范围取值 getrange k1 0 5 hello 知识点 正反向索引 在getrange 中同样适用,即,字符串最后一个字符下标为 -1 ,一次-2.。。-n 但可偷懒的来进行适用 getrange k1 0 -1 — 完整输出字符串 getrange k1 5 -1 — 输出下标5 到末尾 setrange k1 offset v — 从下标为offset位置进行覆盖写入v setrange k1 6 world get k1 输出为 hello world strlen k1 — 返回字符串长度
数值操作
incr
decr
incrby k1 增量
decrby k1 减量
bitmap
setbit
-
bitpos
返回字符串里面第一个被设置为1或者0的bit位。
默认情况下整个字符串都会被检索一次,只有在指定start和end参数,该范围被解释为一个字节的范围,而不是一系列的位。所以start=0 并且 end=2是指前三个字节范围内查找。
bitcount
key [start end]
- 统计字符串被设置为1的bit数.
一般情况下,给定的整个字符串都会被进行计数,通过指定额外的 start 或 end 参数,可以让计数只在特定的位上进行。
bitop
-
List
同向命令相当于将redis的list用做栈
反向命令则相当于吧list当作队列来进行使用
操作下标的话可以当作数组来进行使用
阻塞,单播队列FIFOLPUSH
左押入,
lpush k1 a b c d e f 实际上数据进入的顺序为 f e d c b a
RPUSH
右押入
-
LRANGE
-
LINDEX
-
LSET
-
LREM k1 count value
移除某个列表下 count数量的 value
- count又分为 正数,负数 ,0 三种情况
-
LPOP
-
LINSERT k1 after value insertValue
-
LLEN
-
HASH
场景
对field进行计算
- 点赞,收藏,详情页,减少接口请求数,页面提速
- set k1::属性名 属性值
- get k1::属性名
- keys k1* 得到该对象的所有属性名,值
127.0.0.1:6379> keys p1* 1) “p1::age” 2) “p1::name” 127.0.0.1:6379>
HSET k1 属性1 属性值
HGET k1 属性1
HMGET k1 属性1 属性2
HMSET k1 属性1 属性值1 属性2 属性值2
HKEYS k1
-
HVALS k1
-
HGETALL k1
-
HINCRBYFLOAT k1 属性名1 属性值
-
HINCR k1 属性名1 属性值
应用场景
商品详情场景,将商品所有的详情缓存到redis - hash中,
Set
List 是顺序的,这里的顺序指的是插入的取出的顺序,
Set 是去重的一种集合,里面不维护元素变化顺序,以及插入取出顺序,简单来说是无序的
无序
去重
随机事件
SRANDMEMBER key count 取出多个
-
正数
-
负数
-
0
-
SADD k1 v1 v2 v3 v4
SMEMBERS k1
-
SINTER k1 k2
-
SINTERSOTRE dest k1 k2
-
SUNION
SUNIONSTORE
-
SDIFF
SDIFFSTORE
-
SORTED_SET
有序集合. 这个序是对元素排序的那个顺序
-
ZRANGE k1 0 -1 按照索引取值
-
ZRANGEBYSCORE
ZSCORE k1 value
-
集合操作
并集
- 交集
-
排序是怎么实现的?crud的速度
-
redis - 二进制安全
在redis中传输的只是字节流
- 即,set任意字符,都会当作字节进行存储而不进行类型计算,当然如果想要进行类型计算 obejct encoding key 即可
- 二进制安全的意思就是,只关心二进制化的字符串,不关心具体格式,只会严格的按照二进制的数据存取,不会妄图以某种特殊格式解析数据。