
Redis
wangyongxun1983
这个作者很懒,什么都没留下…
展开
-
13-Redis的实战
01、缓存穿透【1】、数据不存在的值的情况(1)缓存空数据(2)缓存特殊字符串,比如&&在数据库缓存一个空字符串,或者缓存一个特殊的字符串,那么在应用里面拿到这个特殊字符串的时候,就知道数据库没有值了,也没有必要再到数据库查询了。但是这里需要设置一个过期时间,不然的话数据库已经新增了这一条记录,应用也还是拿不到值。【2】、查询的值的值是不一样即使你每次都缓存特殊字符串也没用,因为它的值不一样。【3】、解决方案1、布隆过滤器原理2、布隆过..原创 2020-10-03 23:34:53 · 82 阅读 · 0 评论 -
12-Redis分布式【高性能、高并发、高可用】
RedisCluster是在Redis3.0的版本正式推出的,用来解决分布式的需求,同时也可以实现高可用。01、架构RedisCluster可以看成是由多个Redis实例组成的数据集合。客户端不需要关注数据的子集到底存储在哪个节点,只需要关注这个集合整体。案例:3主3从为例,节点之间两两交互,共享数据分片、节点状态等信息02、搭建https://gper.club/articles/7e7e7f7ff7g5egc7g6d03、数据分布如果是希望数据分布相对均匀的话,我们首原创 2020-10-03 21:43:17 · 222 阅读 · 0 评论 -
11-Redis的高可用
01、Redis自带主从复制配置【1】主从复制原理1、连接阶段slavenode启动时(执行slaveof命令),会在自己本地保存masternode的信息,包括masternode的host和ip。 slavenode内部有个定时任务replicationCron(源码replication.c),每隔1秒钟检查是否有新的masternode要连接和复制,如果发现,就跟masternode建立socket网络连接,如果连接成功,从节点为该socket建立一个专门处理复制工作的文件事件处理器,原创 2020-10-03 16:08:33 · 250 阅读 · 0 评论 -
09-Redis的持久化机制
一种是RDB快照(RedisDataBase),一种是AOF(AppendOnlyFile)01、RDBRDB是Redis默认的持久化方案。当满足一定条件的时候,会把当前内存中的数据写入磁盘,生成一个快照文件dump.rdb。Redis重启会通过加载dump.rdb文件恢复数据。【1】、自动触发配置redis.conf规则触发。如果不需要RDB方案,注释save或者配置成空字符串""。注意上面的配置是不冲突的,只要满足任意一个都会触发【2】、RDB文件位置和目录参数原创 2020-10-03 02:42:25 · 204 阅读 · 0 评论 -
08-Redis的Lua脚本
01、使用Lua脚本来执行Redis命令的好处一次发送多个命令,减少网络开销。 Redis会将整个脚本作为一个整体执行,不会被其他请求打断,保持原子性。 对于复杂的组合命令,我们可以放在文件中,可以实现程序之间的命令集复用。02、Redis中调用Lua脚本使用eval方法,语法格式如下:eval代表执行Lua语言的命令。 lua-script代表Lua语言脚本内容。 key-num表示参数中有多少个key,需要注意的是Redis中key是从1开始的,如果没有key的参数,那么写0。原创 2020-10-03 00:52:01 · 180 阅读 · 0 评论 -
07-Redis发布订阅模式
01、订阅频道我们有很多的频道(channel),我们也可以把这个频道理解成queue。订阅者可以订阅一个或者多个频道。消息的发布者(生产者)可以给指定的频道发布消息。只要有消息到达了频道,所有订阅了这个频道的订阅者都会收到这条消息。需要注意是,发出去的消息不会被持久化,因为它已经从队列里面移除了,所以消费者只能收到它开始订阅这个频道之后发布的消息。【1】、发布订阅命令的使用方法。可以一次订阅多个,比如这个客户端订阅了3个频道。发布者可以向指定频道发布消息(并不支持一次向多个频道发送原创 2020-10-02 23:51:50 · 189 阅读 · 0 评论 -
06-Redis其中数据类型和总结
01、BitMapsBitmaps是在字符串类型上面定义的位操作。一个字节由8个二进制位组成。set k1 a修改二进制数据(b对应的ASCII码是98,转换为二进制数据是01100010)setbit k1 6 1修改二进制数据setbit k1 6 1setbit k1 7 0get k1统计二进制位中1的个数bitcount k1获取第一个1或者0的位置bitpos k1 1bitpos k1 002、Hyperlo.原创 2020-10-02 21:29:02 · 96 阅读 · 0 评论 -
05-ZSet数据类型
01、操作命令添加元素zadd key1 10 java 20 mysql 30 redis获取全部元素zrange key1 0 -1 withscoreszrerange key1 0 -1 withscores根据分值区间获取元素zrangebyscore key1 20 30移除元素也可以根据score rank删除zrem key1 php cpp统计元素个数zcard key1分值递增zincrby key1 5 p.原创 2020-10-02 21:11:45 · 186 阅读 · 0 评论 -
04-set数据类型
01、操作命令sadd key1 a b v d e获取所有元素smembers key1统计元素个数scard key1随机获取一个元素srandmember key1随机弹出一个元素spop key1移除一个或者多个元素srem key1 a v e查看元素是否存在sismember key1 a02、存储(实现)原理Redis用intset或hashtable存储set。如果元素都是整数类型,就用inset存储原创 2020-10-02 16:20:55 · 140 阅读 · 0 评论 -
03、list数据类型
01、存储类型存储有序的字符串(从左到右或从右到左),元素可以重复。可以充当队列和栈的角色。02、操作命令lpush key1 alpush key1 c brpush key1 elpop key1lpop key1rpop key1lindex 0lrange 0 -1【3】、存储(实现)原理早期的版本中,数据量较小时用ziplist存储,达到临界值时转换为linkedlist进行存储,分别对应OBJ_ENCODING_ZIPLIST和OBJ.原创 2020-10-02 15:29:16 · 515 阅读 · 0 评论 -
02、Hash数据类型
01、操作02、Hash与String的主要区别?1、把所有相关的值聚集到一个key中,节省内存空间2、只使用一个key,减少key冲突3、当需要批量获取值的时候,只需要使用一个命令,减少内存/IO/CPU的消耗03、操作命令hset key1 f 6hset key1 e 7hmset key1 a 5 b 4 c 3hget key1 fhmget key1 a b chkeys key1hvals key1hgetall key1h原创 2020-10-02 10:30:38 · 1224 阅读 · 0 评论 -
01-Redis基础和String数据类型
01、Redis的启动【1】、后台启动1、修改配置文件redis.confdaemonize yesbind 0.0.0.02、启动redis./redis-server /usr/local/soft/redis-5.0.5/redis.conf【2】、基本操作redis默认有16个库(0~15),默认使用第一个db0。databases 161、切换数据库select 02、清空当前数据库flush db02、基本数据类型Str原创 2020-10-01 20:29:16 · 146 阅读 · 0 评论