Java使用Redis初探
Redis的相关概念不做介绍了,大家也可以先了解下Memcached,然后比较下二者的区别,就会有个整体的印象。 服务器端通常选择Linux , Redis对于linux是官方支持的,使用资料很多,需要下载相关服务器端程序 ,然后解压安装。因为能力和条件有限,我只简单介绍下
Redis的相关概念不做介绍了,大家也可以先了解下Memcached,然后比较下二者的区别,就会有个整体的印象。
服务器端通常选择Linux , Redis对于linux是官方支持的,使用资料很多,需要下载相关服务器端程序 ,然后解压安装。因为能力和条件有限,我只简单介绍下windows上如何安装和使用,有兴趣的可以娱乐一下。
服务器端程序下载地址:https://github.com/ServiceStack/redis-windows.git
如果不好操作的话到这来:http://download.csdn.net/detail/u013283727/8212831下载完后使用cmd进入下载文件的目录中,尝试以下操作:
Microsoft Windows [Version 6.1.7601] Copyright (c) 2009 Microsoft Corporation. All rights reserved. C:\>cd redis64-latest C:\redis64-latest>redis-server redis.windows.conf --maxmemory 200m _._ _.-``__ ''-._ _.-`` `. `_. ''-._ Redis 2.8.17 (00000000/0) 64 bit .-`` .-```. ```\/ _.,_ ''-._ ( ' , .-` | `, ) Running in stand alone mode |`-._`-...-` __...-.``-._|'` _.-'| Port: 6379 | `-._ `._ / _.-' | PID: 4552 `-._ `-._ `-./ _.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | http://redis.io `-._ `-._`-.__.-'_.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | `-._ `-._`-.__.-'_.-' _.-' `-._ `-.__.-' _.-' `-._ _.-' `-.__.-' [4552] 01 Dec 13:38:53.147 # Server started, Redis version 2.8.17 [4552] 01 Dec 13:38:53.147 * DB loaded from disk: 0.000 seconds [4552] 01 Dec 13:38:53.147 * The server is now ready to accept connections on po rt 6379
客户端使用java程序来连接,在这里介绍两种常用的方法
(Jar包直接找maven要:http://www.mvnrepository.com 一搜就出来了)1.Redisson
/** * @author fcs * Redisson Example */ public class RedissonTest { public static void main(String[] args) { //1.初始化 Config config = new Config(); config.setConnectionPoolSize(10); config.addAddress("127.0.0.1:6379"); Redisson redisson = Redisson.create(config); System.out.println("redis连接接成功。。。。。"); //2.测试concurrentMap,put时候就会同步到redis中 ConcurrentMap<String, String> map = redisson.getMap("firstMap"); map.put("changshengfeng", "男"); map.put("yongtaoliu", "男"); map.put("qiaozhu", "女"); ConcurrentMap resultMap = redisson.getMap("firstMap"); System.out.println("resultMap == "+resultMap.keySet()); //关闭连接 redisson.shutdown(); } }
2.Jedis
/** * @author fcs * test about jedis * Dec 1, 2014 */ public class JedisTest { private static Jedis jedis; @Before public void setup(){ jedis = new Jedis("127.0.0.1", 6379); System.out.println("Redis服务器已连接...."); // jedis.auth("admin"); //权限验证 } /** * redis 存储字符串 */ @Test public void testString(){ //添加数据 jedis.set("name", "fcs"); System.out.println(jedis.get("name"));//获取结果 jedis.append("name", "is handsome");//拼接 jedis.del("name");//删除某个键 System.out.println(jedis.get("name")); jedis.mset("name","changsheng","age","22","qq","646653132");//设置多个键值对 jedis.incr("age");//加1操作 在投票中可能用的上 System.out.println(jedis.get("name")+"--"+jedis.get("age")+"--"+jedis.get("qq")); } /** * 操作List */ @Test public void testList(){ jedis.del("java framework"); System.out.println(jedis.lrange("java framework", 0, -1)); //先向key java framework存放三条数据 jedis.lpush("java framework", "spring"); jedis.lpush("java framework", "struts"); jedis.lpush("java framework", "hibernate"); //再取出所有数据jedis.lrange是按范围取出 第一个是key 第二个是其实位置 第三个是结束位置 System.out.println(jedis.lrange("java framework", 0, -1)); jedis.del("java framework"); jedis.rpush("java framework", "spring"); jedis.rpush("java framework", "struts"); jedis.rpush("java framework", "hibernate"); //再取出所有数据jedis.lrange是按范围取出 第一个是key 第二个是其实位置 第三个是结束位置 System.out.println(jedis.lrange("java framework", 0, -1)); } /** * 操作Set */ @Test public void testSet(){ jedis.sadd("haha", "why"); jedis.sadd("haha", "you"); jedis.sadd("haha", "so"); jedis.sadd("haha", "diao"); jedis.sadd("haha", "?"); //移除 jedis.srem("haha", "?"); System.out.println("判断?是不是haha集合的元素:"+jedis.sismember("haha", "?")); System.out.println("获取所有加入的value:"+jedis.smembers("haha")); System.out.println("返回给定集合名的一个随机的value:"+jedis.srandmember("haha")); System.out.println("返回集合的元素个数:"+jedis.scard("haha")); } /** * redis 操作map */ @Test public void testmap(){ Map<String,String> map = new HashMap<String, String>(); map.put("name", "小露"); map.put("sex", "男"); map.put("email", "haha@fcs.com"); jedis.hmset("user", map);//相当于给map再取一个名字 List<String> rsmap = jedis.hmget("user", "name","sex");//后面是一个可变参数列表 去某个map中的一些key代表的值 System.out.println(rsmap); //删除map中的某个键值 jedis.hdel("user", "email"); System.out.println("删除后----email"+jedis.hmget("user", "email")); System.out.println("是否存在key为user的记录:"+jedis.exists("user")); System.out.println("key为user的map中存放的值的个数:"+jedis.hlen("user")); System.out.println("返回map对象中所有的key:"+jedis.hkeys("user")); System.out.println("返回map对象中所有的value:"+jedis.hvals("user")); //使用迭代器 Iterator<String> iter = jedis.hkeys("user").iterator(); System.out.println("***************使用迭代器***************"); while(iter.hasNext()){ String key = iter.next();//每次向后越过一个对象 System.out.println(key+":"+jedis.hmget("user", key));//迭代key 根据key再取值value } } /** * 这里在前面执行完之后直接再去拿值 试试这些进驻内存的数据是否还在 * 可以把服务器端关掉再重启 再直接运行这个方法看看 * 如果还有数据就说明该数据库自动完成了持久化 它有默认的持久化机制 */ @Test public void testNoSet(){ Iterator<String> iter = jedis.hkeys("user").iterator(); System.out.println("***************使用迭代器***************"); while(iter.hasNext()){ String key = iter.next();//每次向后越过一个对象 System.out.println(key+":"+jedis.hmget("user", key));//迭代key 根据key再取值value } } // @AfterClass 测试整个类时可以用 会关闭服务器端程序 // public static void close(){ // jedis.shutdown();//不能用@After 不然每次执行完一个方法都会关闭服务器 // System.out.println("连接已关闭....."); // } }
这时候可以看到cmd中有一些日志记录:(这就是它默认的持久化机制,可以在redis.windows.conf配置文件中查看)
[3972] 01 Dec 13:59:04.073 * 1 changes in 900 seconds. Saving... [3972] 01 Dec 13:59:04.229 # fork operation complete [3972] 01 Dec 13:59:04.229 * Background saving terminated with success [3972] 01 Dec 14:20:05.127 * 1 changes in 900 seconds. Saving... [3972] 01 Dec 14:20:05.267 # fork operation complete [3972] 01 Dec 14:20:05.267 * Background saving terminated with success [3972] 01 Dec 14:35:06.074 * 1 changes in 900 seconds. Saving... [3972] 01 Dec 14:35:06.204 # fork operation complete [3972] 01 Dec 14:35:06.224 * Background saving terminated with success

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

PHP和Python各有优势,选择应基于项目需求。1.PHP适合web开发,语法简单,执行效率高。2.Python适用于数据科学和机器学习,语法简洁,库丰富。

Redis集群模式通过分片将Redis实例部署到多个服务器,提高可扩展性和可用性。搭建步骤如下:创建奇数个Redis实例,端口不同;创建3个sentinel实例,监控Redis实例并进行故障转移;配置sentinel配置文件,添加监控Redis实例信息和故障转移设置;配置Redis实例配置文件,启用集群模式并指定集群信息文件路径;创建nodes.conf文件,包含各Redis实例的信息;启动集群,执行create命令创建集群并指定副本数量;登录集群执行CLUSTER INFO命令验证集群状态;使

Redis 使用哈希表存储数据,支持字符串、列表、哈希表、集合和有序集合等数据结构。Redis 通过快照 (RDB) 和追加只写 (AOF) 机制持久化数据。Redis 使用主从复制来提高数据可用性。Redis 使用单线程事件循环处理连接和命令,保证数据原子性和一致性。Redis 为键设置过期时间,并使用 lazy 删除机制删除过期键。

解决redis-server找不到问题的步骤:检查安装,确保已正确安装Redis;设置环境变量REDIS_HOST和REDIS_PORT;启动Redis服务器redis-server;检查服务器是否运行redis-cli ping。

要查看 Redis 中的所有键,共有三种方法:使用 KEYS 命令返回所有匹配指定模式的键;使用 SCAN 命令迭代键并返回一组键;使用 INFO 命令获取键的总数。

理解 Redis 源码的最佳方法是逐步进行:熟悉 Redis 基础知识。选择一个特定的模块或功能作为起点。从模块或功能的入口点开始,逐行查看代码。通过函数调用链查看代码。熟悉 Redis 使用的底层数据结构。识别 Redis 使用的算法。

使用 Redis 指令需要以下步骤:打开 Redis 客户端。输入指令(动词 键 值)。提供所需参数(因指令而异)。按 Enter 执行指令。Redis 返回响应,指示操作结果(通常为 OK 或 -ERR)。

H5开发需要掌握的工具和框架包括Vue.js、React和Webpack。1.Vue.js适用于构建用户界面,支持组件化开发。2.React通过虚拟DOM优化页面渲染,适合复杂应用。3.Webpack用于模块打包,优化资源加载。
