Redis学习笔记(2)-String
package cn.com; import java.util.List; import redis.clients.jedis.Jedis; public class Redis_String { public static Jedis redis = new Jedis("localhost", 6379);// 连接redis public static void main(String[] args) throws InterruptedException {
incr_deincr();
} /**
* SET 设置值
* GET 获取值
* */
public static void set_get(){
redis.set("name", "wangzhang");
redis.set("id", "123456");
redis.set("address", "guangzhou"); String name=redis.get("name");
String address=redis.get("address");
System.out.println("name:"+name);
System.out.println("address:"+address);
redis.flushDB();//清楚数据
} /**
* MSET key value
* 同时设置一个或多个key-value对,下面是三对分别是haha-111,xixi-222,wawa-333。
* MGET key value
* 获取多个key的值 传递的事key 的字符串数组,字符串素组不存在的key则返回null
* */
public static void mset_mget(){
redis.mset("haha", "111", "xixi", "222","wawa","333");
//MGET key value 获取多个key的值 传递的事key 的字符串数组,字符串素组不纯在则返回null
List<String> mgetList=redis.mget(new String[]{"haha","xixi1"});
for(String mget:mgetList){
System.out.println("mget:"+mget);
}
redis.flushDB();//清楚数据
} /**
* APPEND key value
* 追加字符串到对应的key上:APPEND myphone "nokia"。对不存在的 key 进行 APPEND ,等同于 SET myphone "nokia"
* 返回的是字符串最后结果的长度.
* */
public static void append_exists(){
redis.set("name", "liliang");
redis.set("id", "123456");
redis.set("address", "guangzhou"); boolean e_name1=redis.exists("name");
boolean e_name2=redis.exists("name1");
System.out.println("e_name1:"+e_name1);
System.out.println("e_name2:"+e_name2); //key存在的情况
Long size=redis.append("name", "-lalala");
System.out.println("append 之后的长度:"+size);
String name=redis.get("name");
System.out.println("name:"+name); //key 不存在
Long user_size=redis.append("username", "-lalala");
System.out.println("key 不存在 append 之后的长度:"+user_size);
String username=redis.get("username");
System.out.println("username"+username);
redis.flushDB();//清除数据
} /**
* SETBIT key offset value
* 设置key的指定位移上的值(0/1)
* 当 key 不存在时,自动生成一个新的字符串值。
* 字符串会进行伸展(grown)以确保它可以将 value 保存在指定的偏移量上。当字符串值进行伸展时,空白位置以 0 填充;
* 也就是说 设置了第一个为1,然后直接设置第100位位1其他2-99 未知默认用0 填充。
* offset 参数必须大于或等于 0 ,小于 2^32 (bit 映射被限制在 512 MB 之内)。
* 下面例子设置 在0,2,4 上面为1; 1,3,5 上面为 0;
* 应用场景:记得一周登陆过的用户;只要用户登陆过就设置id对应的位为 1.那么一个用户是否登陆用一个位就可以代替。
* */
public static void setbit_getbit(){ redis.setbit("login", 0, true);redis.setbit("login", 2, true);redis.setbit("login", 100, true);
redis.setbit("login", 1, false);redis.setbit("login", 3, false);redis.setbit("login", 3, false);
System.out.println("获取key=login 上 第 0位的值:"+redis.getbit("login", 0));
System.out.println("获取key=login 上 第 1位的值:"+redis.getbit("login", 1));
redis.flushDB();//清除数据
} /**
* BITCOUNT key [start] [end]
* 计算给定字符串中,被设置为 1 的比特位的数量,可不指定具体的位移默认全部。
* start 和 end 参数的设置和 GETRANGE 命令类似,
* 都可以使用负数值:比如 -1 表示最后一个位,而 -2 表示倒数第二个位,以此类推。
* */
public static void bitcount(){ redis.setbit("login", 0, true);redis.setbit("login", 2, true);redis.setbit("login", 100, true);
redis.setbit("login", 1, false);redis.setbit("login", 3, false);redis.setbit("login", 3, false);
Long count=redis.bitcount("login");
System.out.println("count:"+count); System.out.println("================"); Long count1=redis.bitcount("login", 0, 3);
System.out.println("count1:"+count1);
} /**
* SETEX key seconds value
* 设置key:foo 的值 value:haha ,如果key 存在覆盖值,不存在等同于set
* 同时设置5秒后过期,并将key的生存时间设为seconds(以秒为单位)。
* 实现:先暂停一秒 通过ttl 查看剩余时间(单位以秒计算) ,在休眠5秒应该就是过期了,在查看key 是否攒在
* psetex 和setex 唯一的区别就是psetex以毫秒计算 setex 以秒计算
* @throws InterruptedException
* */
public static void setex_ttl() throws InterruptedException{ redis.setex("foo", 5, "haha");
System.out.println("foo1:"+redis.get("foo"));
Thread.sleep(1000);
Long time=redis.ttl("foo");
System.out.println("剩余过期时间(单位以秒计算):"+time);
Thread.sleep(5000);
System.out.println("foo2:"+redis.get("foo"));
redis.flushDB();//清除数据
} /**
* SETEX key seconds value
* 设置key:foo 的值 value:haha ,如果key 存在覆盖值,不存在等同于set
* 同时设置5秒后过期,并将key的生存时间设为seconds(以毫秒为单位)。
* 实现:先暂停一秒 通过ttl 查看剩余时间 ,在休眠5秒应该就是过期了,在查看key 是否攒在
* psetex 和setex 唯一的区别就是psetex以毫秒计算 setex 以秒计算
* @throws InterruptedException
* */
public static void psetex_pttl() throws InterruptedException{ //psetex 和setex 唯一的区别就是psetex以毫秒计算 setex 以秒计算 redis.psetex("foo", 5000, "haha");
System.out.println("foo1:"+redis.get("foo"));
Thread.sleep(1000);
Long time=redis.pttl("foo");
System.out.println("剩余过期时间:"+time);
Thread.sleep(5000);
System.out.println("foo2:"+redis.get("foo"));
redis.flushDB();//清除数据
} /**
* SETNX key value
* 将 key 的值设为 value ,当且仅当 key 不存在。
* 若给定的 key 已经存在,则 SETNX 不做任何动作。
* */
public static void setnx(){
redis.set("name", "liliang"); redis.setnx("name", "liliang-001");
redis.setnx("age", "18"); System.out.println("已经存在的key 在设置将不做改变:"+redis.get("name")); System.out.println("不存在的key:"+redis.get("age"));
redis.flushDB();//清除数据
} /**
* MSETNX key value [key value ...]
* 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。
* 即使只有一个给定 key 已存在, MSETNX 也会拒绝执行所有给定 key 的设置操作。
* MSETNX 是原子性的 所有字段要么全被设置,要么全不被设置。
* */
public static void msetnx(){ //不存在的情况
Long size=redis.msetnx("name","liliang","id","123456");
System.out.println("size:"+size);
List<String> list=redis.mget("name","id");
for(String s:list){
System.out.println("s:"+s);
}
redis.flushDB();//清除数据 System.out.println("=================");
//key有存在的情况
redis.set("name", "liliangabc");//设置一个key 让下面的设置多个key时存在key=name的。
Long size1=redis.msetnx("name","liliang123","id","123456abc");
System.out.println("size1:"+size1);
List<String> list1=redis.mget("name","id");
for(String s:list1){
System.out.println("s1:"+s);
}
redis.flushDB();//清除数据
} /**
* STRLEN key
* 返回 key 所储存的字符串值的长度。
* 当 key 储存的不是字符串值时,返回一个错误。
* */
public static void strlen(){
redis.set("name", "liliang");
Long length=redis.strlen("name");
System.out.println("key=name 存在:"+length); Long length1=redis.strlen("name1");
System.out.println("key=name1 不存在:"+length1); redis.flushDB();//清除数据
} /**
* SETRANGE key offset value
* 用 value 参数覆写(overwrite)给定 key 所储存的字符串值,从偏移量 offset 开始。
* 不存在的 key 在位移offset前面的用空字符串代替处理。
* 注意你能使用的最大偏移量是 2^29-1(536870911) ,因为 Redis 字符串的大小被限制在 512 兆(megabytes)以内。
* 如果你需要使用比这更大的空间,你可以使用多个 key 。
* */
public static void setrange(){ //key=name 存在
redis.set("name", "abcdefghijk");
redis.setrange("name", 3, "123");
System.out.println(redis.get("name")); //key=name1 不存在,在位移3 前面的用空字符串代替
redis.setrange("name1", 3, "123");
System.out.println(redis.get("name1"));
redis.flushDB();//清除数据
} /**
* GETRANGE key start end
* 返回 key 中字符串值的子字符串,
* 字符串的截取范围由 start(开始位置) 和 end(结束位置) 两个偏移量决定(包括 start 和 end 在内)。
* -1代表到最后,如果end超过字符串的长度,超过的长度被忽略
* */
public static void getrange(){
redis.set("name", "abcdefghijk");
String s=redis.getrange("name", 3, 5);
String s1=redis.getrange("name", 3, -1);
String s2=redis.getrange("name", 3, 1000000);
System.out.println(s);
System.out.println(s1);
System.out.println(s2);
} /**
* DECR key
* 将 key 中储存的数字值减一;/
* ===============================================
* DECRBy key decrement
* 将 key 中储存的数字值减 decrement;/
*
* 如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECR 操作;两个方法都一样.
* */
public static void decr_decrby(){ Long num=redis.decr("num");
System.out.println("num:"+num); Long age=redis.decrBy("age", 10);
System.out.println("age:"+age); redis.flushDB();//清除数据
} /**
* INCR key
* 将 key 中储存的数字值加一;/
* ===============================================
* INCRBy key decrement
* 将 key 中储存的数字值加 decrement;/
*
* 如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作;两个方法都一样.
* */
public static void incr_deincr(){
Long num=redis.incr("num");
System.out.println("num:"+num); Long age=redis.incrBy("age", 10);
System.out.println("age:"+age); //redis.flushDB();//清除数据
} }
Redis学习笔记(2)-String的更多相关文章
- redis学习笔记-01 string类型命令
一.set key value set joker 123456 #设定key为joker,value为123456的数据 二.keys * keys * #用于查看该数据库中所有的key值 三.se ...
- Redis学习笔记(二)Redis支持的5种数据类型的总结之String和Hash
引言 在Redis学习笔记(一)中我们已经会安装并且简单使用Redis了,接下来我们一起来学习下Redis支持的5大数据类型. 简介 Redis是REmote DIctionary Server(远程 ...
- Redis学习笔记~目录
回到占占推荐博客索引 百度百科 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合). ...
- Redis学习笔记4-Redis配置详解
在Redis中直接启动redis-server服务时, 采用的是默认的配置文件.采用redis-server xxx.conf 这样的方式可以按照指定的配置文件来运行Redis服务.按照本Redi ...
- Redis学习笔记7--Redis管道(pipeline)
redis是一个cs模式的tcp server,使用和http类似的请求响应协议.一个client可以通过一个socket连接发起多个请求命令.每个请求命令发出后client通常会阻塞并等待redis ...
- Redis学习笔记一:数据结构与对象
1. String(SDS) Redis使用自定义的一种字符串结构SDS来作为字符串的表示. 127.0.0.1:6379> set name liushijie OK 在如上操作中,name( ...
- Redis学习笔记(二)-key相关命令【转载】
转自 Redis学习笔记(二)-key相关命令 - 点解 - 博客园http://www.cnblogs.com/leny/p/5638764.html Redis支持的各种数据类型包括string, ...
- Redis学习笔记(3)——Redis的命令大全
Redis是一种nosql数据库,常被称作数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted se ...
- Redis学习笔记(1)——Redis简介
一.Redis是什么? Remote Dictionary Server(Redis) 是一个开源的使用ANSI C语言编写.遵守BSD协议.支持网络.可基于内存亦可持久化的日志型.Key-Value ...
随机推荐
- hdu2955
#include<bits/stdc++.h> using namespace std; struct Bank { double cau; int money; }bank[]; ]; ...
- 远程连接Kali Linux使用PuTTY实现SSH远程连接
远程连接Kali Linux使用PuTTY实现SSH远程连接 本书主要以在Android设备上安装的Kali Linux操作系统为主,介绍基于Bash Shell渗透测试.由于在默认情况下,在Andr ...
- json学习系列(2)-生成JSONObject的方法
生成JSONObject一般有两种方式,通过javabean或者map类型来生成.如下面的例子: 先定义一个User实体类: package com.pcitc.json; /** * 用户实体类 * ...
- iOS 初步单元测试
- (void)testExample { // This is an example of a functional test case. // Use XCTAssert and related ...
- 删除mysql
我以前遇到过删除mysql如果删除不干净的话,下次无法安装,也无法启动服务. 如今找到了解决方案 前言:只适用在Windows下--在控制面板中删除MySQL程序--然后在C盘中删除MySQL文件夹- ...
- BZOJ3547 : [ONTAK2010]Matchings
树形DP f[i][0]表示不向下连边的最大匹配数 f[i][1]表示向下连一条边的最大匹配数 h[][]表示对应的方案数 为了防止爆栈用BFS 为了防止MLE: 1.数组循环利用,比如存边的数组在存 ...
- svg―Raphael.js Library
Raphael是一个用于在网页中绘制矢量图形的Javascript库,它使用SVG W3C推荐标准和VML作为创建图形的基础,可以通过JavaScript操作DOM来轻松创建出各种复杂的柱状图.饼图. ...
- TYVJ P1024 外星人的密码数字
做题记录:2016-08-16 20:09:30 描述 XXXX年突然有外星人造访,但大家语言不通,不过科学家们经过研究发现外星人用26个英文字母组成的单词中最长不降子序列的长度来表述数字,且 ...
- TYVJ P1078 删数 Label:区间dp
描述 有N个不同的正整数数x1, x2, ... xN 排成一排,我们可以从左边或右边去掉连续的i个数(只能从两边删除数),1<=i<=n,剩下N-i个数,再把剩下的数按以上操作处理,直到 ...
- POJ 2112 Optimal Milking(最大流+二分)
题目链接 测试dinic模版,不知道这个模版到底对不对,那个题用这份dinic就是过不了.加上优化就WA,不加优化TLE. #include <cstdio> #include <s ...