redis是一个高性能的(key/value)分布式内存数据库,基于内存运行,并支持持久化的NoSQL数据库。
Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储,Redis支持数据的备份,即master-slave模式的数据备份。
使用redis做为缓存热数据,内存中的数据也提供了AOF和RDB等持久化机制可以选择,可以冷存储也可以热存储。在spring中使用Aop构建redis缓存的自动生产和清除,例如: Select 数据库前查询redis,有的话使用redis数据,放弃select 数据库,没有的话,select 数据库,然后将数据插入redis,然后再update或者delete数据库中的数据
统计点击数等应用。由于单线程,可以避免并发问题,保证不会出错。
相当于消息系统,ActiveMQ,RocketMQ等工具类似,由于redis把数据添加到队列是返回添加元素在队列的第几位,所以可以做判断用户是第几个访问这种业务
redis内构建一个足够长的数组,每个数组元素只能是0和1两个值,然后这个数组的下标index用来表示我们上面例子里面的用户id(必须是数字哈),那么很显然,这个几亿长的大数组就能通过下标和元素值(0和1)来构建一个记忆系统,上面我说的几个场景也就能够实现。用到的命令是:setbit、getbit、bitcount
验证前端的重复请求(可以自由扩展类似情况),可以通过redis进行过滤:每次请求将request Ip、参数、接口等hash作为key存储redis(幂等性请求),设置多长时间有效期,然后下次请求过来的时候先在redis中检索有没有这个key,进而验证是不是一定时间内过来的重复提交
秒杀系统,基于redis是单线程特征,防止出现数据库“爆破”
谁得分高谁排名往上。使用有续集,sorted set
redis-cli
在远程服务上执行命令
redis-cli -h host -p port -a password
使用PING测试服务是否启动
keys *
//序列化给定 key ,并返回被序列化的值。
DUMP key
//检查给定 key 是否存在
exists keyname
//设置key的过期时间
expire keyname seconds
//返回key的类型
type key
set key value
get key
返回substring
getrange key start end
更改key的value
getset key value
获得多个key的值
mget key1 key2 key3
将key对应的值+1或-1,在字符串后拼接字符串
incr key /decr key
append key svalue
Redis 中每个 hash 可以存储40多亿,value为hash
添加/删除/存在
hdel/hset/hexists key value
添加多个k-v对,全部获取
hmset key hashkey1 value hashkey2 value
hgetall key
获取表中的所有key或所有value,字段数量
hkeys key
hvals key
hlen key
入队与获取队中元素
lpush key value
lpush key value2
lrange key 0 10
通过数据在队中的位置获取数据
lindex key 1
获取列表的长度
llen key
弹出
//将头弹出并获取
lpop key
//将尾弹出并获取
rpop key
blpop/brpop key timeout
//分别为若无元素,则等待timeout时间,阻塞
Set 是 String 类型的无序集合。集合成员是唯一的
添加k-v对/获取成员变量
sadd key redis
sadd key mongodb
smembers key
scard key //获取成员数
集合之间的交叉并
sdiff 差集
sinter 交集
sunion 并集
删除集合中元素,判断是否在集合中
spop 移除并返回
sismember key member 判断一个元素是否在集合中
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
添加元素,同时zadd可以更新已存在元素的得分
zadd country 1 china
zadd country 2 American
zadd country 3 japen
zrange country 0 10 withscores
获取成员数
zcard key 获取成员数
zrank key member 获取指定成员的索引
zscore key member 获取成员的分数值
Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。
因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素。
统计去重元素个数
添加元素,统计数字
pfadd name zhang
pfadd name redis
pfadd name mongodb
pfcount name
Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。
订阅
subscribe redisChat
// 一次多个订阅
psubscribe
发布
publish redisChat "message"
discard用来取消所有事务