Redis的基本数据类型详解,和用java进行连接Redis的操作,把对象序列化到Redis中
Posted SmallCuteMonkey
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis的基本数据类型详解,和用java进行连接Redis的操作,把对象序列化到Redis中相关的知识,希望对你有一定的参考价值。
Redis入门的操作:
**Nosql(Not only sql)😗*非结构化的数据库:
- 键值对
- 列存储
- 文档型
- 图形化的存储
Redis通过键值对进行我们的存储,redis底层使用键值对的方式,Memecached和Redis都是内存行的存储方式,他的数据存储在内存中,定时会把数据存储到文件中
Redis使用:
5. 在windows中限制为版本3.2的redis,需要ruby的支持
6. Linux中可以使用其他的版本的的redis
Linux中去安装的redis:需要把你的redis的启动看成守护线程,把Redis的redis.conf,里面的deamonsize 修改成yes,当成线程启用。
Redis的数据类型:
string
是redis的最基本的类型,你可以理解为和Memcached的一模一样类型,一个key,对应一个value.
String类型是二进制安全的。意思是redis的string类型可以包含任何数据,比如jpg图片或者序列化的对象(也就是student,user这些对象但是一定要实现Serializable),string类型是Redis最基本的数据类型,一个键最大存储512MB.
我们开始使用的时候,可以使用客户端进行基体的操作:
到你的redis目录下;redis-cli
127.0.0.1:6379> set a "b"
OK
127.0.0.1:6379> get a
"b"
127.0.0.1:6379>
Hash
Redis hash 是一个string类型的filed和value的映射表,hash特别适合用于存储对象。
1.hset key value(key value) :向Hash中存入值。
2.hget key value(key):取出Hash中key的值。
Hmset 设值
Hgetall取值
127.0.0.1:6379> hset people name houzhicong
(integer) 1
127.0.0.1:6379> hget people name
List
Redis列表是最简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部或者尾部。可以重复
Lpush 插入
Lrange 查看
127.0.0.1:6379> lpush list java
(integer) 6
127.0.0.1:6379> lpush list javaweb
(integer) 7
127.0.0.1:6379> lpush list smallhzc
(integer) 8
127.0.0.1:6379> lpush list java
(integer) 9
127.0.0.1:6379> lrange list 0 10
1) "java"
2) "smallhzc"
3) "javaweb"
4) "java"
5) "oracle"
6) "mysql"
7) "spring"
8) "jsp"
9) "java"
Set
Set是一个无序的集合(存储不可以进行重复,如果你是重复数据,他只会存储一份)
集合是通过哈希表实现的,所以添加,删除,查找的复杂度是O(1).
sadd命令
添加一个string元素,key对应的set集合中,成功返回1,否则为0
Sadd插入数据
smembers查询,可以看到不可以进行重复的添加
127.0.0.1:6379> sadd set redis
(integer) 1
127.0.0.1:6379> sadd set oracle
(integer) 1
127.0.0.1:6379> sadd set oracle
(integer) 0
127.0.0.1:6379> sadd set houzhicong
(integer) 1
127.0.0.1:6379> smembers set
1) "houzhicong"
2) "oracle"
3) "redis"
Zset(sorted set)是string类型的集合。
zset和set一样不可以有重复的成员。
不同的是每个元素会关联一个double类型的分数,redis正是通过分数来为集合中的成员进行从大到小的排序。
zset的成员是唯一的,但分数可以重复。
zadd命令 添加元素到集合
zrangebyscore查看
127.0.0.1:6379> zadd score 1 80
(integer) 1
127.0.0.1:6379> zadd score 2 77
(integer) 1
127.0.0.1:6379> zadd score 3 66
(integer) 1
127.0.0.1:6379> zrange score 0 10
1) "80"
2) "77"
3) "66"
需要用一个double类型的数字进行绑定
java 代码连接Redis
需要导入相关的jar包:
<!-- 引入redis客户端依赖 -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.4.2</version>
</dependency>
package com.hzc;
import redis.clients.jedis.Jedis;
import java.util.*;
public class TestRedisConection {
static Jedis jedis = new Jedis("192.168.48.5");
public static void main(String[] args) {
System.out.println("开始Redis的服务----------");
System.out.println("服务连接成功---------------"+jedis.ping());
// setString();
// hash();
// redisSet();
// redisList();
set();
}
public static void setString() {
System.out.println("存储数据到时String数据中去");
jedis.set("username", "iloveyouhouandmyparents12");
// jedis.del("username");
System.out.println(jedis.get("username"));
}
public static void hash() {
// 存储数据到hash里边
String mset = jedis.mset("name", "hou", "age", "22", "address", "hunan");
// 由于key相同所以后面的这个会覆盖掉前面的
String mset1 = jedis.mset("name", "jiejie", "age", "25", "address", "hunan");
System.out.println(mset);
// 获取你的redis中的数据
List<String> list = jedis.mget("name", "age", "address");
for (String string :
list) {
System.out.println(string);
}
}
public static void redisSet() {
// 放入值到你的list中
jedis.hset("list1", "name", "list11");
jedis.hset("list1", "age", "23");
// 23也会被覆盖掉
jedis.hset("list1", "age", "53");
jedis.hset("list1", "address", "美国");
// set里面的值不可以进行重复
jedis.hset("list1", "address", "美国");
String name = jedis.hget("list1", "name");
System.out.println(name);
// 获取list1中的所有的内容
System.out.println("-----------------hset中的所有的内容");
Map<String, String> map = jedis.hgetAll("list1");
Set<String> set = map.keySet();
for (String string :
set) {
System.out.println(string);
}
Collection<String> values = map.values();
for (String value :
values) {
System.out.println(value);
}
}
public static void redisList() {
// 通过这个方式存储数据到list
jedis.lpush("student", "zhangsan");
jedis.lpush("student", "lisi");
jedis.lpush("student", "王五");
Long lo = jedis.lpush("student", "小狗");
System.out.println(lo);
//这个地方就是取出数据,第一个数据的名字,第二个开始的位置,第三个结束的位置进
List<String> list = jedis.lrange("student", 0, jedis.llen("student"));
for (String string : list) {
System.out.println(string);
}
// 通过这个方法可以看到key为student里边一共存储了多少个数据;
System.out.println(jedis.llen("student"));
System.out.println("弹出一个元素:"+jedis.lpop("student"));
System.out.println("弹出一个元素:"+jedis.lpop("student"));
System.out.println("弹出一个元素"+jedis.lpop("student"));
System.out.println("弹出一个元素"+jedis.lpop("student"));
System.out.println(jedis.llen("student"));
}
public static void set(){
// 这个进行数据的存储
jedis.sadd("set001","houzhicong");
jedis.sadd("set001","don't fear anything");
jedis.sadd("set001","roothouzhicong");
jedis.sadd("set001","whatever you through,it's the best arrangement");
// 获取他里边的数据
Set<String> set = jedis.smembers("set001");
for (String string:set
) {
System.out.println(string);
}
// 也可以用迭代器进行取出值来
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
}
建立一个Pojo类Person:
package com.hzc.po;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data
@AllArgsConstructor
@NoArgsConstructor
//这个类是进行序列化接口-----可以标识你的这个类对象可以转换为二进制
public class Person implements Serializable {
int id;
String name;
String address;
int age;
}
RedisObject:
package com.hzc.po;
import redis.clients.jedis.Jedis;
public class RedisObject {
static Jedis jedis=new Jedis("192.168.48.5");
public static void main(String[] args) {
// 测试连接的效果
System.out.println(jedis.ping());
//进行反序列化的操作
Person person2 = get();
System.out.println(person2);
}
// 创建一个person对象存储到Redis中
public static void save(){
// 通过二进制进行相关的插入的操作,但是插入的是一个二进制文件,还需要反序列化
Person person=new Person(1001,"smallcuteMonkey","hunan",20);
jedis.set("person".getBytes(),SerializeUtil.serialize(person));
Person person1=new Person(1002,"iloveyoumyself","hunan",23);
jedis.set("person1".getBytes(),SerializeUtil.serialize(person1));
}
//从redis中读取数据到java中
public static Person get(){
byte[] personBytes = jedis.get("person".getBytes());
return (Person) SerializeUtil.unserialize(personBytes);
}
}
以上是关于Redis的基本数据类型详解,和用java进行连接Redis的操作,把对象序列化到Redis中的主要内容,如果未能解决你的问题,请参考以下文章