Java使用Redis
1. 下载 jedis.jar
2. 五个数据类型 String List Hash Set SortedSet 操作
public class RedisTest {
<span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">main</span><span class="hljs-params">(String[] args)</span> <span class="hljs-keyword">throws</span> InterruptedException {
<span class="hljs-type">RedisTest</span> <span class="hljs-variable">redisTest</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">RedisTest</span>();
redisTest.KeyTest();
}
public void StringTest(){
// 连接本地的 Redis 服务
Jedis jedis = new Jedis("localhost");
// 查看服务是否运行
System.out.println("Server is running:"+jedis.ping());
<span class="hljs-comment">//String</span>
<span class="hljs-comment">//添加</span>
jedis.set(<span class="hljs-string">"food"</span>,<span class="hljs-string">"fish"</span>);
System.out.println(jedis.get(<span class="hljs-string">"food"</span>));
<span class="hljs-comment">//修改</span>
jedis.append(<span class="hljs-string">"food"</span>,<span class="hljs-string">"apple"</span>);
System.out.println(jedis.get(<span class="hljs-string">"food"</span>));
<span class="hljs-comment">//覆盖</span>
jedis.set(<span class="hljs-string">"food"</span>,<span class="hljs-string">"fish2"</span>);
System.out.println(jedis.get(<span class="hljs-string">"food"</span>));
<span class="hljs-comment">//删除</span>
jedis.del(<span class="hljs-string">"food"</span>);
System.out.println(jedis.get(<span class="hljs-string">"food"</span>));
<span class="hljs-comment">//同时设置</span>
jedis.mset(<span class="hljs-string">"name"</span>,<span class="hljs-string">"lwx"</span>,<span class="hljs-string">"age"</span>,<span class="hljs-string">"12"</span>);
System.out.println(jedis.mget(<span class="hljs-string">"name"</span>,<span class="hljs-string">"age"</span>));
}
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">MapTest</span><span class="hljs-params">()</span>{
<span class="hljs-type">Jedis</span> <span class="hljs-variable">jedis</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">Jedis</span>(<span class="hljs-string">"localhost"</span>);
System.out.println(<span class="hljs-string">"Server is running: "</span>+jedis.ping());
<span class="hljs-comment">//单条</span>
jedis.hset(<span class="hljs-string">"hash"</span>,<span class="hljs-string">"key"</span>,<span class="hljs-string">"v"</span>);
jedis.hget(<span class="hljs-string">"hash"</span>,<span class="hljs-string">"key"</span>);
<span class="hljs-comment">//多条</span>
Map<String,String> map = <span class="hljs-keyword">new</span> <span class="hljs-title class_">HashMap</span><>();
map.put(<span class="hljs-string">"name"</span>, <span class="hljs-string">"lwx"</span>);
map.put(<span class="hljs-string">"age"</span>,<span class="hljs-string">"12"</span>);
jedis.hmset(<span class="hljs-string">"map"</span>,map);
System.out.println(jedis.hmget(<span class="hljs-string">"map"</span>,<span class="hljs-string">"name"</span>));<span class="hljs-comment">//返回List</span>
<span class="hljs-comment">//获取hash所有数据</span>
System.out.println(jedis.hgetAll(<span class="hljs-string">"map"</span>));<span class="hljs-comment">//返回map类型</span>
<span class="hljs-comment">//其他</span>
System.out.println(jedis.hlen(<span class="hljs-string">"map"</span>));<span class="hljs-comment">//map键的个数</span>
System.out.println(jedis.exists(<span class="hljs-string">"map"</span>));<span class="hljs-comment">//是否存在key为map的记录</span>
System.out.println(jedis.hkeys(<span class="hljs-string">"map"</span>));<span class="hljs-comment">//返回map对象中的所有key</span>
System.out.println(jedis.hvals(<span class="hljs-string">"map"</span>));<span class="hljs-comment">//返回map对象中的所有value</span>
<span class="hljs-comment">//遍历</span>
Iterator<String> iter=jedis.hkeys(<span class="hljs-string">"map"</span>).iterator();
<span class="hljs-keyword">while</span> (iter.hasNext()){
<span class="hljs-type">String</span> <span class="hljs-variable">key</span> <span class="hljs-operator">=</span> iter.next();
System.out.println(key+<span class="hljs-string">":"</span>+jedis.hmget(<span class="hljs-string">"map"</span>,key));
}
<span class="hljs-comment">//删除</span>
jedis.hdel(<span class="hljs-string">"map"</span>,<span class="hljs-string">"name"</span>);
}
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">ListTest</span><span class="hljs-params">()</span> {
<span class="hljs-type">Jedis</span> <span class="hljs-variable">jedis</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">Jedis</span>(<span class="hljs-string">"localhost"</span>);
<span class="hljs-comment">//添加(添加到头部)</span>
jedis.lpush(<span class="hljs-string">"list"</span>, <span class="hljs-string">"Redis"</span>);
jedis.lpush(<span class="hljs-string">"list"</span>, <span class="hljs-string">"Mongodb"</span>);
jedis.lpush(<span class="hljs-string">"list"</span>, <span class="hljs-string">"Mysql"</span>);
<span class="hljs-comment">//添加(尾部)</span>
jedis.rpush(<span class="hljs-string">"list"</span>,<span class="hljs-string">"right"</span>);
<span class="hljs-comment">// 获取存储的数据并输出</span>
List<String> list = jedis.lrange(<span class="hljs-string">"list"</span>, <span class="hljs-number">0</span>, <span class="hljs-number">5</span>);
<span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> <span class="hljs-variable">i</span> <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i < list.size(); i++) {
System.out.println(<span class="hljs-string">"Stored string in redis:: "</span> + list.get(i));
}
System.out.println(jedis.llen(<span class="hljs-string">"list"</span>));<span class="hljs-comment">//长度</span>
<span class="hljs-comment">//左弹出</span>
jedis.lpop(<span class="hljs-string">"list"</span>);
<span class="hljs-comment">//右弹出</span>
jedis.rpop(<span class="hljs-string">"list"</span>);
<span class="hljs-comment">//删除 (key,个数,值)</span>
jedis.lrem(<span class="hljs-string">"list"</span>,<span class="hljs-number">1</span>,<span class="hljs-string">"Mysql"</span>);
}
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">SetTest</span><span class="hljs-params">()</span>{
<span class="hljs-type">Jedis</span> <span class="hljs-variable">jedis</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">Jedis</span>(<span class="hljs-string">"localhost"</span>);
<span class="hljs-comment">//添加</span>
jedis.sadd(<span class="hljs-string">"sname"</span>,<span class="hljs-string">"meepo"</span>);
jedis.sadd(<span class="hljs-string">"sname"</span>,<span class="hljs-string">"dota"</span>);
jedis.sadd(<span class="hljs-string">"sname"</span>,<span class="hljs-string">"poofu"</span>);
jedis.sadd(<span class="hljs-string">"sname"</span>,<span class="hljs-string">"noname"</span>);
<span class="hljs-comment">//移除</span>
jedis.srem(<span class="hljs-string">"sname"</span>,<span class="hljs-string">"noname"</span>);
<span class="hljs-comment">//获取所有加入的member</span>
System.out.println(jedis.smembers(<span class="hljs-string">"sname"</span>));<span class="hljs-comment">//返回set</span>
System.out.println(jedis.sismember(<span class="hljs-string">"sname"</span>, <span class="hljs-string">"meepo"</span>));<span class="hljs-comment">//判断 member 是否是集合的元素</span>
System.out.println(jedis.srandmember(<span class="hljs-string">"sname"</span>));<span class="hljs-comment">//返回随机一个member</span>
System.out.println(jedis.scard(<span class="hljs-string">"sname"</span>));<span class="hljs-comment">//返回集合的元素个数</span>
}
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">SortedSetTest</span><span class="hljs-params">()</span>{
<span class="hljs-type">Jedis</span> <span class="hljs-variable">jedis</span> <span class="hljs-operator">=</span><span class="hljs-keyword">new</span> <span class="hljs-title class_">Jedis</span>(<span class="hljs-string">"localhost"</span>);
Map<String ,Double> map = <span class="hljs-keyword">new</span> <span class="hljs-title class_">HashMap</span><>();
map.put(<span class="hljs-string">"a"</span>,<span class="hljs-number">60D</span>);
map.put(<span class="hljs-string">"b"</span>,<span class="hljs-number">70D</span>);
jedis.zadd(<span class="hljs-string">"score"</span>,map);
Set<String> set = jedis.zrange(<span class="hljs-string">"score"</span>,<span class="hljs-number">0</span>,<span class="hljs-number">2</span>);
System.out.println(set);
<span class="hljs-comment">//长度</span>
System.out.println(jedis.zcard(<span class="hljs-string">"score"</span>));
<span class="hljs-comment">//删除</span>
jedis.zrem(<span class="hljs-string">"score"</span>,<span class="hljs-string">"a"</span>,<span class="hljs-string">"b"</span>);
}
}
3. 键操作和失效时间
/**
* key 操作
* @throws InterruptedException
*/
public void KeyTest() {
Jedis jedis = new Jedis("localhost");
//key 数量
System.out.println(jedis.dbSize());
// 返回当前库中所有的 key 正则表达式
System.out.println(jedis.keys("*"));
<span class="hljs-comment">//删除key为sanmdde的对象 删除成功返回1 删除失败(或者不存在)返回 0</span>
System.out.println(jedis.del(<span class="hljs-string">"sanmdde"</span>));
<span class="hljs-comment">//jedis 排序</span>
<span class="hljs-comment">//注意,此处的rpush和lpush是List的操作。是一个双向链表(但从表现来看的)</span>
jedis.del(<span class="hljs-string">"a"</span>);<span class="hljs-comment">//先清除数据,再加入数据进行测试</span>
jedis.rpush(<span class="hljs-string">"a"</span>, <span class="hljs-string">"1"</span>);
jedis.lpush(<span class="hljs-string">"a"</span>,<span class="hljs-string">"6"</span>);
jedis.lpush(<span class="hljs-string">"a"</span>,<span class="hljs-string">"3"</span>);
jedis.lpush(<span class="hljs-string">"a"</span>,<span class="hljs-string">"9"</span>);
System.out.println(jedis.lrange(<span class="hljs-string">"a"</span>,<span class="hljs-number">0</span>,-<span class="hljs-number">1</span>));<span class="hljs-comment">// [9, 3, 6, 1]</span>
System.out.println(jedis.sort(<span class="hljs-string">"a"</span>)); <span class="hljs-comment">//[1, 3, 6, 9] //输入排序后结果</span>
System.out.println(jedis.lrange(<span class="hljs-string">"a"</span>,<span class="hljs-number">0</span>,-<span class="hljs-number">1</span>));
}
<span class="hljs-comment">// 层级目录</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">DirTest</span><span class="hljs-params">()</span>{
<span class="hljs-type">Jedis</span> <span class="hljs-variable">jedis</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">Jedis</span>(<span class="hljs-string">"localhost"</span>);
jedis.set(<span class="hljs-string">"login:user0:item0"</span>,<span class="hljs-string">"apple"</span>);
System.out.println(jedis.get(<span class="hljs-string">"login:user0:item0"</span>));
}
<span class="hljs-comment">/**
* key失效时间
*/</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">ExpireTest</span><span class="hljs-params">()</span>{
<span class="hljs-type">Jedis</span> <span class="hljs-variable">jedis</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">Jedis</span>(<span class="hljs-string">"localhost"</span>);
jedis.set(<span class="hljs-string">"code"</span>,<span class="hljs-string">"test"</span>);
<span class="hljs-comment">//设置失效时间 秒</span>
jedis.expire(<span class="hljs-string">"code"</span>,<span class="hljs-number">10</span>);
<span class="hljs-comment">//设置失效时间 毫秒</span>
jedis.pexpire(<span class="hljs-string">"code"</span>,<span class="hljs-number">10000</span>);
<span class="hljs-comment">//指定key的存活(有效时间) 时间为秒</span>
jedis.setex(<span class="hljs-string">"code"</span>, <span class="hljs-number">10</span>, <span class="hljs-string">"test"</span>);
<span class="hljs-comment">//毫秒</span>
jedis.psetex(<span class="hljs-string">"code"</span>, <span class="hljs-number">1000</span>, <span class="hljs-string">"test"</span>);
<span class="hljs-comment">//返回给定key的有效时间,如果是-1则表示永远有效 -2已失效</span>
System.out.println(jedis.ttl(<span class="hljs-string">"code"</span>));
System.out.println(jedis.pttl(<span class="hljs-string">"code"</span>));<span class="hljs-comment">//毫秒</span>
<span class="hljs-type">SetParams</span> <span class="hljs-variable">setParams</span> <span class="hljs-operator">=</span> SetParams.setParams();
<span class="hljs-comment">//不存在才能成功</span>
setParams.nx();
<span class="hljs-comment">//存在才能成功</span>
setParams.xx();
<span class="hljs-comment">//秒</span>
setParams.ex(<span class="hljs-number">5</span>);
<span class="hljs-comment">//毫秒</span>
setParams.px(<span class="hljs-number">20000</span>);
jedis.set(<span class="hljs-string">"code"</span>,<span class="hljs-string">"test"</span>,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");
<span class="hljs-type">byte</span>[] userKey = SerializeUtil.serialize(<span class="hljs-string">"user:"</span> + user.getId());
<span class="hljs-type">byte</span>[] userValue = SerializeUtil.serialize(user);
<span class="hljs-type">Jedis</span> <span class="hljs-variable">jedis</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">Jedis</span>();
jedis.set(userKey,userValue);
<span class="hljs-type">byte</span>[] bytes = jedis.get(userKey);
<span class="hljs-type">User</span> <span class="hljs-variable">u</span> <span class="hljs-operator">=</span> (User) SerializeUtil.unserialize(bytes);
System.out.println(u.getUsername());
}
序列化工具类
public class SerializeUtil {
<span class="hljs-comment">/**
* java对象转化为byte数组
*/</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-type">byte</span>[] serialize(Object object){
<span class="hljs-type">ObjectOutputStream</span> <span class="hljs-variable">oos</span> <span class="hljs-operator">=</span><span class="hljs-literal">null</span>;
<span class="hljs-type">ByteArrayOutputStream</span> <span class="hljs-variable">baos</span> <span class="hljs-operator">=</span> <span class="hljs-literal">null</span>;
<span class="hljs-keyword">try</span>{
baos = <span class="hljs-keyword">new</span> <span class="hljs-title class_">ByteArrayOutputStream</span>();
oos = <span class="hljs-keyword">new</span> <span class="hljs-title class_">ObjectOutputStream</span>(baos);
oos.writeObject(object);
<span class="hljs-type">byte</span>[] bytes = baos.toByteArray();
<span class="hljs-keyword">return</span> bytes;
}<span class="hljs-keyword">catch</span> (Exception e){
e.printStackTrace();
}
<span class="hljs-keyword">return</span> <span class="hljs-literal">null</span>;
}
<span class="hljs-comment">/**
* byte数组转化为java对象
*/</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> Object <span class="hljs-title function_">unserialize</span><span class="hljs-params">(<span class="hljs-type">byte</span>[] bytes)</span>{
<span class="hljs-keyword">if</span>(bytes == <span class="hljs-literal">null</span>){
<span class="hljs-keyword">return</span> <span class="hljs-literal">null</span>;
}
<span class="hljs-type">ByteArrayInputStream</span> <span class="hljs-variable">bais</span> <span class="hljs-operator">=</span> <span class="hljs-literal">null</span>;
<span class="hljs-keyword">try</span>{
bais = <span class="hljs-keyword">new</span> <span class="hljs-title class_">ByteArrayInputStream</span>(bytes);
<span class="hljs-type">ObjectInputStream</span> <span class="hljs-variable">ois</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">ObjectInputStream</span>(bais);
<span class="hljs-keyword">return</span> ois.readObject();
}<span class="hljs-keyword">catch</span> (Exception e){
e.printStackTrace();
}
<span class="hljs-keyword">return</span> <span class="hljs-literal">null</span>;
}
}