天天看点

Reids框架NO_SQL非关系数据库的一些简单应用

#Redis

目的:利用Redis做数据缓存,缓存查询出来的对象数据。

NoSQL:Not Only SQL,非关系数据库。

关系型数据库指的是表结构存储,典型Oracle、MySQL、DB2。

一般应用:

- key-value存储 : 典型Redis

- 列存储 : HBase

- 文档存储 : MongoDB

- 图形存户:Neo4j

## 简介

- Redis是基于内存的数据库,常用于缓存

- Redis是采用C语言编写

- Redis是采用Key-value结构存储

- Redis中value值支持存储类型为字符串、哈希、列表、集合、可排序集合

- Redis支持高速读写操作,效率高

- Redis支持持久化、按一定策略将内存数据异步保存到磁盘

- Redis支持事务控制、消息传递等功能

##各种类型数据存储命令

1. 字符串操作(string)

![](https://i.imgur.com/9sJtYCB.png)

- set key value //存一组key value

- mset key value key value //存多组key value

- get key //获取value

- strlen key //获取value字符长度

- incr key //将value加1

- incrby key number //将value加number

- decr key //将value减1

- decrby key number //将value减number

- append key value1 //将value拼接value1

2. key操作

- keys * //查看有哪些key

- del key //删除key

- expire key n //设置key有效期为n秒

- rename key newkey //修改key名字

- type key //返回value值得类型

- exists key //判断key是否存在

3. 哈希操作 (hashmap)

![](https://i.imgur.com/3ROwSOy.png)

- hset key 字段名 字段值 //设置一个字段名和字段值

- hmset key 字段名1 字段值1 字段名2 字段值2 //设置多个

- hget key 字段名 //获取一个字段值

- hmget key 字段名1 字段名2 //获取多个字段值

- hlen key //获取字段数量

- hkeys key //获取字段名

- hdel key 字段名 //删除某个字段

4. 列表操作 (list)

![](https://i.imgur.com/ZGLumMQ.png)

- lpush key value //在列表头部插入一个元素

- rpush key value //在列表尾部插入一个元素

- lrange key 0 -1 //获取列表所有元素

- llen key //获取列表元素数量

- lrem key count value //删除列表指定数量的元素

- lset key index value //更新某个索引位置的元素

- lindex key index //获取指定索引位置的元素

- lpop key //删除列表头部第一个元素

- rpop key //删除列表尾部最后一个元素

- linsert key BEFROE|AFTER value newvalue //在列表value元素前或后插入newvalue值

5. 集合操作 (set)

A = {1,3,5}

B = {3,5,7,9}

A交B = {3,5}

A并B = {1,3,5,7,9}

A差B = {1}

B差A = {7,9}

- sadd key value value //向集合存数据

- smembers key //获取集合所有元素

- scard key //获取集合元素数量

- srem key value //删除value元素

- spop key //随机删除一个元素

- srandmember key n //随机返回n个元素

- sdiff key1 key2 //key1和key2集合的差集

- sinter key1 key2 //key1和key2集合交集

- sunion key1 key2 //key1和key2集合并集

- sdiffstore key key1 key2 //key1和key2集合的差集,结果存放到key集合中

6. 有序集合操作

排序规则:给每个元素配一个double分值,按分值排序,默认由小到大排序。

- zadd key score value score value //添加元素

- zcard key //获取元素数量

- zrange key 0 n //获取指定索引范围的元素,0 -1表示所有元素(由小到大排序)。

- zrevrange key 0 n//根据score由大到小排序,获取指定索引的元素

- zrem key value //删除某个元素

- zscore key value //返回元素的分值

- zrank key value //获取元素索引位置(由小到大排序)

- zrevrank key value //获取元素索引位置(由大到小排序)

- zcount key min max //统计分值在min和max之间的元素数量

7. 其他

##Java如何操作Redis存取数据

连接Redis

@Test//测试连接

public void test1(){

Jedis jedis = new Jedis("localhost");

//打印出PONG即为连接正常

System.out.println(jedis.ping());

}

字符串写操作

public void test2_1(){

long i = 10000L;

Jedis jedis = new Jedis("localhost");

jedis.set("i", i+"");

jedis.set("msg1", "Hello Redis");

jedis.set("msg2".getBytes(), "你好 Redis".getBytes());

jedis.close();

}

字符串读操作

public void test2_2(){

Jedis jedis = new Jedis("localhost");

String str = jedis.get("msg1");

byte[] bts = jedis.get("msg2".getBytes());

long i = Long.parseLong(jedis.get("i"));

String str2 = new String(bts);

System.out.println(str);

System.out.println(str2);

jedis.close();

}

**其他类型存取操作请参考课上示例代码**

##Java如何利用Redis做缓存

1. 对象存取方案

- 将Java对象转成json字符串然后写入redis,取值时将json串转成Java对象

@Test//写对象

public void test1(){

User user = new User();

user.setId(10);

user.setName("scott");

user.setPassword("123");

//写对象

Jedis jedis = new Jedis("localhost");

Gson gson = new Gson();

String s = gson.toJson(user);

jedis.set("user_"+user.getId(), s);

jedis.close();

}

@Test//读对象

public void test2(){

int id = 10;

Jedis jedis = new Jedis("localhost");

String s = jedis.get("user_"+id);

Gson gson = new Gson();

User user = gson.fromJson(s, User.class);

System.out.println(user.getId()+" "+user.getName());

jedis.close();

}

- 将Java对象序列化成字节数组然后写入redis,取值时反序列化成Java对象

@Test//写对象

public void test3(){

User user = new User();

user.setId(10);

user.setName("scott");

user.setPassword("123");

//写对象

Jedis jedis = new Jedis("localhost");

//序列化

byte[] value = SerializableUtil.serialize(user);

jedis.set("user_10".getBytes(), value);

jedis.close();

}

@Test//读对象

public void test4(){

int id = 10;

String key = "user_"+id;

Jedis jedis = new Jedis("localhost");

byte[] value = jedis.get(key.getBytes());

//反序列化

User user = (User)SerializableUtil.unserialize(value);

System.out.println(user.getId()+" "+user.getName()+" "+user.getPassword());

jedis.close();

}

继续阅读