redis-key2

package com.ztest.redis;

import java.util.List;

import redis.clients.jedis.Jedis;

import com.sun.istack.internal.logging.Logger;
import com.ztest.redis.util.JedisConnectionUtil;

/**
*
* @author yafei.lv
*redis异步???
*/
public class JedisKeyTestTwo {
private final static Logger logger = Logger.getLogger(JedisKeyTestOne.class);

public static void keyTest(){
Jedis jedis = null;
try{

jedis = JedisConnectionUtil.initJedis();
// 0.flushDb 和 flush all
/* 一个端口一个库?
* flush all : 清空整个 Redis 服务器的数据 (删除所有数据库的所有 key )。此命令从不失败。时间复杂度: 尚未明确.返回值: 总是返回 OK 。
* flush db : 清空当前数据库中的所有 key。此命令从不失败。时间复杂度: O(1)。返回值: 总是返回 OK 。
*/

jedis.flushDB();

// 1.migrate 将key和value原子性地从当前实例,传送到目标实例的指定库上,一旦传送成功,key保证会出现在目示实例上,当前会被删除
//是原子操作、阻塞
/*
* @Redis命令:migrate host port key destiontion-db timeout
*
* @例子:把6379的redis里面的key移到6378里面
* migrate 127.0.0.1 6378 lvyf 0(库名) 1000
*/

// 2.move 将当前数据库key移动到指定数据库中,如果当前数据库 (源数据库) 和给定数据库 (目标数据库) 有相同名字的给定 key ,或者 key 不存在于当前
//数据库,那么 MOVE 没有任何效果
/*
* @Redis命令: move key db
* 时间复杂度: O(1)
返回值: 移动成功返回 1 ,失败则返回 0

@例子:move lvyf 0
*/
jedis.set("lvyf1", "123");
jedis.move("lvyf1",1);

jedis.flushAll();

// 3. object OBJECT 命令允许从内部察看给定 key 的 Redis 对象
jedis.set("lvyf","1q23");
jedis.objectEncoding("lvyf");
Long count = jedis.objectRefcount("lvyf");
logger.info("obj==" + jedis.get("lvyf")+",count=="+count);

// 4. persist 移除key的存活时间
/*
* @Redis命令 persist lvyf
*/
jedis.expire("lvyf", 5);
jedis.persist("lvyf");

// 5. pexpire 给key设置存活时间,单位毫秒
/*
@Redis命令 pexpire lvyf 1000 时间段
*/

// 6.
/*
* PEXPIREAT key milliseconds-timestamp
这个命令和EXPIREAT 命令类似,但它以毫秒为单位设置 key 的过期 unix 时间戳,而不是像EXPIREAT
那样,以秒为单位

@Redis命 PEXPIREAT lvyf 140999887766655 ,某一时间点
*/

// 7. pttl 它以毫秒为单位返回 key 的剩余生存时间
/*
* @Redis命令 pttl lvyf
*/

// 8. randomkey 从当前数据库中随机返回 (不删除) 一个 key
/*
* @Redis命令 randomkey
*/
jedis.flushAll();
jedis.set("orange", "1");
jedis.set("apple", "2");
jedis.set("banana", "3");

logger.info("randomKey==" + jedis.randomKey());

// 9. rename 修改key
/*
* @Redis命令: rename key newkey
* 当 key 和 newkey 相同,或者 key 不存在时,返回一个错误。
当 newkey 已经存在时,RENAME 命令将覆盖旧值。
* 从当前数据库中随机返回 (不删除) 一个 key
*/
jedis.flushAll();
jedis.set("1", "orange");
jedis.set("2","apple");
logger.info("修改前 key是2的value==" + jedis.get("2"));

String result = jedis.rename("1", "2");
logger.info("修改结果==" + result + "修改后key是2的value==" + jedis.get("2"));

// 10.renamenx 当且仅当newkey 不存在时,才会修改
/*
* @Redis命令 renamenx lvyf lvyf1
* 时间复杂度: O(1)
返回值:
修改成功时,返回 1 。
如果 newkey 已经存在,返回 0 。
*/
jedis.flushAll();
jedis.set("1", "orange");
jedis.set("2","apple");
logger.info("修改前 key是2的value==" + jedis.get("2"));

Long result1 = jedis.renamenx("1", "3");
logger.info("修改结果==" + result1 + "修改后key是2的value==" + jedis.get("2") + ",3=="+jedis.get("3")+",1=="+jedis.get("1"));

// 11.restore
/*
* @Redis命令
* RESTORE key ttl serialized-value
*
* 反序列化给定的序列化值,并将它和给定的 key 关联。
参数 ttl 以毫秒为单位为 key 设置生存时间;如果 ttl 为 0 ,那么不设置生存时间
返回值:
如果反序列化成功那么返回 OK ,否则返回一个错误。

DUMP greeting 再看看!!!
\x00\x15hello, dumping world!\x06\x00E\xa0Z\x82\xd8r\xc1\xde"
# 将序列化数据 RESTORE 到另一个键上面
RESTORE greeting-again 0 "\x00\x15hello, dumping world!\x06\x00E\xa0Z\x82\xd8r\xc1\xde"
OK
*/

// 12. ttl 返回key的剩余生存时间 秒
jedis.flushAll();
jedis.set("lvyf", "123");
Long timeNoExpire = jedis.ttl("lvyf");
Long timeNotKeyExist = jedis.ttl("lvyafei1");
logger.info("timeNoExpire=="+timeNoExpire+",timeNotKeyExist=="+timeNotKeyExist);
jedis.set("lv", "123");
jedis.expire("lv", 10);
Thread.currentThread();
//    Thread.sleep(1000*3);
Long rightTTl = jedis.ttl("lv");
logger.info("rightTTl=="+rightTTl);

/*
* 13.type 返回key所存value类型
* TYPE key
返回 key 所储存的值的类型。
可用版本: >= 1.0.0
时间复杂度: O(1)
返回值:
none (key 不存在)
string (字符串)
list (列表)
set (集合)
zset (有序集)
hash (哈希表)
*/
jedis.flushAll();
jedis.set("lvyf", "123");
String type = jedis.type("lvyf");
logger.info("type=="+type+",not=="+jedis.type("123"));

/*
* 14. sort 对指定key的value排序
*
* SORT key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC | DESC]
[ALPHA] [STORE destination]
返回或保存给定列表、集合、有序集合 key 中经过排序的元素。
排序默认以数字作为对象,值被解释为双精度浮点数,然后进行比较。

时间复杂度:
O(N+M*log(M)),N 为要排序的列表或集合内的元素数量,M 为要返回的元素数量。
如果只是使用SORT 命令的 GET 选项获取数据而没有进行排序,时间复杂度 O(N)。
返回值:
没有使用 STORE 参数,返回列表形式的排序结果。
使用 STORE 参数,返回排序结果的元素数量。
*/
jedis.lpush("cost", "10","5","20","3");
List<String> sortResult = jedis.sort("cost");
for(String str : sortResult){
logger.info("str=="+ str);
}

/*
* 15. SCAN
* 命令是一个基于游标的迭代器( cursor based iterator):SCAN 命令每次被调用之后,都会向用户返
回一个新的游标,用户在下次迭代时需要使用这个新游标作为SCAN 命令的游标参数,以此来延续之前的
迭代过程。
当SCAN 命令的游标参数被设置为 0 时,服务器将开始一次新的迭代,而当服务器向用户返回值为 0 的游
标时,表示迭代已结束

*/

//    for(int i = 0 ; i < 20 ; i++){
//    jedis.set(i+"", i+"");
//    }

}catch(Exception e){
e.printStackTrace();
}finally{
if(jedis != null){
JedisConnectionUtil.returnJedis(jedis); //回收
}
}

}

public static void main(String[] args) {
keyTest();
}
}
时间: 2024-10-11 17:56:50

redis-key2的相关文章

Python操作数据库(mysql redis)

一.python操作mysql数据库: 数据库信息:(例如211.149.218.16   szz  123456) 操作mysql用pymysql模块 #操作其他数据库,就安装相应的模块 import  pymysql ip='211.149.218.16' port=3306 passwd='123456' user='root' db='szz' conn=pymysql.connect(host=ip,user=user,port=port,passwd=passwd,db=db,cha

NoSQL -- redis 安装 主从 配置详解 常用命令

Redis 也是key-value存储系统,官方站点 http://redis.io,但相对于memcache,有如下优势: 1.支持更多地value类型(string.hash.lists.sets.sorted sets等): 2.支持数据持久化,预防服务重启后需要重新存储: redis 有两种文件格式:全量数据(RDB=redis database).增量请求(aof=append only file). 前者是将内存中的数据写进磁盘,便于下次读取文件时直接进行加载,快照形式: 后者是将r

Python之路【第九篇】:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy

Python之路[第九篇]:Python操作 RabbitMQ.Redis.Memcache.SQLAlchemy Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached基于一个存储键/值对的hashmap.其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信. Memc

redis常用知识(二)

Redis相关知识总结(二) Php操作redis常用的方法 1.  String类型 (1)     Get(key)  获取设置的值 (2)     Set(key,value)  设置相应的key值 (3)     getSet(key,value)        修改key值 (4)     append(key,value2)    在指定的key-value后追加新的value (5)     getRange(key, start, end) 根据指定的key,对value进行字符

redis基本命令学习

看到大家都需要redis,而我工作却没怎么接触过,特来学习,现在先熟悉指令,我通过redis中文的 互动教程(interactive tutorial)来学习的. 1.redis是key-value存储的,放在内存中,并在磁盘持久化的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 通过set key value来存储,通过get key来获取值 set key value:设置key的值,若存在则覆盖setnx key value:SET if Not eXists,若存在则不操作. M

redis拾遗

自己边学边记录的,写在了excel里,这里直接沾出来,懒得美化加工了. 基础篇 命令 说明 redis命令是原子性的 键值类型数据 redis范围都是左开右开 set 设置值,如set s 1 范围若左0,右-1为全部 get 获取值,如get s 任意key的值都可用type判断类型 incr 让某个数值类型的key自增1,如incr s del 删除某个key,多key空格间隔,如del s b keys 查找某个(些)key,如keys s select 选择数据库,默认0,如:selec

Redis数据操作--键命令

--查找键,参数通配符查找 keys pattern # 查看所有键 keys * # 查看名称中包含a的键 keys '*a*' --判断键是否存在   如果存在返回1,不存在返回0 exists key1 # 判断键'py1'.'p2'是否存在 exists 'py1' exists 'py2' --查看键对应的value的类型 type key # 查看键'py1'的值类型,为 redis支持的五种类型中的一种 type 'py1' --删除键及对应的值 del key1 key2 ...

Redis常用命令(一) 字符串键、散列键

redis是key-value的数据结构,每条数据都是一个键值对 键的类型是字符串,因为默认是字符串所以都不用加引号 注意:键不能重复 值的类型分为五种: 字符串string 散列hash 列表list 集合set 有序集合zset string字符串键 set key value  # 设置的键不存在则为添加,如果设置的键已经存在则修改 set name daiby set key value [NX|XX]  # NX: 如果key不存在则成功,反之失败(不覆盖旧值)! XX: 如果key存

Redis笔记——技术点汇总

目录 · 特点 · 安装 · 数据库 · 服务器命令 · 数据类型及其操作命令 · 数据结构 · string · list · set · hash · zset · 发布与订阅 · 排序 · 事务 · pipeline · 基准测试 · 键的过期 · 持久化 · 概况 · snapshoting · AOF · 主从复制 · HA · Lua · 示例:分布式日志 特点 1. Redis是一个开源的.C语言编写的.面向键值对类型数据的分布式NoSQL数据库系统. 2. 特点:高性能(内存数据

Redis 基础数据结构与对象

Redis用到的底层数据结构有:简单动态字符串.双端链表.字典.压缩列表.整数集合.跳跃表等,Redis并没有直接使用这些数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象系统,这个系统包括字符串对象.列表对象.哈希对象.集合对象和有序结合对象共5种类型的对象. 1 简单动态字符串 redis自定义了简单动态字符串数据结构(sds),并将其作为默认字符串表示. struct sdshdr { unsigned int len; unsigned int free; char buf[