Java使用Redis
1.下载 jedis.jar
2. 五个数据类型String List Hash Set SortedSet 操作
public class RedisTest {
public static void main(String[] args) throws InterruptedException {
RedisTest redisTest = new RedisTest();
redisTest.KeyTest();
}
public void StringTest(){
//连接本地的 Redis 服务
Jedis jedis = new Jedis("localhost");
//查看服务是否运行
System.out.println("Server is running: "+jedis.ping());
//String
//添加
jedis.set("food","fish");
System.out.println(jedis.get("food"));
//修改
jedis.append("food","apple");
System.out.println(jedis.get("food"));
//覆盖
jedis.set("food","fish2");
System.out.println(jedis.get("food"));
//删除
jedis.del("food");
System.out.println(jedis.get("food"));
//同时设置
jedis.mset("name","lwx","age","12");
System.out.println(jedis.mget("name","age"));
}
public void MapTest(){
Jedis jedis = new Jedis("localhost");
System.out.println("Server is running: "+jedis.ping());
//单条
jedis.hset("hash","key","v");
jedis.hget("hash","key");
//多条
Map<String,String> map = new HashMap<>();
map.put("name", "lwx");
map.put("age","12");
jedis.hmset("map",map);
System.out.println(jedis.hmget("map","name"));//返回List
//获取hash所有数据
System.out.println(jedis.hgetAll("map"));//返回map类型
//其他
System.out.println(jedis.hlen("map"));//map键的个数
System.out.println(jedis.exists("map"));//是否存在key为map的记录
System.out.println(jedis.hkeys("map"));//返回map对象中的所有key
System.out.println(jedis.hvals("map"));//返回map对象中的所有value
//遍历
Iterator<String> iter=jedis.hkeys("map").iterator();
while (iter.hasNext()){
String key = iter.next();
System.out.println(key+":"+jedis.hmget("map",key));
}
//删除
jedis.hdel("map","name");
}
public void ListTest() {
Jedis jedis = new Jedis("localhost");
//添加(添加到头部)
jedis.lpush("list", "Redis");
jedis.lpush("list", "Mongodb");
jedis.lpush("list", "Mysql");
//添加(尾部)
jedis.rpush("list","right");
// 获取存储的数据并输出
List<String> list = jedis.lrange("list", 0, 5);
for (int i = 0; i < list.size(); i++) {
System.out.println("Stored string in redis:: " + list.get(i));
}
System.out.println(jedis.llen("list"));//长度
//左弹出
jedis.lpop("list");
//右弹出
jedis.rpop("list");
//删除 (key,个数,值)
jedis.lrem("list",1,"Mysql");
}
public void SetTest(){
Jedis jedis = new Jedis("localhost");
//添加
jedis.sadd("sname","meepo");
jedis.sadd("sname","dota");
jedis.sadd("sname","poofu");
jedis.sadd("sname","noname");
//移除
jedis.srem("sname","noname");
//获取所有加入的member
System.out.println(jedis.smembers("sname"));//返回set
System.out.println(jedis.sismember("sname", "meepo"));//判断 member 是否是集合的元素
System.out.println(jedis.srandmember("sname"));//返回随机一个member
System.out.println(jedis.scard("sname"));//返回集合的元素个数
}
public void SortedSetTest(){
Jedis jedis =new Jedis("localhost");
Map<String ,Double> map = new HashMap<>();
map.put("a",60D);
map.put("b",70D);
jedis.zadd("score",map);
Set<String> set = jedis.zrange("score",0,2);
System.out.println(set);
//长度
System.out.println(jedis.zcard("score"));
//删除
jedis.zrem("score","a","b");
}
}
3.键操作和失效时间
/**
* key操作
* @throws InterruptedException
*/
public void KeyTest() {
Jedis jedis = new Jedis("localhost");
//key数量
System.out.println(jedis.dbSize());
//返回当前库中所有的key 正则表达式
System.out.println(jedis.keys("*"));
//删除key为sanmdde的对象 删除成功返回1 删除失败(或者不存在)返回 0
System.out.println(jedis.del("sanmdde"));
//jedis 排序
//注意,此处的rpush和lpush是List的操作。是一个双向链表(但从表现来看的)
jedis.del("a");//先清除数据,再加入数据进行测试
jedis.rpush("a", "1");
jedis.lpush("a","6");
jedis.lpush("a","3");
jedis.lpush("a","9");
System.out.println(jedis.lrange("a",0,-1));// [9, 3, 6, 1]
System.out.println(jedis.sort("a")); //[1, 3, 6, 9] //输入排序后结果
System.out.println(jedis.lrange("a",0,-1));
}
// 层级目录
public void DirTest(){
Jedis jedis = new Jedis("localhost");
jedis.set("login:user0:item0","apple");
System.out.println(jedis.get("login:user0:item0"));
}
/**
* key失效时间
*/
public void ExpireTest(){
Jedis jedis = new Jedis("localhost");
jedis.set("code","test");
//设置失效时间 秒
jedis.expire("code",10);
//设置失效时间 毫秒
jedis.pexpire("code",10000);
//指定key的存活(有效时间) 时间为秒
jedis.setex("code", 10, "test");
//毫秒
jedis.psetex("code", 1000, "test");
//返回给定key的有效时间,如果是-1则表示永远有效 -2已失效
System.out.println(jedis.ttl("code"));
System.out.println(jedis.pttl("code"));//毫秒
SetParams setParams = SetParams.setParams();
//不存在才能成功
setParams.nx();
//存在才能成功
setParams.xx();
//秒
setParams.ex(5);
//毫秒
setParams.px(20000);
jedis.set("code","test",setParams);
}
层级目录
4.事务操作
使用set指定key和value后,执行提交事务会存储数据库中,回滚后则set无效
/**
* 事务
*/
public void transactionTest(){
Jedis jedis = new Jedis("localhost");
//开启事务
Transaction transaction = jedis.multi();
transaction.set("tran2","test");
//提交事务
// transaction.exec();
//事务回滚
transaction.discard();
}
5.bity数组操作
/**
* bite数组
*/
public void BytesTest(){
User user = new User();
user.setId(2);
user.setUsername("lwx");
user.setPassword("123456");
byte[] userKey = SerializeUtil.serialize("user:" + user.getId());
byte[] userValue = SerializeUtil.serialize(user);
Jedis jedis = new Jedis();
jedis.set(userKey,userValue);
byte[] bytes = jedis.get(userKey);
User u = (User) SerializeUtil.unserialize(bytes);
System.out.println(u.getUsername());
}
序列化工具类
public class SerializeUtil {
/**
* java对象转化为byte数组
*/
public static byte[] serialize(Object object){
ObjectOutputStream oos =null;
ByteArrayOutputStream baos = null;
try{
baos = new ByteArrayOutputStream();
oos = new ObjectOutputStream(baos);
oos.writeObject(object);
byte[] bytes = baos.toByteArray();
return bytes;
}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 = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream(bais);
return ois.readObject();
}catch (Exception e){
e.printStackTrace();
}
return null;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律