redis java 获取数据类型_Java 操作 Redis 五种数据类型

项目添加依赖

redis.clients

jedis

2.9.0

Java 怎么连接 Redis

//连接 Redis

@Testpublic voidinitConn01(){

System.out.println("==========================");

System.out.println("==========================");

System.out.println("==========================");//创建 jedis 对象,连接 redis 服务

Jedis jedis=new Jedis("192.168.75.163",6379);//设置认证密码//jedis.auth("root");//指定数据库 默认是 0

jedis.select(1);//使用 ping 命令,测试连接是否成功

String result=jedis.ping();

System.out.println(result);//返回 PONG//添加一条数据

jedis.set("username","zhangsan");//获取一条数据

String username=jedis.get("username");

System.out.println(username);//释放资源

if(jedis!=null){

jedis.close();

}

}

看下输出结果

83c052b446e064624ef673105206c177.png

通过 Redis 连接池获取连接对象并操作服务器

private String host ="192.168.75.163";private Integer port=6379;

@Testpublic voidinitConn02() {//初始化 redis 客户端连接池

JedisPool jedisPool = new JedisPool(new JedisPoolConfig(), host, port, 10000);//从连接池获取连接

Jedis jedis =jedisPool.getResource();//指定数据库 默认是 0

jedis.select(2);//使用 ping 命令,测试连接是否成功

String result =jedis.ping();

System.out.println(result);//返回 PONG//添加一条数据

jedis.set("username", "zhangsan");//获取一条数据

String username = jedis.get("username");

System.out.println(username);//释放资源

if (jedis != null)

jedis.close();

}

封装 JedisUtil 对外提供连接对象获取方法

importredis.clients.jedis.Jedis;importredis.clients.jedis.JedisPool;importredis.clients.jedis.JedisPoolConfig;/*** 实例化 Jedis 对象工具类*/

public final classJedisUtil {//Redis 服务器 IP

private static String ADDR = "192.168.75.163";//Redis 的端口号

private static int PORT = 6379;//访问密码

private static String AUTH = "root";//可用连接实例的最大数目,默认值为 8;//如果赋值为-1,则表示不限制;如果 pool 已经分配了 maxActive 个 jedis 实例,则此时 pool 的状态为 exhausted(耗尽)。

private static int MAX_ACTIVE = 1024;//控制一个 pool 最多有多少个状态为 idle(空闲的)的 jedis 实例,默认值也是 8。

private static int MAX_IDLE = 200;//等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出 JedisConnectionException;

private static int MAX_WAIT = 10000;private static int TIMEOUT = 10000;//在 borrow 一个 jedis 实例时,是否提前进行 validate 操作;如果为 true,则得到的 jedis 实例均是可用的;

private static boolean TEST_ON_BORROW = true;private static JedisPool jedisPool = null;/*** 初始化 Redis 连接池*/

static{try{

JedisPoolConfig config= newJedisPoolConfig();

config.setMaxTotal(MAX_ACTIVE);

config.setMaxIdle(MAX_IDLE);

config.setMaxWaitMillis(MAX_WAIT);

config.setTestOnBorrow(TEST_ON_BORROW);//jedisPool = new JedisPool(config, ADDR, PORT, TIMEOUT, AUTH);

jedisPool = newJedisPool(config, ADDR, PORT, TIMEOUT);

}catch(Exception e) {

e.printStackTrace();

}

}/*** 获取 Jedis 实例

*

*@return

*/

public synchronized staticJedis getJedis() {try{if (jedisPool != null)returnjedisPool.getResource();return null;

}catch(Exception e) {

e.printStackTrace();return null;

}

}/*** 释放 jedis 资源

*

*@paramjedis*/

public static void returnResource(finalJedis jedis) {if (jedis != null) {

jedisPool.close();

}

}

}

Java 操作 Redis 五种数据类型

连接与释放

Jedis jedis = null;/*** 连接 Redis*/@Beforepublic voidinitConn() {

jedis=JedisUtil.getJedis();

}/*** 释放资源*/@Afterpublic voidclose() {

JedisUtil.returnResource(jedis);

}

1、操作 String

@Testpublic voidtestString() {//添加一条数据

jedis.set("username", "zhangsan");

jedis.set("age", "18");//添加多条数据 参数奇数为 key 参数偶数为 value

jedis.mset("address", "bj", "sex", "1");//获取一条数据

String username = jedis.get("username");

System.out.println(username);//获取多条数据

List list = jedis.mget("username", "age", "address", "sex");for(String str : list) {

System.out.println(str);

}//删除//jedis.del("username");

}

看下结果

d73af263b883af27aef629bf53ff467e.png

2、操作 hash

@Testpublic voidtestHash() {/** 添加一条数据

* 参数一:redis 的 key

* 参数二:hash 的 key

* 参数三:hash 的 value*/jedis.hset("userInfo", "name", "lisi");//添加多条数据

Map map = new HashMap<>();

map.put("age", "20");

map.put("sex", "1");

jedis.hmset("userInfo", map);//获取一条数据

String name = jedis.hget("userInfo", "name");

System.out.println(name);//获取多条数据

List list = jedis.hmget("userInfo", "age", "sex");for(String str : list) {

System.out.println(str);

}//获取 Hash 类型所有的数据

Map userMap = jedis.hgetAll("userInfo");for (Map.EntryuserInfo : userMap.entrySet()) {

System.out.println(userInfo.getKey()+ "--" +userInfo.getValue());

}//删除 用于删除 hash 类型数据//jedis.hdel("userInfo", "name");

}

看下结果

785ecb5d40c75e5884d7ecae8b84afd3.png

3、操作 list

@Testpublic voidtestList() {//左添加(上)

jedis.lpush("students", "Wang Wu", "Li Si");//右添加(下)

jedis.rpush("students", "Zhao Liu");//获取 start 起始下标 end 结束下标 包含关系

List students = jedis.lrange("students", 0, 2);for(String stu : students) {

System.out.println(stu);

}//获取总条数

Long total = jedis.llen("students");

System.out.println("总条数:" +total);//删除单条 删除列表中第一次出现的 Li Si//jedis.lrem("students", 1, "Li Si");//删除多条//jedis.del("students");

}

看下结果

db5f54a7c5b1c7bfd82d9113f7ed3052.png

4、操作 set

@Testpublic voidtestSet() {//添加数据

jedis.sadd("letters", "aaa", "bbb", "ccc", "ddd", "eee");//获取数据

Set letters = jedis.smembers("letters");for(String letter: letters) {

System.out.println(letter);

}//删除//jedis.srem("letters", "aaa", "bbb");

}

看下结果

5751dbe59e4990b9bb03538866758e52.png

5、操作 sorted set -有序

@Testpublic voidtestSortedSet() {

Map scoreMembers = new HashMap<>();

scoreMembers.put("zhangsan", 99D);

scoreMembers.put("lisi", 96D);

scoreMembers.put("wangwu", 92D);

scoreMembers.put("zhaoliu", 100D);

scoreMembers.put("tianqi", 95D);//添加数据

jedis.zadd("score", scoreMembers);//获取数据

Set scores = jedis.zrange("score", 0, 4);for(String score: scores) {

System.out.println(score);

}//获取总条数

Long total = jedis.zcard("score");

System.out.println("总条数:" +total);//删除//jedis.zrem("score", "zhangsan", "lisi");

}

看下结果

88ca3a6c56625198a5206b115229d4ee.png

6、Redis 中以层级关系、目录形式存储数据

@Testpublic voidtest() {//Redis 中以层级关系、目录形式存储数据

jedis.set("user:01", "user_zhangsan");

jedis.set("user:02", "user_lisi");

System.out.println(jedis.get("user:01"));

}

看下结果

1b16dd7ad9f61149badd0622bcd72255.png

7、获取所有 key&事务&删除

//获取所有 key

@Testpublic voidtestAllKeys() {//当前库 key 的数量

System.out.println(jedis.dbSize());//当前库 key 的名称

Set keys = jedis.keys("*");for(String key: keys) {

System.out.println(key);

}

}//操作事务

@Testpublic voidtestMulti() {

Transaction tx=jedis.multi();//开启事务

tx.set("tel", "10010");//提交事务//tx.exec();//回滚事务

tx.discard();

}//删除

@Testpublic voidtestDelete() {//删除 通用 适用于所有数据类型

jedis.del("score");

}

8、操作 byte

实体类user

importjava.io.Serializable;public class User implementsSerializable {private static final long serialVersionUID = 9148937431079191022L;privateInteger id;privateString username;privateString password;publicInteger getId() {returnid;

}public voidsetId(Integer id) {this.id =id;

}publicString getUsername() {returnusername;

}public voidsetUsername(String username) {this.username =username;

}publicString getPassword() {returnpassword;

}public voidsetPassword(String password) {this.password =password;

}

@OverridepublicString toString() {return "User{" +

"id=" + id +

", username='" + username + '\'' +

", password='" + password + '\'' +

'}';

}

}

序列化工具类

/*** 序列化工具类*/

public classSerializeUtil {/*** 将 java 对象转换为 byte 数组 序列化过程*/

public static byte[] serialize(Object object) {

ObjectOutputStream oos= null;

ByteArrayOutputStream baos= null;try{//序列化

baos = newByteArrayOutputStream();

oos= newObjectOutputStream(baos);

oos.writeObject(object);byte[] bytes =baos.toByteArray();returnbytes;

}catch(Exception e) {

e.printStackTrace();

}return null;

}/*** 将 byte 数组转换为 java 对象 反序列化*/

public static Object unserialize(byte[] bytes) {if(bytes == null)return null;

ByteArrayInputStream bais= null;try{//反序列化

bais = newByteArrayInputStream(bytes);

ObjectInputStream ois= newObjectInputStream(bais);returnois.readObject();

}catch(Exception e) {

e.printStackTrace();

}return null;

}

}

操作 byte

@Testpublic voidtestByte() {

User user= newUser();

user.setId(2);

user.setUsername("zhangsan");

user.setPassword("123");//序列化

byte[] userKey = SerializeUtil.serialize("user:" +user.getId());byte[] userValue =SerializeUtil.serialize(user);

jedis.set(userKey, userValue);//获取数据

byte[] userResult =jedis.get(userKey);//反序列化

User u =(User) SerializeUtil.unserialize(userResult);

System.out.println(u);

}

看下结果

b810b11b39e33be23f703abd0666f981.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值