redis的安装及java方法的实现

  • 非关系型数据库 (NoSQL)
  • key和value来存储数据
    1. 减缓数据库的压力(缓存)运行时将数据存储在内存中(**)
    1. 常用的数据加载到redis中,查询是先到redis中查询如果没有再到库里查询
  • 3.完全当数据库来使用(可以持久化的操作)
  • 4.session 共享 (**)
  • 5.消息队列(Mq)
  • redis的安装:

  • yum install -y tcl 插件
  • 进入解压的文件夹下面 make进行安装
  • cp redis-cli /usr/local/bin/
    cofig
  • mkdir /etc/redis—->存放配置文件
  • mkdir /var/redis
  • mkdir /var/redis/log—-> 存放日志
  • mkdir /var/redis/run 存放pid
  • mkdir/var/redis/data 存放数据
  • 8.进入redis根目录 复制配置文件
  • cp redis.conf /etc/redis/redis_6379.conf
  • 9.进入/etc/redis/目录 修改redis配置文件

  • bind 修改ip(如果是0.0.0.0表示任意的ip地址)

-对服务器的操作方法:
将 daemonize 改为yes –在后台运行

  • 开启这redis-cli 进入界面
  • get
  • set
  • del
  • 以上都是在后台的服务器上面 取数据
  • 关闭: 6379 shutdown
  • 数据结构

  • 以键值对进行对数据进行存储(单一的数据类型)
  • key和value的类型一致
  • 要么key和value都是为字符串(String类型)
  • 要没key和value都为字节数组(byte[]类型)
  • value 有五种数据结构:

    • String类型—>可保存一个单值的字符串或者字节数组
    • List 结构—>链表可保存多个字符串或者字节数组
    • set结构–>集合
    • Zset结构–有序set集合 可保存多个字符串,或者字节数组
    • Hash结构 哈希–>可以保存多个键值对字符串或者字节数组
  • 导入jar包:commons-pool2-2.4.2 和jedis-2.9.0.jar两个jar包

  • 获取Redis的连接对象
  • 首先我们要清楚redis并非是线程安全的,当多线程进行访问的时候容易造成高并发,出现数据的脏读,所以我们要引入连接池
  • 我们在使用这个redis的是后在java中怎么又变成了jedis这个本质就是一个操作redis的一个工具类,它提供了redis 的连接以及对redis的增删改的操作

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    package util;

    import redis.clients.jedis.Jedis;
    import redis.clients.jedis.JedisPool;
    import redis.clients.jedis.JedisPoolConfig;
    import redis.clients.jedis.ShardedJedis;
    import redis.clients.jedis.ShardedJedisPool;

    /*
    * 获取redis的连接类
    * @author Administrator
    *
    */
    public class RedisUtil {
    //非切片的客户端连接(普通的,单一的连接)
    private Jedis jedis;
    //非切片的客户端连接池---单机的Redis(单节点的)
    private static JedisPool jedisPool;
    //切片客户端的连接
    private ShardedJedis shardedJedis;
    //切片客户端的连接池
    private ShardedJedisPool shardedJedisPool;
    /**
    * 静态代码块
    */
    static{

    //连接池的配置
    JedisPoolConfig jedisPoolConfig =new JedisPoolConfig();
    //设置最大的连接数
    jedisPoolConfig.setMaxTotal(20);
    //最大的活动的数量
    jedisPoolConfig.setMaxIdle(20);
    //最小的空闲数
    jedisPoolConfig.setMinIdle(5);

    jedisPool =new JedisPool(jedisPoolConfig,"10.0.152.223",6379);
    }
    /**
    * 获取连接对象
    */
    public static Jedis getJedix()
    {
    return jedisPool.getResource();

    }
    public static void main(String[] args) {
    System.out.println(RedisUtil.getJedix());
    }

    }
  • 对字符串的方法:

  • 有一个方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74

package util;

import java.util.Set;

import redis.clients.jedis.Jedis;

/**
* redis操作字符串
* @author Administrator
*
*/
public class RedisStr {
public static void main(String[] args) {
Jedis jedis =RedisUtil.getJedix();
//清空数据
//jedis.flushDB();
//存放一个键值对
//String set = jedis.set("username","老司机");
//System.out.println(set);
//根据key来判断是否存在
//System.out.println(jedis.exists("username"));
//根据可以来获取value
//jedis.set("password", "水煎蛋");
//String string = jedis.get("username");
//System.out.println(string);
//获取redis的所有的key
//Set<String> keys = jedis.keys("*");
//System.out.println(keys);
//删除某个键值对,返回值是受影响的行数
//Long del = jedis.del("password");
//System.out.println(del);
//7. 存放键值对,并且设置过期时间
//jedis.set("老王", "在隔壁");
//System.out.println(jedis.expire("老王", 5));
//查看键值对的剩余时间
//System.out.println(jedis.ttl("老王"));
//让该键值对立即生效(移除生存时间)
//System.out.println(jedis.persist("老王"));
//10.在某个键值对后面追加
//jedis.set("key1", "abc");
//System.out.println(jedis.append("key1", "def"));

//System.out.println(jedis.get("key1"));

//11.增加多个键值对
//meset,单数是key双数是key所对应的value
//System.out.println(jedis.mset("key2","value2","key3","value3"));
//12 根据多个key 获取多个value
//System.out.println(jedis.mget("key2","key3"));
//jedis.flushDB();
//一个锁,第一个人如果set了其他人就无法对这个键值对进行操作,第一个人将把持资源
//System.out.println("防止覆盖:"+jedis.setnx("key4", "value4"));
//System.out.println(jedis.setnx("key4", "value4-new"));
//System.out.println(jedis.get("key4"));
//设置有效时间
//System.out.println("设置有效时间:"+jedis.setex("key5", 5, "value5"));
//System.out.println(jedis.get("key5"));
//数学运算
//jedis.set("key6", "100");
//对值进行自增运算
//System.out.println(jedis.incr("key6"));
//对值进行减一运算
//System.out.println(jedis.decr("key6"));
//可增加任意整数值
//System.out.println(jedis.incrBy("key6",50));
//可减少任意整数值
//System.out.println(jedis.decrBy("key6", 100));


}


}
  • 对集合的操作:
    • 无序集合的操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package util;

import redis.clients.jedis.Jedis;

/**
* 操作set集合
* @author Administrator
*
*/

public class RedisSet {
public static void main(String[] args) {
Jedis jedis =RedisUtil.getJedix();
//jedis.flushDB();
//向一个redis中新增了一个键值对的结构
//添加set集合
//System.out.println(jedis.sadd("set1", "s1"));
//System.out.println(jedis.sadd("set1", "s2"));
System.out.println(jedis.sadd("set1", "s3","s4","s5","s5"));
//2. 根据key 获取set集合的元素
System.out.println(jedis.smembers("set1"));
//3. 删除set集合中的某个元素
System.out.println(jedis.srem("set1", "s1","s4"));
//4. 随机移除(获取) set集合的一个元素
System.out.println(jedis.spop("set1"));
//5. set集合的长度
System.out.println(jedis.smembers("set1"));
//6. 判断集合在set集合的中是否存在
System.out.println(jedis.scard("set1"));
}

}
- 有序集合:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package util;

import java.util.HashMap;
import java.util.Map;

import redis.clients.jedis.Jedis;

public class RedisZSet {
public static void main(String[] args) {
Jedis jedis =RedisUtil.getJedix();
jedis.flushDB();
//向redis中新增一个键值对,value是zset的有序set集合
System.out.println(jedis.zadd("zset1",3.4,"z1"));
System.out.println(jedis.zadd("zset2", 5.3,"z2"));
//根据返回的从有序集合中获取元素 0 -1 中获取下标从0 开始0-0,从下标0开始
//从下表0开始到下标1 的元素结束包括自身
System.out.println(jedis.zrange("zset1", 0, -1));
//再添加是,会使用该map集合的key,作为有想set集合中的元素,map 的value当做元素的分值
Map<String, Double> map =new HashMap<>();
map.put("z3", 1.1);
map.put("z4", 8.8);
map.put("z5", 3.0);
jedis.zadd("zset1", map);
System.out.println(jedis.zrange("zset1", 0, -1));
//查看有序集合中的元素的分值
System.out.println(jedis.zscore("zset1", "z3"));
//查看有序集合中元素的排名
System.out.println(jedis.zrank("zset1", "z3"));
//删除集合中的某个元素
System.out.println(jedis.zrem("zset1", "z3"));
//查看接中元素的个数
System.out.println(jedis.zcard("zset1"));
//6.根据分数逇范围,查看该范围的分数内的元素的个数
System.out.println(jedis.zcount("zset1", 1, 5));
//7.增加一个元素的分数和减少一个分数
System.out.println(jedis.zincrby("zsset1", 6, "z5"));
System.out.println(jedis.zrange("zset1", 0, -1));

}
}
  • 链表的操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package util;

import redis.clients.jedis.Jedis;

/**
* 链表操作
* @author Administrator
*
*/
public class RedisList {

public static void main(String[] args) {
Jedis jedis =RedisUtil.getJedix();
jedis.flushDB();
System.out.println(jedis.lpush("list1", "l1"));
System.out.println(jedis.lpush("list1", "l2"));
System.out.println(jedis.rpush("list1", "l2"));
System.out.println(jedis.rpush("list1", "l2"));
System.out.println(jedis.lpush("list1", "l2","l5","l6","l7"));
System.out.println(jedis.lrange("list1", 0, -1));
//根据范围获取元素
System.out.println(jedis.lrange("list1", 0, 3));
//删除元素根据count参数指定删除的个数,
jedis.lpush("list1", "l1");
System.out.println(jedis.lrem("list1", 2, "l1"));
System.out.println(jedis.lrange("list1", 0, -1));
//根据范围删除元素,删除的是区间以外的元素
System.out.println(jedis.ltrim("list1", 0, 3));
//获取原素,弹栈
System.out.println(jedis.lpop("list1"));
System.out.println(jedis.rpop("list1"));
//修改元素的内容
System.out.println(jedis.lset("list1", 1, "1100"));
System.out.println(jedis.lrange("list1", 0, -1));
//查看联表的长度
System.out.println(jedis.llen("list1"));





}

}
  • hash的操作:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package util;

import java.util.HashMap;
import java.util.Map;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.exceptions.JedisClusterMaxRedirectionsException;

/**
* 操作数:hash
* @author Administrator
*
*/

public class RedisHash {
public static void main(String[] args) {
Jedis jedis=RedisUtil.getJedix();
jedis.flushDB();
//向redis中新增一个键值对,value为hash类型
Map<String, String> map=new HashMap<>();
map.put("key1", "val1");
map.put("key2", "val2");
map.put("key3", "val3");
map.put("key4", "val4");
map.put("key5", "val5");
//1. 向hash中存放一个键值对
jedis.hset("hash1", "key4", "val4");
//向hash中存放多喝键值对
jedis.hmset("hash1", map);
//获取hash中所有的键值对
System.out.println(jedis.hgetAll("hash1"));
//4. 获取hash中的所有的key
System.out.println(jedis.hkeys("hash1"));
//5.获取hash中的value
System.out.println(jedis.hvals("hash2"));
//6. 将hash中给的key5 的值加5,如果该元素不存在,那么就会想hash中添加该元素
System.out.println(jedis.hincrBy("hash3","key5",5));
//7.删除hash中的一个或者多个键值对
System.out.println(jedis.hdel("hash1", "key1","key2"));
System.out.println(jedis.hgetAll("hash1"));
//8. 获取hash中的某一个键值对,(根据key 获取value)
System.out.println(jedis.hget("hashs1", "key2"));
//9. 获取hash汇总的多个键值对(根据多个key 获取多个)
System.out.println(jedis.hmget("hash1", "key2","key3"));
//10. 查看hash 中的键值对的个数
System.out.println(jedis.hlen("hash1"));
//11. 根据key 来判断该键值对在hash是否存在
System.out.println(jedis.hexists("hash1", "key2"));


}
}
  • 如何将一个实体类对象的放入到redis 里:
    • 序列化(仅可以自己使用)
    • json
    • xml
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值