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

来源:互联网 发布:人工智能与伦理道德 编辑:程序博客网 时间:2024/06/11 18:00
#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();
}
原创粉丝点击