Java Redis系列2 (redis的安装与使用+redis持久化的实现) 什么是Redis? ? Redis的应用场景 1.缓存(数据查询,短链接,新闻内容,商品内容) 2.聊天室的在线好友 3.任务队列(秒杀,抢购) 4.应用排行榜 5.网站访问统计 6.数据过期处理 7.分布式集群架构中的 session分离 下载安装 官网:https://redis.io 中文网:http://www.redis.net.cn/ 解压直接可以使用: ? * redis.windows.conf:配置文件 * redis-cli.exe:redis的客户端 * redis-server.exe:redis服务器端 Redis的数据结构 看过我上一篇文章的兄弟应该都知道 redis是一个内存数据库,当redis服务器重启时,数据会丢失,所以我们需要将redis数据持久化到硬盘文件中 redis的持久化机制 1.RDB:默认方式,不需要进行配置,默认就是使用这种机制
Jedis概述 Redis不仅是使用命令来操作,现在基本上主流的语言都有客户端支持。在官方网站里列一些java的客服端,有Jedis、Redisson、Jredis、JDBC-Redis等。 其中官方推荐使用Jedis和Redisso。在企业中用的最多的就是Jedis。 #daemonize yes 该项配置 Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程,设置为no 最后重启redis-server 设置密码的流程如下: vim /etc/redis.conf #requirepass foobared去掉注释,foobared改为自己的密码,我在这里改为 ", "element004")); System.out.println("查看下标1到2范围内的元素值:" + shardedJedis.zrange("zset", 1, 2));
上一篇里讲过了redis在spring boot中的简单使用,对于单个对象的增删改查的默认操作。 当然也可以自己定义序列化方式,使用别的Json工具类,或者别的什么方法来完成序列化方式。 完成RedisTemplate的设置后,再次save一个Post对象来看看在redis里的存储方式。 ? 在上一篇里,还提到了无需配置yml中redis的属性,ip、port之类的,系统会识别默认的。下面来看看如何使用自己的redis配置。 在配置文件里设置了ip和port及pool等属性,然后打开RedisCacheConfig类,来使用yml里的这些redis配置。 这样就完成了redis的自定义信息,以后就可以使用RedisTemplate来操作redis了。可以通过修改yml里的连接信息来看看是否已生效。
文章目录 前言 一、发布订阅命令简介 二、频道的订阅和退订 1.频道订阅 2.频道退订 2.频道退订 四、发布消息 五、Redis源码 总结 前言 本文对Redis的发布订阅功能的实现做了简单介绍,包括发布订阅命令和内部实现 一、发布订阅命令简介 redis客户端可以订阅某个频道或者模式,这样当其他客户端向该频道发布了消息时,订阅了该频道的客户端以及订阅了和该频道匹配模式的客户端就可以收到。 [a-z]t模式 publish "news.it" "hello" //向news.it频道推送消息,此时订阅该频道以及匹配模式的客户端都可以收到消息 二、频道的订阅和退订 1.频道订阅 在Redis 一个pubsub_channels 词典的示意图如下: 2.频道退订 UNSUBSCRIBE 命令的行为和 SUBSCRIBE 命令的行为正好相反,当一个客户端退订某个或某些频道的时候, 服务器将从 # 三、模式的订阅和退订 ## 1.频道订阅 在Redis服务端结构体RedisServer中的pubsub_patterns链表里面记录了所有模式的订阅关系,其中每一个链表节点都是pubsubPattern
2)内存使用达到maxmeory上限时触发内存溢出的控制策略: 当Redis所用内存达到maxmeory上限时,会触发相应的溢出控制策略。 2、内存使用达到maxmeory上限时触发内存溢出的控制策略: redis为了更好地实现这个功能,必须为不同的应用场景提供不同的策略,内存淘汰策略讲的是为实现内存淘汰我们具体怎么做,要解决的问题包括淘汰键空间如何选择 ht是一个包含两个项的数组,每项都指向一个dictht结构,这也是Redis的哈希会有1个dict、2个dictht结构的原因。 2. String 和 数字: 如果是整型/长整型,Redis会使用int类型(8字节)存储来代替字符串,可以节省更多空间。因此在可以使用长整型/整型代替字符串的场景下,尽量使用长整型/整型。 2、其次最好设置下redis.conf中的maxmemory选项,该选项是告诉Redis当使用了多少物理内存后就开始拒绝后续的写入请求,该参数能很好的保护好你的Redis不会因为使用了过多的物理内存而导致
mongoose的介绍及使用 参考之前文章:点击这里 koa2简介 Koa 是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小、 koa2安装及使用 打开cmd输入 npm install -g koa generator 安装好插件 创建项目 koa2 -e koa2-learn 启动项目 cd koa2-learn 通过Set get指令查看是否成功 安装中间件 cnpm i koa-generic-session koa-redis 即可以在koa2项目中使用redis mongoose、koa2 案例中使用mongodb数据库,koa2基本框架实现了对数据库的增删改查操作,使用redis实现了简单页面访问次数统计 测试接口的方法 使用shell操作的curl -d 命令 * 前提是使用shell 的简单使用:参考地址
我们都知道redis 也有发布订阅模式, 但是使用的比较少。 并且redis的发布订阅不会持久化落入磁盘。总的来说就是不可靠。 但是在一些场景我们还是会用到的。 1,首先我们要引入 dataRedis 的jar包, 在配置消息的监听器, 指定监听的topic , 这里的topic 可以使用* 通配符 和? 来全量匹配和模糊匹配。 2, 注册完监听器之后,在监听自己的适配器,里面监听自己自定义的方法 也可以实现MessageListener, 不需要指定方法。 里面也能获取到topic的名字。 具体代码 application,properties 的配置 # 默认选择零号数据库 spring.redis.database=0 spring.redis.host=127.0.0.1 spring.redis.port 2" ,咱们设置的topic 和发送的topic "test.12" 说明模糊匹配是可以的, 再试一下全量匹配。 把 "test.?2" 变成 test.* 发布的时候置顶两个。 ? ?
想要在Yii2这个PHP框架中很好的使用redis键值存储,那么首先就要推荐yii2-redis这个官方的Github库。 这个库能够很好的帮助我们在Yii2框架中使用redis,它提供缓存,Session以及ActiveRecord模式的支持。 安装yii2-redis库 推荐使用composer安装yii2-redis库,在你的项目根目录执行 php composer.phar require --prefer-dist yiisoft/yii2 yii2框架中使用redis。 示例 简单使用 我们先来看一段最简单的使用redis的代码: $redis = Yii::$app->redis; $key = 'username'; if ($val = $redis->get($
redis具体使用 1.key的操作 除了空格、换行符 \n外,其他的字符基本都可以使用 2.Redis keys 命令 下表给出了与 Redis 键相关的基本命令: 序号 命令及描述 1 DEL 2 DUMP key 序列化给定 key ,并返回被序列化的值。 3 EXISTS key 检查给定 key 是否存在。 4 EXPIRE key seconds 为给定 key 设置过期时间。 java和redis的结合使用 2.9.0 jar 版本下载: jedis-2.9.0.jar 或者导入依赖 <dependency> <groupId>org.springframework.boot List<String> list = jedis.lrange("site-list", 0 ,2); for(int i=0; i<list.size(); i++ = null) { jedisPool.close(); } } } 使用redis Jedis jedis = RedisUtil.getJedis(); System.out.println
缓存 缓存是 Redis 的典型使用场景,其中 Redis 作为缓存层,mysql 作为存储层,绝大部分请求数据都是从 Redis 中获取。 由于 Redis 具有支撑高并发的特性,所以缓存通常能起到加速读写和降低后端压力的作用。 2. 计数器 许多应用都会使用 Redis 作为技术的基础工具,他可以实现快计数,,查询缓存的功能,同事可以异步到其他数据源。 3. 那么我们便可以使用 Redis 的自增命令来实现一个 ID 生成器。 5. 我们可以使用 Redis 分布式锁的概念来进行限速
关于Redis的入门 2:Redis的基本操作在上一篇文章中,我们学习了如何安装并配置Redis。 今天,我们将重点介绍Redis的基本操作,包括如何使用Redis存储和管理数据,以及如何利用Redis的不同数据结构来实现不同的应用需求。 通过这篇文章,你将掌握Redis的核心命令,打下使用Redis的基础。1. Redis的基本数据类型Redis支持多种数据结构,每种数据结构都可以高效地执行不同的操作。 leaderboard 100 150 # 获取分数在100到150之间的元素删除元素: 使用ZREM命令删除有序集合中的元素: ZREM leaderboard "Alice"2. "value2"执行事务: 使用EXEC命令提交事务并执行所有命令: EXEC放弃事务: 使用DISCARD命令取消事务,不执行其中的命令: DISCARD3.
Redis 最显著的特点是: 高性能 支持多种数据结构 持久化能力 分布式特性(主从复制、哨兵模式、集群) 丰富的客户端支持(几乎支持所有主流编程语言) 2. ,现在很少有这样的使用场景,反而是有更加专业的消息中间件来取代 Redis 的功能,不过 Redis 依旧是被使用十分广泛的中间件 Redis VS MySQL 不可否认,MySQL 确实是一个很不错的数据库软件 示例:SET name "Tom"、GET name 2)Hash(哈希):存储对象,类似 Map。 9)Streams(流):Redis 5.0 引入的消息队列结构,支持消息持久化和消费者组。 2. ,存储大量的数据,需要不少的 硬件资源 的 注意:Redis 当中存储的是全量数据,这里的数据是不可以进丢弃的 2.
,我这里使用的是一个可以运行起来的springboot项目 之前有讲过如何快速创建springboot项目,这里不重复赘述了。 ----库存剩余----1 ----库存剩余----0 可以看到,结果又正常了 使用redis锁的代码 synchronized确实可以解决库存不一致问题,但是,因为线上服务大部分都是多节点部署,两台或者两天以上的服务器 ,代码加synchronized肯定是不好使的 所以这里推荐使用redis锁 redis锁的优势 redis锁基于redis实现 数据存储在内存,操作较快 redis是单线程,安全 修改后的代码 使用setIfAbsent ,大脑无法正常运转,导致本文有点别扭(不是有点,我感觉别扭的很 o(╥﹏╥)o) redis锁主要用作分布式的安全方面,可以通过最后的redis锁测试的结果看出,虽然库存没有减到0,但是安全得到了保障, 每个数,只被用了一次 我这是第一次使用StringRedisTemplate(之前都是使用Jedis),没有踩过太大的坑,所以不敢保障这个redis使用一定正确,但是效果达到了 本文使用的redisUtils
windows 下载 https://github.com/tporadowski/redis/releases 安装启动即可 centos 去地址查找最新的的版本,或者适合自己的 http:// download.redis.io/releases 然后 wget http://download.redis.io/releases/redis-6.2.1.tar.gz 解压 tar zxvf redis-6.2.1.tar.gz 编译 cd redis-6.2.1 make && make install 编辑配置文件 vim redis.conf 启动 redis-server /usr service redis start 简单使用 import redis config = { 'host': '127.0.0.1', 'port': 6379, 'decode_responses ': True } def redis_pool(): pool = redis.ConnectionPool(**config) r = redis.Redis(connection_pool
Redis真是好,其中的键值用起来真心强大啊有木有, 之前的文章讲过搭建了redis集群 那么咋们该如何调用单机版的redis以及集群版的redis来使用缓存服务呢? 先讲讲单机版的,单机版redis安装非常简单,不多说了,直接使用命令: [root@nginx bin]# . 这是配置的redis-cli的连接池 然后定义一个接口,这个接口供两个类实现 一个是单机版,一个是集群版 有人会问为啥要2个类实现,因为redis的单机和集群都是不同的实现方法 一般在开发环境会使用单机版来做测试 没有吧,哈哈 咱们先来建一个通用jedis客户端 (有2个小家伙看不懂最后2个方法什么意思,就加了注释,其实规范点来讲,所有的接口方法都要加注释,而实现类就不需要,但是实现类中的私有方法必须加注释,这是规范 使用资源文件的配置 #real cluster redis01.real.cluster.client.host=192.168.1.193 redis01.real.cluster.client.port
文章目录 前言 一、节点 1.节点启动 2.集群数据结构 3.CLUSTER MEET 命令的实现 二、槽指派 1.记录节点的槽指派信息 2.传播节点的槽指派信息 3.记录集群中所有槽的指派信息 三 节点(运行在集群模式下的 Redis 服务器)会继续使用所有在单机模式中使用的服务器组件,除此之外, 节点会继续使用 redisServer 结构来保存服务器的状态, 使用 redisClient 结构来保存客户端的状态 2.集群数据结构 clusterNode 结构保存了一个节点的当前状态, 比如节点的创建时间, 节点的名字, 节点当前的配置纪元, 节点的 IP 和地址, 等等。 char name[REDIS_CLUSTER_NAMELEN]; // 节点标识 // 使用各种不同的标识值记录节点的角色(比如主节点或者从节点), // 以及节点目前所处的状态 通过向某个集群节点发送cluster addslots命令可以将槽分配给该节点,如下所示: redis>cluster addslots 0 1 2 ......5000 //将槽0-5000分配给客户端连接的服务器节点
文章目录 前言 一、同步实现 1.完整重同步 2.部分重同步 a.复制偏移量 b.复制积压缓冲区 c.服务器运行id 二、复制的完整过程 1.设置主服务器的地址和断开 2.建立套接字连接 3.发送 ping命令 4.身份认证 5.发送端口信息 6.同步 7.命令传播 总结 前言 Redis中用户可以执行slaveof命令让一个服务器去复制另一个服务器,被复制的服务器称为主服务器,另一个服务器称为从服务器 例如服务器127.0.0.1:6379从服务器127.0.0.1:12345复制内容的命令如下所示: 127.0.0.1:6379>slaveof 127.0.0.1:12345 redis复制分为两步实现 1.完整重同步 在从服务器首次复制主服务器或者从服务器和主服务器数据相差过多时,redis采用完整重同步。 同时,从服务器也会以每秒一次的频率向主服务器发送心跳命令,进行心跳检测,防止连接断开或者命令丢失。 总结 本文对redis的复制内容进行了简要介绍,如有不当,请指正。
这一篇,我们来使用redis进行数据存储。 RedisTemplate的increment来保证操作的原子性。 由于使用了RedisTemplate,需要先配置一下。 接口填充为redis @Resource(name = "redis") private GoodInfoService service; 其他的不用变,直接运行即可。 可以看到redis同样完成了抢购资格的分配。
总结go-redis和redigo底层是通过调用的万能 Do 方法实现, 但是redigo:由于输入是万能类型所以必须记住每个命令的参数和返回值情况, 使用起来非常的不友好,参数类型是万能类型导致在编译阶段无法检查参数类型 ,每个命令都需要花时间记录使用方法,参数个数等,使用成本高;go-redis:细化了每个redis每个命令的功能, 我们只需记住命令,具体的用法直接查看接口的申请就可以了,使用成本低;其次它对数据类型按照 Do函数万能参数可以实现所有的功能,但是使用起来非常的不友好,参数类型是万能类型,所以在编译阶段无法检查参数类型, 其次每个命令都需要花时间记录使用方法,参数个数等,使用成本高;演示演示基本的连接池建立 ,具体的用法直接查看接口的申请就可以了,使用成本低;其次它对数据类型按照redis底层的类型进行统一,编译时就可以帮助检查参数类型, 并且它的响应统一采用 Result 的接口返回,确保了返回参数类型的正确性 :6379") }, } var rdb = redis2.NewClient( &redis2.Options{ Addr: "localhost
、集合键或者有序集合键的值进行排序,如下所示: //列表排序 redis>rpush nums 3 1 2 redis>lrange nums 0 -1 3 1 2 redis>sort nums 1 2 3 //集合排序,alpha表示按照字母顺序排序 redis>sadd str aaa bbb ccc redis>smembers str bbb aaa ccc //集合元素是无序的 redis >sort str alpha aaa bbb ccc //排序后的集合元素 //sort by使用 redis>zadd grade 99 wyl 97 wyq 96 sjx redis>zrange // 排序带有 BY 选项的字符串值时使用 robj *cmpobj; } u; } redisSortObject; 2.sort key命令实现 sort key命令可以对一个包含数值的 4.by选项实现 默认情况下sort命令使用被排序的键的值进行排序,但是使用by选项后,可以让它按照其他字符串键的值进行排序。