3.redis数据结构和常用命令(一)

数据类型:

1.string 可以是字符串、整数、浮点数

2.list 它是一个有序的双向链表,使用场景是需要经常插入和删除的数据

3.set 无序且独一无二的string元素集合

4.hash 一个键值对的map无序列表,适合存储对象

5.zset 有序且独一无二的string元素集合集合,元素的排序是根据分值的大小排序

1.hash

1. 一个键值对的map无序列表,适合存储对象

hmset key field1 value1 [field2 value2] : 设置多个键值对

hgetall key :获取所有键值

hkeys key: 获取所有键

hvals key:获取所有键的值

hlen key:获取某个对象的键值对的数量

hexists key filed :判断是否存在field字段

hdel key field1 [field2]:删除某个对象的field1字段

hmget key field1 [field2]:获取键的值

(E:/image/6.png)]

2.在java程序中

		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
		RedisTemplate redisTemplate = applicationContext.getBean(RedisTemplate.class);
		String key = "hash";
		Map<String, String> map = new HashMap<String, String>();
		map.put("f1", "val1");
		map.put("f2", "val2");
		// 相当于hmset命令
		redisTemplate.opsForHash().putAll(key, map);
		
		// 相当于hset命令
		redisTemplate.opsForHash().put(key, "f3", "6");
		printValueForhash(redisTemplate, key, "f3");
		
		// 相当于 hexists key filed命令
		boolean exists = redisTemplate.opsForHash().hasKey(key, "f3");
		System.out.println(exists);
		
		// 相当于hgetall命令
		Map keyValMap = redisTemplate.opsForHash().entries(key);
		
		
		// 相当于hincrby命令
		redisTemplate.opsForHash().increment(key, "f3", 2);
		printValueForhash(redisTemplate, key, "f3");
		
		// 相当于hincrbyfloat命令
		redisTemplate.opsForHash().increment(key, "f3", 0.88);
		printValueForhash(redisTemplate, key, "f3");
		
		// 相当于hvals命令
		List valueList = redisTemplate.opsForHash().values(key);
		
		// 相当于hkeys命令
		Set keyList = redisTemplate.opsForHash().keys(key);		
		
		// 相当于hmget命令
		List valueList2 = redisTemplate.opsForHash().multiGet(key, keyList);
		
		// 相当于hsetnx命令
		boolean success = redisTemplate.opsForHash().putIfAbsent(key, "f4", "val4");
		System.out.println(success);
		
		// 相当于hdel命令
		Long result = redisTemplate.opsForHash().delete(key, "f1", "f2");
		System.out.println(result);
2.List

它是一个有序的双向链表,使用场景是需要经常插入和删除的数据

链表命令分左操作和有操作

lpush key node1 [node2]:将节点插入到链表最左边

rpush key node1 [node2]:将节点插入到链表最右边

lindex key index:读取下标为index的节点

llen key:求链表的节点数

lpop key:删除左边第一个节点并返回

rpop key:删除右边第一个节点并返回

linsert key before|after node new_node:在节点node前后插入新节点new_node

lrange list start end:获取链表list从start下标到end下标的节点值

lrem list count value:从左到右删除小于或等于count个等于value的节点

lset key index node:设置下标为index的节点值为node

ltrim key start stop :只保留从start到stop区间的节点

a

2.java程序中

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
		RedisTemplate redisTemplate = applicationContext.getBean(RedisTemplate.class);
		try {
			// 删除链表,以便我们可以反复测试
			redisTemplate.delete("list");
			
			// 把node3插入链表list
			redisTemplate.opsForList().leftPush("list", "node3");
			List<String> nodeList = new ArrayList<String>();
			for (int i = 2; i >= 1; i--) {
				nodeList.add("node" + i);
			}
			// 相当于lpush把多个价值从左插入链表
			redisTemplate.opsForList().leftPushAll("list", nodeList);
			
			// 从右边插入一个节点
			redisTemplate.opsForList().rightPush("list", "node4");
			
			// 获取下标为0的节点
			String node1 = (String) redisTemplate.opsForList().index("list", 0);
			
			// 获取链表长度
			long size = redisTemplate.opsForList().size("list");
			
			// 从左边弹出一个节点
			String lpop = (String) redisTemplate.opsForList().leftPop("list");
			
			// 从右边弹出一个节点
			String rpop = (String) redisTemplate.opsForList().rightPop("list");
			
			// 注意,需要使用更为底层的命令才能操作linsert命令
			// 使用linsert命令在node2前插入一个节点
			redisTemplate.getConnectionFactory().getConnection().lInsert("list".getBytes("utf-8"),
					RedisListCommands.Position.BEFORE, "node2".getBytes("utf-8"), "before_node".getBytes("utf-8"));
			
			// 使用linsert命令在node2后插入一个节点
			redisTemplate.getConnectionFactory().getConnection().lInsert("list".getBytes("utf-8"),
					RedisListCommands.Position.AFTER, "node2".getBytes("utf-8"), "after_node".getBytes("utf-8"));
			
			// 判断list是否存在,如果存在则从左边插入head节点
			redisTemplate.opsForList().leftPushIfPresent("list", "head");
			// 判断list是否存在,如果存在则从右边插入end节点
			redisTemplate.opsForList().rightPushIfPresent("list", "end");
			
			// 从左到右,或者下标从0到10的节点元素
			List valueList = redisTemplate.opsForList().range("list", 0, 10);
			
			nodeList.clear();
			for (int i = 1; i <= 3; i++) {
				nodeList.add("node");
			}
			// 在链表左边插入三个值为node的节点
			redisTemplate.opsForList().leftPushAll("list", nodeList);
			// 从左到右删除至多三个node节点
			redisTemplate.opsForList().remove("list", 3, "node");
			
			// 给链表下标为0的节点设置新值
			redisTemplate.opsForList().set("list", 0, "new_head_value");
			
		} catch (UnsupportedEncodingException ex) {
			ex.printStackTrace();
		}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值