18-1 字符串的一些基本命令

18-1 :配置Spring关于Redis字符串的运行环境

    <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig"><property name="maxIdle" value="50"></property><property name="maxTotal" value="100"></property><property name="maxWaitMillis" value="20000"></property></bean><bean id="stringRedisSerializer" class="org.springframework.data.redis.serializer.StringRedisSerializer"></bean><bean id="connectionFactory"class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"><property name="hostName" value="localhost"></property><property name="port" value="6379"></property><property name="poolConfig" ref="poolConfig"></property></bean><bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"><property name="connectionFactory" ref="connectionFactory"></property><property name="defaultSerializer" ref="stringRedisSerializer"></property><property name="keySerializer"  ref="stringRedisSerializer"></property><property name="valueSerializer" ref="stringRedisSerializer"></property></bean>

18-2 Redis支持的简单运算

      图18-3  操作浮点数和整数

18-2  使用Spring测试Redis字符串操作

            public static void testString(){ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");RedisTemplate redisTemplate = applicationContext.getBean(RedisTemplate.class);//  设值redisTemplate.opsForValue().set("key1", "value1");redisTemplate.opsForValue().set("key2", "value2");//  通过key获取值String value1 = (String) redisTemplate.opsForValue().get("key1");System.out.println(value1);//  通过key删除值redisTemplate.delete("key1");//  求长度Long length = redisTemplate.opsForValue().size("key2");System.out.println(length);//  设值新值并返回旧值String oldValue2 = (String) redisTemplate.opsForValue().getAndSet("key2", "new_value2");System.out.println(oldValue2);// 通过key获取值String value2 = (String) redisTemplate.opsForValue().get("key2");System.out.println(value2);// 求子串String rangeValue2 = redisTemplate.opsForValue().get("key2", 0, 3);System.out.println(rangeValue2);// 追加字符串到末尾,返回新串长度int newLen = redisTemplate.opsForValue().append("key2", "_app");System.out.println(newLen);String appendValue2 = (String) redisTemplate.opsForValue().get("key2");System.out.println(appendValue2);}

18-3 使用Spring测试Redis运算

            /*** 测试Redis运算.*/public static void testCal(){ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");RedisTemplate redisTemplate = applicationContext.getBean(RedisTemplate.class);redisTemplate.opsForValue().set("i", "9");printCurrValue(redisTemplate, "i");                redisTemplate.opsForValue().increment("i", 1);printCurrValue(redisTemplate, "i");redisTemplate.getConnectionFactory().getConnection().decr(redisTemplate.getKeySerializer().serialize("i"));printCurrValue(redisTemplate, "i");redisTemplate.getConnectionFactory().getConnection().decrBy(redisTemplate.getKeySerializer().serialize("i"), 6);printCurrValue(redisTemplate, "i");redisTemplate.opsForValue().increment("i", 2.3);printCurrValue(redisTemplate, "i");           }/*** 打印当前key的值* * @param redisTemplate*            spring RedisTemplate* @param key键*/public static void printCurrValue(RedisTemplate redisTemplate, String key){String i = (String) redisTemplate.opsForValue().get(key);System.err.print(i+"/");}

所有关于减法的方法,原有值都必须是整数,否则就会引发异常

18-4 通过操作浮点数减法产生异常

            public static void testCal(){ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");RedisTemplate redisTemplate = applicationContext.getBean(RedisTemplate.class);redisTemplate.opsForValue().set("i", "9");printCurrValue(redisTemplate, "i");                redisTemplate.opsForValue().increment("i", 1);printCurrValue(redisTemplate, "i");redisTemplate.getConnectionFactory().getConnection().decr(redisTemplate.getKeySerializer().serialize("i"));printCurrValue(redisTemplate, "i");redisTemplate.getConnectionFactory().getConnection().decrBy(redisTemplate.getKeySerializer().serialize("i"), 6);printCurrValue(redisTemplate, "i");redisTemplate.opsForValue().increment("i", 2.3);printCurrValue(redisTemplate, "i");redisTemplate.opsForValue().set("i", "8.9");redisTemplate.getConnectionFactory().getConnection().decr(redisTemplate.getKeySerializer().serialize("i"));printCurrValue(redisTemplate, "i");}

图18-4 使用Redis命令保存角色对象

图18-5 Redis的hash结构命令展示

18-5 修改默认的序列化器为字符串序列化

18-6 使用Spring操作hash结构

  public static void testRedisHash(){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 valuesList = redisTemplate.opsForHash().values(key);// 相当于hkeys命令Set keyList = redisTemplate.opsForHash().keys(key);List<String> fieldList = new ArrayList<String>();fieldList.add("f1");fieldList.add("f2");//  相当于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);}private static void printValueForhash(RedisTemplate redisTemplate,String key,String field){// 相当于hget命令Object value = redisTemplate.opsForHash().get(key, field);System.out.println(value);}

18-3 Redis数据结构——链表(linked-list)

   图18-8 Redis关于链表的操作命令

   图18-9 Redis链表阻塞操作命令

18-7 :通过Spring操作Redis的链表结构

    public static void testList(){ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");RedisTemplate redisTemplate = applicationContext.getBean(RedisTemplate.class);try {//  删除链表,以便我们可以反复测试redisTemplate.delete("list");//  把node3插入链表listredisTemplate.opsForList().leftPush("list", "node3");List<String> nodeList = new ArrayList<String>();for (int i = 0; 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");// 注意,需要使用更为底层的命令才能操作insert命令// 使用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 e) {// TODO Auto-generated catch block
            e.printStackTrace();}//打印链表数据printList(redisTemplate, "list");} 

    public static void printList(RedisTemplate redisTemplate, String key){// 链表长度Long size = redisTemplate.opsForList().size(key);// 获取整个链表的值List valueList = redisTemplate.opsForList().range(key, 0, size);// 打印
        System.out.println(valueList);}

18-8 Spring对Redis阻塞命令的操作

    public static void testBList() {ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");RedisTemplate redisTemplate = applicationContext.getBean(RedisTemplate.class);// 清空数据,可以重复测试redisTemplate.delete("list1");redisTemplate.delete("list2");// 初始化链表list1List<String> nodeList = new ArrayList<String>();for (int i = 1; i <= 5; i++) {nodeList.add("node" + i);}redisTemplate.opsForList().leftPushAll("list1", nodeList);// Spring使用参数超时时间作为阻塞命令区分,等价于blpop命令,并且可以设置时间参数redisTemplate.opsForList().leftPop("list1", 1, TimeUnit.SECONDS);// Spring使用参数超时时间作为阻塞命令区分,等价于brpop命令,并且可以设置时间参数redisTemplate.opsForList().rightPop("list1", 1, TimeUnit.SECONDS);nodeList.clear();// 初始化链表list2for (int i = 1; i <= 3; i++) {nodeList.add("data" +  i);}redisTemplate.opsForList().leftPushAll("list2", nodeList);// 相当于rpoplpush命令,弹出list1最右边的节点,插入到list2最左边redisTemplate.opsForList().rightPopAndLeftPush("list1", "list2");// 相当于brpoplpush命令,注意在Spring中使用超时参数区分redisTemplate.opsForList().rightPopAndLeftPush("list1", "list2", 1, TimeUnit.SECONDS);// 打印链表数据printList(redisTemplate, "list1");printList(redisTemplate, "list2");}

18.4 Redis数据结构——集合

          图18-10 通过命令行客户端演示这些命令

           图18-11 交集、并集和差集保存命令的用法

18.5 Redis数据结构——有序集合

转载于:https://www.cnblogs.com/ZHONGZHENHUA/p/8116396.html

第18章 Redis数据结构常用命令相关推荐

  1. redis 自减命令_Redis 实战 —— 04. Redis 数据结构常用命令简介

    字符串 P39 Redis 的字符串是一个有字节组成的序列,可以存储以下 3 种类型的值:字节串(byte string).整数.浮点数. 在需要的时候, Redis 会将整数转换成浮点数.整数的取值 ...

  2. Redis 中常用命令

    Redis 中常用命令 keys 返回满足给定 pattern 的所有 key. 127.0.0.1:6379> keys *1) "name2"2) "myzse ...

  3. Redis初学:4(Redis的常用命令)

    Redis的常用命令 查看所有key keys * 如下图: 插入key set key value 如下图: 取出key对应的value值 get key 如下图: 查看某个key是否存在 exis ...

  4. Linux下安装redis以及常用命令

    https://blog.csdn.net/zgf19930504/article/details/51850594 安装: 1.获取redis资源 wget http://download.redi ...

  5. 2、Redis的常用命令

    一.Redis的全局命令操作 1.查看所有键 keys * -- 也可以模糊搜索查询,但一般不推存 keys s* 2.查看键总数 dbsize 3.检查键是否存在 exists key 4.删除键, ...

  6. 05_NoSQL数据库之Redis数据库:Redis的常用命令,键值相关命令和服务器相关命令

     Redis常用命令 Redis提供了丰富的命令对数据库和各种数据库类型进行操作,这些命令可以再Linux终端使用. 键值相关命令: Keys:返回满足给定pattern的所有key 用表达式*表 ...

  7. Redis 的常用命令

    文章目录 1. Redis 数据结构 2. Redis 通用命令 3. String 类型 4. Hash 类型 5. List 类型 6. Set 类型 7. SortedSet 类型 1. Red ...

  8. un7.28:redis客户端常用命令。

    安装完成Redis,我们就可以操作Redis,实现数据的CRUD(增删改查)了.这需要用到Redis客户端常用的一些命令,我给大家分享最常用的一些. 一.Redis命令行客户端 1.输入命令进入,命令 ...

  9. 【CentOS7安装Redis及常用命令】

    目录 一. 背景 二. 安装gcc依赖 三. 下载Redis 3.1 下载方式1:官网下载redis 3.2 下载方式2:wget获取redis 四. 安装 五. 启动 5.1 前台启动(不推荐) 5 ...

最新文章

  1. TechED 2005 博客园兄弟合影
  2. JavaEE 的基本实现
  3. 基础知识的学习,来自十年程序员的经验分享
  4. can not open include file afxwin.h :no such header fileor directory in vs 2015 c++
  5. 与Spring的计划任务一起按时运行
  6. 九度OJ 1547 动态规划
  7. 第一批90后已经30岁了,更扎心的是…
  8. 具有数据库依赖性的.NET Core应用程序的集成测试
  9. 这次看到源码了,华为开源了方舟编译器
  10. Tree树结构java实现
  11. [转载]在instagram上面如何利用电脑来上传图片
  12. ENVI入门系列教程---一、数据预处理---8.图像裁剪
  13. java咖啡机 加入清洗剂_给大家清洗咖啡机的几条建议 尽量选用专业的除垢剂进行清洗...
  14. pdf pmp书籍第六版_PMP项目管理 第六版 (带目录完整高清版).pdf
  15. 前端入门: 用css设置文字样式
  16. Setup Factory 安装程序的图标
  17. 89c52如何控制ad9833输出正弦波,三角波,方波。
  18. Mysql计算同比环比(超详细)
  19. 睁开双眼玩立体游戏 3D显示技术解析
  20. STM32 调整重启电压阈值 BOR

热门文章

  1. anaconda python_Anaconda下Python环境下载及安装
  2. Xopsed的编译与安装
  3. 常见List面试问题
  4. Python基础===使用virtualenv创建一个新的运行环境
  5. 江湖救急!磁盘数据大救星TestDisk
  6. android 固定大小取图片缩略图
  7. python数据分析第一步:读取以及查看数据
  8. Apache从入门到精通
  9. Ubuntu Linux服务器安装HBase
  10. C语言程序项目计划书,(C语言程序设计课程设计计划书.doc