Redis之数据类型及命令
Redis(REmote DIctionary Server) 是一个遵守BSD协议、支持网络、可基于内存亦可持久化的日志型key-value存储系统。
KEY
常用指令:
|
指令
|
注释
|
备注
|
|
exits key
|
检测指定 key 是否存在
|
1 : 存在,0 : 不存在
|
|
del key1 key2......keyN
|
删除给定 key
|
返回删除 key 的数目,0 表示给定 key 都不存在
|
|
type key
|
返回给定 key 值的类型
|
none : key 不在 string : 字符类型
list : 链表类型 set : 无序集合类型
|
|
keys pattern
|
返回匹配指定模式的所有 key
|
|
|
randomkey
|
随机返回一个 key
|
如果当前数据库是空的,返回空串
|
|
rename oldkey newkey
|
重命名一个 key
|
如果 newkey 已存在,将会被覆盖newkey的值.
|
|
expire key seconds
|
设置key 的过期时间,单位是秒。
|
返回 1 : 成功,0 :key 不存在
|
|
ttl key
|
返回key的剩余过期秒数
|
-1 : key未设置过期时间, -2:key不存在
|
|
persist key
|
清除key的过期时间
|
1 : 成功 0:key不存在或者没有设置过期时间
|
VALUE
Redis 提供五种数据类型:String,Hash,List,Set 及 ZSet。
- String
String 是最基本的类型,而且 String 类型是二进制安全的,意思是 Redis 的 String 可以 包含任何数据。
常用指令:
|
指令
|
注释
|
例子
|
|
set key value
|
存数据
|
set username 'winn'
|
|
get key
|
取数据
|
get username
|
|
mset key1 value1... keyn valuen
|
一次存多个键值对
|
mset uname 'winn' pwd '123'
|
|
mget key1 ... keyn
|
一次取多个值
|
mget uname pwd
|
Java使用:
@Test
public void testString() {
Jedis jedis = new Jedis("localhost");
jedis.set("name","winn");
System.out.println(jedis.get("name"));
//拼接
jedis.append("name", " is my lover");
System.out.println(jedis.get("name"));
jedis.del("name");
System.out.println(jedis.get("name"));
//设置多个键值对
jedis.mset("name","winn","age","27","qq","174754613");
//进行加1操作
jedis.incr("age");
System.out.println(jedis.get("name") + "-" + jedis.get("age") + "-" + jedis.get("qq"));//执行结果:winn-28-174754613
}
- Hash
Hash 是一个 String 类型的 field 和 value 的映射表,最大可以包含(2^32 -1)个键值对。增删操作的时间复杂度为 O(1)。
#配置字段最多 个
hash-max-zipmap-entries #配置 value 最大为 字节
hash-max-zipmap-value
常用指令:
|
指令
|
注释
|
例子
|
|
hmset key field1 value1 ... fieldn valuen
|
存数据
|
hmset user name 'winn' sex 'man'
|
|
hget key
|
取数据
|
hget user name
|
|
hgetall key
|
获取对象
|
|
|
HKEYS key
|
夺取对象中的所有filed
|
|
|
HVALS key
|
夺取对象中的所有value
|
|
@Test
public void testHash(){
Jedis jedis = new Jedis("localhost");
Map<String, String> map = new HashMap<>();
map.put("name", "xinxin");
map.put("age", "22");
map.put("qq", "123456"); jedis.hmset("user",map); List<String> rsmap = jedis.hmget("user", "name", "age", "qq");
System.out.println(rsmap); //删除map中的某个键值
jedis.hdel("user","age");
System.out.println(jedis.hmget("user", "age")); //null //hlen 返回key中的field-value个数
System.out.println(jedis.hlen("user")); //2
//exists 判断key是否存在
System.out.println(jedis.exists("user"));//true
//hkeys 返回所有的field
System.out.println(jedis.hkeys("user"));//[name, qq]
//hvals 返回所有的value
System.out.println(jedis.hvals("user"));//[xinxin, 123456] Iterator<String> iter=jedis.hkeys("user").iterator();
while (iter.hasNext()){
String key = iter.next();
System.out.println(key+":"+jedis.hmget("user",key));
}
}
- List(双向链表类型)
List 是一个链表结构,可以理解为一个每个子元素都是 String 类型的双向链表。主要功能是 push、pop、获取一个范围内的所有值等。
常用指令:
|
指令
|
注释
|
例子
|
|
lpush listName value
|
将value存入list的表头
|
lpush listData demo
|
|
rpush listName value
|
将value存入list的表尾
|
rpush listData demo
|
|
lrange listName startIndex endIndex
|
返回下标在[startIndex, endIndex]中的值
|
lrange listData 0 10
|
Java使用:
public void testList(){
if(jedis.keys("*") != null){
jedis.flushDB();
}
//rpush : 在表尾添加数据
jedis.rpush("db","This","is","redis");
jedis.rpush("db","demo");
//lpush : 在表头添加数据
jedis.lpush("db","Begin : ");
System.out.println(jedis.lrange("db", 0, jedis.llen("db")));
//-1表示最后一个元素
System.out.println(jedis.lrange("db", 0, -1));
//排序 : 排序默认以数字作为对象,值被解释为双精度浮点数,然后进行比较。
//System.out.println(jedis.sort("db"));
}
- Set
|
指令
|
注释
|
例子
|
|
sadd key member
|
将value存入set
|
sadd setData set demo
|
|
smembers key
|
返回key中的数据 |
sembers setData
|
|
sismbers key
|
判断key是否存在 | sismembers setData |
|
SDIFF key1 [key2]
|
返回给定所有集合的差集
|
|
|
SINTER key1 [key2]
|
返回给定所有集合的交集
|
|
|
SUNION key1 [key2]
|
返回所有给定集合的并集
|
|
Java使用:
@Test
public void testSet(){
Jedis jedis = new Jedis("localhost");
//添加
jedis.sadd("user","liuling");
jedis.sadd("user","xinxin");
jedis.sadd("user","ling");
jedis.sadd("user","zhangxinxin");
jedis.sadd("user","who");
//srem : 移除value
jedis.srem("user","who");
System.out.println(jedis.smembers("user"));//获取所有加入的value
System.out.println(jedis.sismember("user", "who"));//判断 who 是否是user集合的元素
System.out.println(jedis.srandmember("user"));//随机返回一个value
System.out.println(jedis.scard("user"));//返回集合的元素个数 jedis.sadd("customer","ling");
jedis.sadd("customer","xinxin");
jedis.sadd("customer","winn");
jedis.sadd("customer","nicole");
jedis.sadd("customer","sam");
//并集
System.out.println(jedis.sunion("user","customer"));
//差集 : 返回user中customer不包含的value
System.out.println(jedis.sdiff("user","customer"));
//交集
System.out.println(jedis.sinter("user","customer"));
}
- ZSet(有序集合类型Sorted Set)
Sorted Set 是有序集合,且不允许重复的成员。它在 Set 的基础上增加了一个顺序属性(score),这一属性在添加修改元素的时候可以指定,每次指定后,会自动重新按新的值调整顺序。
常用指令:
|
指令
|
注释
|
例子
|
|
zadd key score member
|
存数据
|
zset zsetData 0 demo
|
|
zrange key startScore endScore [WITHSCORES]
|
取score在[startScore, endScore]之间的数据
|
zrange zsetData 0 10
|
Java使用:
@Test
public void testZSet(){
Jedis jedis = new Jedis("localhost");
jedis.zadd("user",1,"winn");
jedis.zadd("user",2,"sam");
jedis.zadd("user",5,"nicole");
jedis.zadd("user",4,"roy");
Set<String> user = jedis.zrange("user", 0, -1);
System.out.println(user);
}
补充
- 系统常用指令
|
指令
|
注释
|
备注
|
|
keys name
|
获取指定key
|
keys * 获取所有key
|
|
flushdb
|
清除当前数据库的所有数据
|
|
|
flushall
|
清除所有数据库的所有数据
|
|
|
besize
|
返回数据库中key的数量
|
|
| config set field value | 设置系统参数 | config set maxmemory 100mb |
| config get field | 查看系统参数 | config get maxmemory |
- Java使用Redis事务
/**
* 使用事务
* Redis事务可以理解为一个打包的批量执行脚本,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做。
*
*/
@Test
public void testTrans() {
//开启事务
Transaction tx = jedis.multi();
for (int i = 0; i < 1000; i++) {
tx.set("t" + i, "t" + i);
}
//执行事务
tx.exec();
System.out.println(jedis.get("t100"));
}
- 更多命令,请查看(全集)https://redis.io/commands
Redis之数据类型及命令的更多相关文章
- Redis系列(二):Redis的数据类型及命令操作
原文链接(转载请注明出处):Redis系列(二):Redis的数据类型及命令操作 Redis 中常用命令 Redis 官方的文档是英文版的,当然网上也有大量的中文翻译版,例如:Redis 命令参考.这 ...
- Redis常用数据类型及命令
Redis数据类型 Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合). 注意: 命令的关键词,如set ...
- redis基本数据类型及命令
一.key相关命令 redis本质上是key-value数据库.所以key操作适用于redis的任何数据类型缓存. 1.exists key判断是否存在key,存在返回1,不存在返回0 2.del k ...
- Redis五大数据类型常用命令脑图
- redis常用数据类型与命令
注意:LPUSH 和LPOP按照栈进行操作,RPUSH和RPOP按照队列进行操作 zremrangebyscore key score开始 score结束//根据score删除 zremrangeb ...
- Redis的数据类型及其常用命令
快速入门Redis 首先安装redis: windows下安装redis Linux下安装redis 1. 什么是redis Redis属于nosql(非关系型数据库) 关系型数据库是基于关系表的数据 ...
- 【数据库】Redis(2)--Redis的常用数据类型及命令
1.Redis主要数据类型分类 Redis中存储数据常用的数据类型主要有五种:String.List.Set.Sorted Set.Hash,这五种数据结构在Redis中存储数据的命令掌握对于我们后期 ...
- 大数据学习day31------spark11-------1. Redis的安装和启动,2 redis客户端 3.Redis的数据类型 4. kafka(安装和常用命令)5.kafka java客户端
1. Redis Redis是目前一个非常优秀的key-value存储系统(内存的NoSQL数据库).和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list ...
- 解析Redis操作五大数据类型常用命令
摘要:分享经常用到一些命令和使用场景总结,以及对Redis中五大数据类型如何使用cmd命令行的形式进行操作的方法. 本文分享自华为云社区<Redis操作五大数据类型常用命令解析>,作者:灰 ...
随机推荐
- 【Offer】[32] 【从上到下打印二叉树】
题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 不换行:从上到下打印出二叉树的每个节点,同层的节点按照从左到右的顺序打印.例如,输入下图的二叉树,则依次打印出8,6,10,5,7,9, ...
- 003 Python基本语法元素
目录 一.概要 1.1 方法论 1.2 实践能力 一.概要 程序设计基本方法:https://www.cnblogs.com/nickchen121/p/11164043.html Python开发环 ...
- 059 Python计算生态概览
目录 一.概要 二.导学 三.实践能力 一.概要 从数据处理到人工智能 实例15-霍兰德人格分析雷达图 从Web解析到网络空间 从人机交互到艺术设计 实例16-玫瑰花绘制 二.导学 纵览Python计 ...
- MyBatis的发展和选型
xlecho编辑整理,欢迎转载,转载请声明文章来源.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!! 参考 ...
- 渗透之路基础 -- 服务端请求伪造SSRF
简介:SSRF 服务器端请求伪造,有的大型网站在web应用上提供了从其他服务器获取数据的功能.使用户指定的URL web应用获取图片,下载文件,读取文件内容.通常用于控制web进而探测内网服务以及攻击 ...
- nexus 私服 低配置服务器启动不能访问的问题
1核1G的渣渣服务器启动无法访问. 请更换更高配置的服务器.
- 1、单链表的实现(java代码)
1.创建链结构实体Node /** * 链表结构实体类 */ public class Node { Node next = null; //下一节点 int data; //节点数据 public ...
- scala函数式编程(二) scala基础语法介绍
上次我们介绍了函数式编程的好处,并使用scala写了一个小小的例子帮助大家理解,从这里开始我将真正开始介绍scala编程的一些内容. 这里会先重点介绍scala的一些语法.当然,这里是假设你有一些ja ...
- java树形结构工具类
一.树形结构数据一般都是以子父id的形式存在数据库中,查询的时候只是带有子id和parent_id的List集合 并不是树形结构,所以我们现在要将普通的List集合转换为树结构数据(本工具类扩展操作树 ...
- 2019 DevOps 必备面试题——配置管理篇
原文地址:https://medium.com/edureka/devops-interview-questions-e91a4e6ecbf3 原文作者:Saurabh Kulshrestha 翻译君 ...