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操作五大数据类型常用命令解析>,作者:灰 ...
随机推荐
- Kafka源码分析及图解原理之Producer端
一.前言 任何消息队列都是万变不离其宗都是3部分,消息生产者(Producer).消息消费者(Consumer)和服务载体(在Kafka中用Broker指代).那么本篇主要讲解Producer端,会有 ...
- 相同类中方法间调用时日志Aop失效处理
本篇分享的内容是在相同类中方法间调用时Aop失效处理方案,该问题我看有很多文章描述了,不过大多是从事务角度分享的,本篇打算从日志aop方面分享(当然都是aop,失效和处理方案都是一样),以下都是基于s ...
- 使用eclipse Debug时总是被URLClassLoader这个类拦截,不能进入到要调试的类里面去
打开Debug,如图去掉前面的两个对号,重新debug即可:
- windows 服务 安装、卸载
1.新建项目 选中windows服务 2.添加安装程序 3.修改安装代码 ServiceProcessInstaller processInstall; ServiceInstaller servic ...
- MySQL什么时候适合建索引,什么时候不适合建索引
1.什么事索引(本质:数据结构) 索引是帮助MySQL高效获取数据的数据结构. 2.优势: 1.提高数据检索的效率,降低数据库IO成本 2.通过索引对数据进行排序,降低数据排序的成本,降低了CPU的消 ...
- IntelliJ IDEA远程连接tomcat,实现单步调试
web项目部署到tomcat上之后,有时需要打断点单步调试,如果用的是Intellij idea,可以通过如下方法实现: 开启debug端口,启动tomcat 以tomcat7.0.75为例,打开bi ...
- Charles 修改请求/compose和Compose New
本文参考:撰写工具/compose和Compose New 撰写工具/compose和Compose New compose 是在原有的请求基础上,修改: 可以写各种状态: – URL: – Meth ...
- 49 (OC)* layoutSubviews和drawRect调用
layoutSubviews: 简单的说就是你如果想调用此方法.不要直接调用,需要调用setNeedsLayout方法来刷新布局! drawRect:刷新布局 一:layoutSubviews在以下 ...
- [C++] 重载运算符与类型转换(2)——函数调用运算符和类型转换运算符
1.这两个应该是C++中比较高级的用法了. 一.函数调用运算符 1.重载函数调用运算符(),必须是成员函数,一个类可以定义多个不同版本的调用运算符,相互之间应该在参数数量或者类型上有所区别. ...
- 欢迎加入强哥的 Android 开发交流群
最近建了一个 Android 开发交流群,但不限于交流移动端.前端和后端等相关技术. 本群的宗旨:让所有学习的群友都有进步的机会. 1. 经验交流 在我们学习时遇到困境,或者开发过程中遇到难题,都可以 ...