RedisTemplate

如果想要在java中使用Redis相关的数据结构,要先注入RedisTemplate。

    @Autowired
private RedisTemplate<K,V> redisTemplate;

其中K,V类型,可以使用具体的类型,比如String或者其他具体类。

    @Autowired
private RedisTemplate<String,Integer> redisTemplate;

StringRedisTemplate

如果key和value都是String类型的,直接用StringRedisTemplate 。

    @Autowired
private StringRedisTemplate stringRedisTemplate;

List(队列)

Redis队列通过redisTemplate.opsForList()来操作。

常用api如下:

redisTemplate.opsForList().rightPush(K  key ,V  value);  //表示从队列的右侧放入新的值 ,其中key为队列名,value为入列的值

redisTemplate.opsForList().leftPop(K  key);            //取出队列最右侧的值

redisTemplate.opsForList().range(K key, long start, long end);         //遍历队列

示例如下:

从队列的最右侧放入新的数据。从队列的最左侧取出已有的数据。

@Autowired
private StringRedisTemplate stringRedisTemplate; redisTemplate.opsForList().rightPush("list","python"); redisTemplate.opsForList().leftPop("list");

Hash(散列)

Redis的散列可以让将多个键值对存储到一个Redis键里面。

常用api:

void put(H key, HK hashKey, HV value);      //设置散列hashKey的值
HV get(H key, Object hashKey); //从键中的哈希获取给定hashKey的值。返回类型HV表示HashValue
Set<HK> keys(H key); //获取key所对应的散列表的key
Set<K> keys(K pattern) ; //按照给定的pattern查找key。*表示所有的key,关键字加*表示模糊查询,比如user*表示所有带user的key。
Long increment(H key, HK hashKey, long delta); //通过给定的delta增加散列hashKey的值(整型)
Boolean hasKey(H key, Object hashKey); //确定哈希hashKey是否存在
Long size(H key); //获取key所对应的散列表的大小个数
Cursor<Map.Entry<HK, HV>> scan(H key, ScanOptions options); //使用Cursor在key的hash中迭代,相当于迭代器。

示例如下:

1.通过Hash存储某个用户数据。

redisTemplate.opsForHash().put("user2","name","tom");
redisTemplate.opsForHash().put("user2","age",26);
redisTemplate.opsForHash().put("user2","sex","male");

2.获取用户数据的所有字段。

System.out.println(redisTemplate.opsForHash().keys("user2"));
//redisHash1所对应的散列表为{age=26, name=jack, sex=male}
结果:[name, sex, age]

3.获取某个用户的年龄:

String age=redisTemplate.opsForHash().get("user2","age")

4.获取所有所有key包含user的数据。

通过keys(pattern)方式查找key,以下的pattern为user加上*表示所有包含user的key。

Set<String> setKeys = stringRedisTemplate.keys("user"+"*");
List<Object> list = new ArrayList<>();
for(String key:setKeys) {
//取出所有数据
List<Object> hashList = stringRedisTemplate.opsForHash().values(key);
for(int i=0;i<hashList.size();i++) {
Object object=hashList.get(i);
}
}

5.使用Cursor遍历:

使用:Cursor<Map.Entry<Object, Object>> curosr = template.opsForHash().scan("user2", ScanOptions.ScanOptions.NONE);
while(curosr.hasNext()){
Map.Entry<Object, Object> entry = curosr.next();
System.out.println(entry.getKey()+":"+entry.getValue());
}
结果:
age:26
name:tom
male:sex

Set(无序集合)

Redis的Set是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。

Redis 中 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。

常用api如下:

Long add(K key, V... values);
Long remove(K key, Object... values);
Cursor<V> scan(K key, ScanOptions options); //遍历set

ZSET(有序集合)

ZSet是有序的集合,且不允许重复的成员。

Long rank(K key, Object o);   //返回有序集中指定成员的排名,其中有序集成员按分数值递增(从小到大)顺序排列

更详细的讲解请见:

https://www.jianshu.com/p/7bf5dc61ca06

Redis代码示例的更多相关文章

  1. 阿里云PHP Redis代码示例

    测试代码示例 <?php /* 这里替换为连接的实例host和port */ $host = "localhost"; $port = 6379; /* 这里替换为实例id和 ...

  2. 实战SpringCloud响应式微服务系列教程(第十章)响应式RESTful服务完整代码示例

    本文为实战SpringCloud响应式微服务系列教程第十章,本章给出响应式RESTful服务完整代码示例.建议没有之前基础的童鞋,先看之前的章节,章节目录放在文末. 1.搭建响应式RESTful服务. ...

  3. 用户自定义协议client/server代码示例

    用户自定义协议client/server代码示例 代码参考链接:https://github.com/sogou/workflow message.h message.cc server.cc cli ...

  4. 高级渲染技巧和代码示例 GPU Pro 7

    下载代码示例 移动设备正呈现着像素越来越高,屏幕尺寸越来越小的发展趋势. 由于像素着色的能耗非常大,因此 DPI 的增加以及移动设备固有的功耗受限环境为降低像素着色成本带来了巨大的压力. MSAA 有 ...

  5. Java8-Function使用及Groovy闭包的代码示例

    导航 定位 概述 代码示例 Java-Function Groovy闭包 定位 本文适用于想要了解Java8 Function接口编程及闭包表达式的筒鞋. 概述 在实际开发中,常常遇到使用模板模式的场 ...

  6. [IOS 开发] 懒加载 (延迟加载) 的基本方式,好处,代码示例

    懒加载的好处: 1> 不必将创建对象的代码全部写在viewDidLoad方法中,代码的可读性更强 2> 每个属性的getter方法中分别负责各自的实例化处理,代码彼此之间的独立性强,松耦合 ...

  7. SELECT控件操作的JS代码示例

    SELECT控件操作的JS代码示例 1 检测是否有选中 if(objSelect.selectedIndex > -1) { //说明选中 } else { //说明没有选中 } 2.动态创建s ...

  8. 转:HIBERNATE一些_方法_@注解_代码示例---写的非常好

    HIBERNATE一些_方法_@注解_代码示例操作数据库7步骤 : 1 创建一个SessionFactory对象 2 创建Session对象 3 开启事务Transaction : hibernate ...

  9. Python实现各种排序算法的代码示例总结

    Python实现各种排序算法的代码示例总结 作者:Donald Knuth 字体:[增加 减小] 类型:转载 时间:2015-12-11我要评论 这篇文章主要介绍了Python实现各种排序算法的代码示 ...

随机推荐

  1. JS构造函数new的过程

    造函数其实和普通函数本质上并无区别,唯一的区别有两个: 函数首字母大写,这个区别只是约定俗成的,便于区分.你实在要小写定义构造函数也完全没问题,所以这个区别可以忽略. 构造函数的调用需要用new操作符 ...

  2. JS实现重载

    在js中,我们实现重载常用的方式有: 1.根据传入参数的类型执行不同的操作. 2.利用参数中特殊的参数值进行不同的操作. 3.根据参数的个数进行重载. 这里对第三种重载方式的实现进行说明. 实现第三种 ...

  3. Vue学习之npm常用命令及参数小结(十四)

    NPM几个常用命令和参数的意思: npm install packagename 安装模块如不指定版本号 默认会安装最新的版本 npm install packagename 0.0.1 安装指定版本 ...

  4. 《区块链DAPP开发入门、代码实现、场景应用》笔记2——Solidity实现简单的智能合约

    本节仅以一个简单的智能合约示例,介绍智能合约的基本组成元素,本合约定义一个uint类型的变量,以及对应这个变量的读写函数. 01 pragma solidity >=0.4.0 <0.6. ...

  5. unity 实现技能释放

    要实现技能释放其实很简单,说白了就是在指定的位置Instantiate一个对应的例子特效.我走的弯路主要在寻找这个指定位置上. 对于指向性技能就不多说了,因为是有确切目标的(当然首先判断下技能能不能对 ...

  6. Java多线程 常见问题整理

    线程 什么是线程 线程是指程序在执行过程中,能够执行程序代码的一个执行单元. 线程和进程的区别 线程:一段程序执行过程中的一个执行单元,各个线程之间共享程序的内存空间以及一些进程级的资源,各线程拥有自 ...

  7. Python学习日记(三十五) Mysql数据库篇 三

    使用Navicate 创建一个连接去使用Mysql的数据库,连接名可以取任意字符但是要有意义 新增一个数据库 填写新数据库名,设置它的字符集和排序规则 新建一个表 增加表中的信息 点击保存再去输入表名 ...

  8. Node: 通过Console打印日志 (Log Message via Console)

    In normal development, we are likely to use 'console.log' for message logging, yet it's simple, we a ...

  9. win下maridb 10.1.8下主从复制配置

    主库配置 server_id=1read-only=0replicate-do-db=mydatalog-bin=mysql-bin 主库权限设置 GRANT replication slave ON ...

  10. 如何使用anaconda安装pygame

    超级方便!!! 打开Anaconda, 输入: pip install pygame 等待下载安装完成. 如图: 显示成功安装: