redis簡介及其基本操作,java訪問redis
阿新 • • 發佈:2019-03-14
println junit4 oid tac 及其 包含 序列 text ring
Redis
- Redis是采用C語言編寫,內存數據存儲。
- Redis讀寫速度異常快速,適合做應用緩存
- Redis支持字符串、哈希、列表、集合、有序集合結構存儲
- Redis支持持久化操作(RDB和AOF機制)
- Redis可以和Java、PHP、Python等語言結合訪問
Redis操作命令
字符串操作(string)
- set key value //設置一組key value
- get key //獲取value值
- mset key value key value //設置多組key value
- strlen key //查看value字符數量
- incr key //將value值加1
- incrby key n //將value值加n
- decr key //將value值減1
- decrby key n //將value值減n
- append key value //字符串拼接
key操作
- keys * //查看所有key
- del key //刪除key
- type key //查看value類型
- expire key n //指定失效時間(秒)
哈希操作(hash)
- hset key field value //設置一組字段名和字段值
- hmset key field1 value1 field2 value2... //設置多組字段名和字段值
- hget key field //獲取字段值
- hmget key field1 field2 //獲取多個字段值
- hkeys key //查看哈希包含的字段名
- hlen key //查看哈希包含的字段數量
- hdel key field //刪除哈希中的某個字段
列表操作(list)
- lpush key value //向列表頭部插入一個元素
- rpush key value //向列表尾部插入一個元素
- llen key //列表元素數量
- lrange key 0 -1 //獲取所有元素
- lpop //彈出列表頭部元素
集合操作
- sadd key member //添加元素
- srem key member //刪除元素
- smembers key //返回所有元素
- scard key //返回集合元素數量
- srandmember key n //隨機返回n個
- sunion key1 key2 //key1並key2
- sinter key1 key2 //key1交key2
- sdiff key1 key2 //key1差key2
有序集合操作
- zadd key score member //添加元素
- zcard key //集合元素數量
- zrange key 0 -1 //由小到大順序查看所有元素
- zrevrange key 0 -1 //由大到小順序查看所有元素
- zcount key min max //按分數統計元素數量
- zrem key memeber //刪除元素
Java訪問Redis
基於jedis.jar訪問
@Test
public void test1(){
Jedis jedis = new Jedis("localhost", 6379);
System.out.println(jedis.ping());
Set<String> keys = jedis.keys("*");//keys *
for(String key:keys){
System.out.println(key+":"+jedis.type(key));
}
jedis.close();
}
@Test
public void test2(){
Jedis jedis = new Jedis("localhost", 6379);
//取string
String value1 = jedis.get("name");//get name
System.out.println("name="+value1);
//取hash
String value2 = jedis.hget("dept10", "dname");//hget dept10 dname
System.out.println("dname="+value2);
//獲取hash所有字段值
Set<String> fields = jedis.hkeys("dept20");
for(String f:fields){
System.out.println(f+":"+jedis.hget("dept20", f));
}
jedis.close();
}
@Test
public void test3(){
Map<String, String> data = new HashMap<>();
data.put("no", "101");
data.put("name", "tom");
Jedis jedis = new Jedis("localhost", 6379);
jedis.hmset("mymap1", data);//存入map
Map<String,String> map = jedis.hgetAll("mymap1");//獲取map
System.out.println(map.get("no")+" "+map.get("name"));
jedis.close();
}
@Test
public void test4(){
Dept dept = new Dept();
dept.setDeptno(10);
dept.setDname("Java");
dept.setLoc("北京");
Jedis jedis = new Jedis("localhost", 6379);
jedis.set("dept".getBytes(), SerializableUtil.objectToBytes(dept));
jedis.close();
}
@Test
public void test5(){
Jedis jedis = new Jedis("localhost", 6379);
byte[] bytes = jedis.get("dept".getBytes());
Dept dept = (Dept)SerializableUtil.bytesToObject(bytes);
System.out.println(dept.getDeptno()+" "+dept.getDname()+" "+dept.getLoc());
jedis.close();
}
SerializableUtil.java
public class SerializableUtil {
public static Object bytesToObject(byte[] bytes){
ByteArrayInputStream input = null;
ObjectInputStream ois = null;
try{
input = new ByteArrayInputStream(bytes);
ois = new ObjectInputStream(input);
Object obj = ois.readObject();//反序列化將字節數組轉成Object
return obj;
}catch(Exception ex){
ex.printStackTrace();
return null;
}finally{
try {
input.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
ois.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static byte[] objectToBytes(Object obj){
ByteArrayOutputStream out = null;
ObjectOutputStream oos = null;
try{
out = new ByteArrayOutputStream();
oos = new ObjectOutputStream(out);
oos.writeObject(obj);//將obj序列化後寫入out對象中
byte[] bytes = out.toByteArray();
return bytes;
}catch(Exception e){
e.printStackTrace();
return null;
}finally{
try {
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
oos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
基於SpringData-redis訪問
-
引入spring-data-redis包、jedis、connection-pool包
-
在Spring配置文件定義RedisTemplate、JedisConnectionFactory組件
<bean id="redisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"> <property name="hostName" value="localhost"> </property> <property name="port" value="6379"></property> </bean> <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"> <property name="connectionFactory" ref="redisConnectionFactory"> </property> </bean>
-
註入RedisTemplate測試
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations={"classpath:applicationContext.xml"}) public class TestRedisTemplate { @Autowired private RedisTemplate<Object,Object> redisTemplate; @Test public void test1(){ redisTemplate.opsForValue().set("name", "XDL"); String value = (String)redisTemplate.opsForValue().get("name"); System.out.println(value); } @Test public void test2(){ Dept dept = new Dept(); dept.setDeptno(20); dept.setDname("XDL"); dept.setLoc("北京"); redisTemplate.opsForValue().set("dept", dept); Dept d = (Dept)redisTemplate.opsForValue().get("dept"); System.out.println(d.getDeptno()+" "+d.getDname()+" "+d.getLoc()); } }
Redis緩存使用
@Resource
private RedisTemplate<Object, Object> redisTemplate;
@RequestMapping(value="/dept/get",method=RequestMethod.GET)
public Dept loadDept(@RequestParam("no")int id){
//查找Redis緩存,有返回
Dept dept = (Dept)redisTemplate.opsForValue().get("dept:"+id);
//Redis沒有,調用deptDao查詢數據庫,並將結果放入緩存
if(dept == null){
System.out.println("從數據庫查詢加載數據");
dept = deptDao.findById(id);
redisTemplate.opsForValue().set("dept:"+id, dept);
}else{
System.out.println("從Redis緩存查詢加載數據");
}
return dept;
}
redis簡介及其基本操作,java訪問redis