java redis hget_Java操作Redis(二)

AAffA0nNPuCLAAAAAElFTkSuQmCC

一、Java操作Redis字符串类型import redis.clients.jedis.Jedis;

/**

* Java操作Redis 字符串类型

*

* @author liuhefei

* 2018年9月17日

*/

public class RedisString {

public static Jedis getJedis(){

//连接Redis服务器

Jedis jedis = new Jedis("127.0.0.1",6379);

System.out.println("redis服务器连接成功!");

return jedis;

}

/**

* Redis的key类型

*/

public void redisKey(){

Jedis jedis = getJedis();

jedis.set("mykey", "redis data type");

System.out.println("查看键为mykey的是否存在:"+jedis.exists("mykey"));

System.out.println("键mykey的值为:"+jedis.get("mykey"));

System.out.println("查看键为mykey的类型:"+jedis.type("mykey"));

System.out.println("随机获得一个key:"+jedis.randomKey());

System.out.println("将mykey重命名为mykey1:"+ jedis.rename("mykey", "mykey1"));

System.out.println("删除key为mykey:"+jedis.del("mykey"));

}

/**

* Redis的String类型

*/

public void redisString(){

Jedis jedis = getJedis();

System.out.println("设置name:"+jedis.set("name", "小花"));

System.out.println("设置name1:"+jedis.set("name1", "小花1"));

System.out.println("设置name2:"+jedis.set("name2", "小花2"));

System.out.println("设置name,如果存在返回0:"+jedis.setnx("name", "小花哈哈"));

System.out.println("获取key为name和name1的value值:"+jedis.mget("name","name1"));

System.out.println("自增1:"+jedis.incr("index"));

System.out.println("自增1:"+jedis.incr("index"));

System.out.println("自增2:"+jedis.incrBy("count", 2));

System.out.println("自增2:"+jedis.incrBy("count", 2));

System.out.println("递减1:"+jedis.decr("count"));

System.out.println("递减2:"+jedis.decrBy("index",2));

System.out.println("在name后面添加String:"+jedis.append("name", ",我爱你"));

System.out.println("获取key为name的值:"+jedis.get("name"));

}

public static void main(String[] args) {

RedisString redis = new RedisString();

redis.redisKey();

redis.redisString();

}

}

二、Java操作Redis列表类型

import java.util.List;

import redis.clients.jedis.Jedis;

/**

* Java操作Redis 列表类型

*

* @author liuhefei

* 2018年9月17日

*/

public class RedisList {

public static Jedis getJedis(){

//连接Redis服务器

Jedis jedis = new Jedis("127.0.0.1",6379);

System.out.println("redis服务器连接成功!");

return jedis;

}

/**

* redis的list类型

*/

public void redisList(){

Jedis jedis = getJedis();

//在列表的头部添加数据

jedis.lpush("list", "姗姗","age","20","address","beijing");

//在列表的尾部添加数据

jedis.rpush("height", "170cm","cupSize","C罩杯");

//返回长度

System.out.println("列表长度:" + jedis.llen("list"));

System.out.println("列表list下标为2的元素:" + jedis.lindex("list", 2));

System.out.println("移除一个元素:" + jedis.lrem("list", 1, "age"));

System.out.println("将列表 key 下标为 index 的元素的值设置为 value:" + jedis.lset("list", 5, "hello world"));

System.out.println("移除并返回列表list的尾元素:" + jedis.rpop("list"));

//取值

List list = jedis.lrange("list", 0, -1);

for(String str : list){

System.out.println(str);

}

//System.out.println("删除key为list的数据"+jedis.del("list"));

System.out.println("删除key为height的数据"+jedis.del("height"));

}

public static void main(String[] args) {

RedisList redis = new RedisList();

redis.redisList();

}

}

三、Java操作Redis集合类型import redis.clients.jedis.Jedis;

/**

* Java操作Redis集合类型

*

* @author liuhefei

* 2018年9月17日

*/

public class RedisSet {

public static Jedis getJedis(){

//连接Redis服务器

Jedis jedis = new Jedis("127.0.0.1",6379);

System.out.println("redis服务器连接成功!");

return jedis;

}

/**

* redis的set类型

*/

public void redisSet(){

Jedis jedis = getJedis();

jedis.sadd("city", "北京","上海","广州","深圳","昆明","武汉","大理");

System.out.println("取出集合的头部元素:" + jedis.spop("city"));

System.out.println("随机取出一个值:"+ jedis.srandmember("city"));

/*Redis Srem 命令用于移除集合中的一个或多个成员元素,不存在的成员元素会被忽略。

当 key 不是集合类型,返回一个错误。

*/

jedis.srem("city", "北京");

//Redis Smembers 命令返回集合中的所有的成员。 不存在的集合 key 被视为空集合。

System.out.println(jedis.smembers("city"));

//Redis Sismember 命令判断成员元素是否是集合的成员。 判断深圳是否是city集合的元素

System.out.println(jedis.sismember("city", "深圳"));

//Redis Srandmember 命令用于返回集合中的一个随机元素。

System.out.println(jedis.srandmember("city"));

//Redis Scard 命令返回集合中元素的数量。

System.out.println(jedis.scard("city"));

jedis.sadd("city2", "昆明","香港","澳门","台湾","上海","北京","成都");

System.out.println("交集:"+jedis.sinter("city","city2"));

System.out.println("并集:"+jedis.sunion("city","city2"));

System.out.println("差集:"+jedis.sdiff("city","city2"));

}

public static void main(String[] args) {

RedisSet redis = new RedisSet();

redis.redisSet();

}

}

四、Java操作Redis哈希表类型import java.util.HashMap;

import java.util.List;

import java.util.Map;

import redis.clients.jedis.Jedis;

/**

* Java操作Redis 哈希表类型

*

* @author liuhefei

* 2018年9月17日

*/

public class RedisHash {

public static Jedis getJedis(){

//连接Redis服务器

Jedis jedis = new Jedis("127.0.0.1",6379);

System.out.println("redis服务器连接成功!");

return jedis;

}

/**

* redis 哈希(map)数据类型

*/

public void redisMap(){

Jedis jedis = getJedis();

jedis.hset("bigCity", "big", "北京");

System.out.println("取值:" + jedis.hget("bigCity", "big"));

Map map = new HashMap();

map.put("big1", "上海");

map.put("big2", "香港");

map.put("big3", "武汉");

jedis.hmset("bigCity2", map);

List list1 = jedis.hmget("bigCity2", "big1","big2","big3");

for(String str1 : list1){

System.out.println(str1);

}

//删除map中的某个键值

jedis.hdel("bigCity2", "上海");

System.out.println(jedis.hmget("bigCity2", "height")); //因为删除了,所有返回的是null

System.out.println(jedis.hlen("bigCity2")); //返回key为bigCity2的键中存放的值的个数2

System.out.println(jedis.exists("bigCity2"));//是否存在key为bigCity2的记录 返回true

System.out.println(jedis.hkeys("bigCity2"));//返回map对象中的所有key

System.out.println(jedis.hvals("bigCity2"));//返回map对象中的所有value

}

public static void main(String[] args) {

RedisHash redis = new RedisHash();

redis.redisMap();

}

}

五、Java操作Redis有序集合类型

import redis.clients.jedis.Jedis;

/**

* Java操作Redis有序集合类型

*

* @author liuhefei

* 2018年9月17日

*/

public class RedisSortedSet {

public static Jedis getJedis(){

//连接Redis服务器

Jedis jedis = new Jedis("127.0.0.1",6379);

System.out.println("redis服务器连接成功!");

return jedis;

}

/**

* Redis SortedSet(有序集合)类型

*

*/

public void redisSortedSet() {

Jedis jedis = getJedis();

jedis.zadd("math-score", 100, "小明");

jedis.zadd("math-score", 92, "张三");

jedis.zadd("math-score", 70, "李四");

jedis.zadd("math-score", 50, "小花");

//返回有序集 math-score 中,指定区间内的成员。

System.out.println(jedis.zrange("math-score", 0, -1));

//返回有序集  math-score 的基数。

System.out.println(jedis.zcard("math-score"));

//返回有序集 math-score 中, score 值在 min 和 max 之间(默认包括 score 值等于 min 或 max )的成员的数量。

System.out.println(jedis.zcount("math-score", 50, 90));

//为有序集 math-score 的成员 小花 的 score 值加上增量 15 。

System.out.println(jedis.zincrby("math-score", 15, "小花"));

//返回有序集  math-score 中,成员 member 的 score 值。

System.out.println(jedis.zscore("math-score", "小花"));

//返回有序集 math-score 中成员 张三 的排名。其中有序集成员按 score 值递增(从小到大)顺序排列。

System.out.println(jedis.zrank("math-score", "张三"));

//返回有序集 math-score 中,指定区间内的成员。

System.out.println(jedis.zrevrange("math-score", 90, 100));

//返回有序集 math-score 中, score 值介于 max 和 min 之间(默认包括等于 max 或 min )的所有的成员

System.out.println(jedis.zrevrangeByScore("math-score", 100, 60));

//移除有序集  math-score 中的一个或多个成员,不存在的成员将被忽略。

System.out.println(jedis.zrem("math-score", "小花","小五"));

}

public static void main(String[] args) {

RedisSortedSet redis = new RedisSortedSet();

redis.redisSortedSet();

}

}

六、Java操作Redis实现秒杀功能

场景:1000人秒杀抢购100部手机

代码如下:

(1)SecondKill.java  :主要实现秒杀抢购业务

import java.util.List;

import redis.clients.jedis.Jedis;

import redis.clients.jedis.Transaction;

/**

* 秒杀抢购

*

*

* @author liuhefei 2018年9月19日

*/

public class SecondKill implements Runnable {

String iPhone = "iPhone";// 监视keys

Jedis jedis = new Jedis("127.0.0.1", 6379);

String userinfo;

public SecondKill() {

}

public SecondKill(String uinfo) {

this.userinfo = uinfo;

}

public void run() {

try {

jedis.watch(iPhone);// watchkeys

String val = jedis.get(iPhone);

int valint = Integer.valueOf(val);

if (valint <= 100 && valint >= 1) {

//1.multi命令开启事务

Transaction tx = jedis.multi();

//2、命令入队

tx.incrBy("iPhone", -1);

//exec命令提交事务

List list = tx.exec();// 提交事务,如果此时watchkeys被改动了,则返回null

if (list == null || list.size() == 0) {

String failuserifo = "fail" + userinfo;

String failinfo = "用户:" + failuserifo + " 商品争抢失败,抢购失败";

System.out.println(failinfo);

/* 抢购失败业务逻辑 */

jedis.setnx(failuserifo, failinfo);

} else {

for (Object succ : list) {

String succuserifo = "succ" + succ.toString() + userinfo;

String succinfo = "用户:" + succuserifo + " 抢购成功,当前抢购成功人数:" + (1 - (valint - 100));

System.out.println(succinfo);

/* 抢购成功业务逻辑 */

jedis.setnx(succuserifo, succinfo);

}

}

} else {

String failuserifo = "kcfail" + userinfo;

String failinfo1 = "用户:" + failuserifo + " 商品被抢购完毕,抢购失败";

System.out.println(failinfo1);

jedis.setnx(failuserifo, failinfo1);

// Thread.sleep(500);

return;

}

} catch (Exception e) {

e.printStackTrace();

} finally {

jedis.close();

}

}

}

(2)SecondKillTest.java: 秒杀入口程序import java.util.Random;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

import redis.clients.jedis.Jedis;

/**

* Redis秒杀功能的实现 1000个人抢购100部手机

*

*

* @author liuhefei 2018年9月19日

*/

public class SecondKillTest {

public static void main(String[] args) {

final String iPhone = "iPhone";

ExecutorService executor = Executors.newFixedThreadPool(20); // 20个线程池并发数

final Jedis jedis = new Jedis("127.0.0.1", 6379);

jedis.del(iPhone);  //先删除

jedis.set(iPhone, "100");// 设置起始的抢购数

jedis.close();

for (int i = 0; i 

executor.execute(new SecondKill("user" + getRandomString(6)));

}

executor.shutdown();

}

/**

* 生成用户id

* @param length

* @return

*

* @author liuhefei

* 2018年9月19日

*/

public static String getRandomString(int length) { // length是随机字符串长度

String base = "abcdefghijklmnopqrstuvwxyz0123456789";

Random random = new Random();

StringBuffer sb = new StringBuffer();

for (int i = 0; i 

int number = random.nextInt(base.length());

sb.append(base.charAt(number));

}

return sb.toString();

}

}

完整代码见github:

本文来源于:《从零开始学Redis》高洪涛 刘河飞 编著

未完,待续!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值