NoSQL之Redis

关于关系型数据库和nosql数据库

       关系型数据库是基于关系表的数据库,最终会将数据持久化到磁盘上,而nosql数据库是基于特殊的结构,并将数据存储到内存的数据库,也能进行持久化操作。从性能上而言,nosql数据库 要优于关系型数据库,从安全性上而言关系型数据库要优于nosql数据库,所以在实际开发中一个项目中nosql和关系型数据库会一起使用,达到性能和安全性的双保证。

redis是一种高级的key-value的存储系统

其中的key是字符串类型,尽可能满足如下几点:

  1. key不要太长,最好不要操作1024个字节,这不仅会消耗内存还会降低查找效率
  2. key不要太短,如果太短会降低key的可读性
  3. 在项目中,key最好有一个统一的命名规范(根据企业的需求)

其中value  支持五种数据类型:

  1. 字符串型 string
  2. 字符串列表 lists
  3. 字符串集合 sets
  4. 有序字符串集合 sorted sets
  5. 哈希类型 hashs

前端启动:

Last login: Fri Jul 20 18:46:39 2018 from 127.0.0.1

root@shu-quan:~# cd /usr/local/share/application/redis

root@shu-quan:/usr/local/share/application/redis# ls

bin  redis-3.0.0  redis-3.0.0.tar.gz

root@shu-quan:/usr/local/share/application/redis# cd bin/

root@shu-quan:/usr/local/share/application/redis/bin# ls

redis-benchmark  redis-check-dump  redis-sentinel

redis-check-aof  redis-cli         redis-server

root@shu-quan:/usr/local/share/application/redis/bin# ./redis-cli

127.0.0.1:6379> set username  zhangsan

127.0.0.1:6379> set username  zhangsan

OK

127.0.0.1:6379> get user

(nil)

127.0.0.1:6379> get username

"zhangsan"

127.0.0.1:6379>

 

 

root@shu-quan:/usr/local/share/application/redis/redis-3.0.0# ls

00-RELEASENOTES  COPYING  Makefile   redis.conf       runtest-sentinel  tests

BUGS             deps     MANIFESTO  runtest          sentinel.conf     utils

CONTRIBUTING     INSTALL  README     runtest-cluster  src

root@shu-quan:/usr/local/share/application/redis/redis-3.0.0# cd ../

root@shu-quan:/usr/local/share/application/redis# ll

总用量 1344

drwxr-xr-x 4 root root    4096 7月  20 19:31 ./

drwxr-xr-x 4 root root    4096 7月  20 19:08 ../

drwxr-xr-x 2 root root    4096 7月  20 19:31 bin/

drwxrwxr-x 6 root root    4096 4月   1  2015 redis-3.0.0/

-rw-r--r-- 1 root root 1358081 5月  14  2015 redis-3.0.0.tar.gz

root@shu-quan:/usr/local/share/application/redis# cd bin/

root@shu-quan:/usr/local/share/application/redis/bin# ls

redis-benchmark  redis-check-dump  redis-sentinel

redis-check-aof  redis-cli         redis-server

root@shu-quan:/usr/local/share/application/redis/bin# sudo redis-server

sudo: redis-server:找不到命令

root@shu-quan:/usr/local/share/application/redis/bin# ./redis-server

8303:C 20 Jul 19:37:40.820 # Warning: no config file specified, using the default config. In order to specify a config file use ./redis-server /path/to/redis.conf

8303:M 20 Jul 19:37:40.821 * Increased maximum number of open files to 10032 (it was originally set to 1024).

                _._                                                 

           _.-``__ ''-._                                            

      _.-``    `.  `_.  ''-._           Redis 3.0.0 (00000000/0) 64 bit

  .-`` .-```.  ```\/    _.,_ ''-._                                  

 (    '      ,       .-`  | `,    )     Running in standalone mode

 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379

 |    `-._   `._    /     _.-'    |     PID: 8303

  `-._    `-._  `-./  _.-'    _.-'                                  

 |`-._`-._    `-.__.-'    _.-'_.-'|                                 

 |    `-._`-._        _.-'_.-'    |           http://redis.io       

  `-._    `-._`-.__.-'_.-'    _.-'                                   

 |`-._`-._    `-.__.-'    _.-'_.-'|                                 

 |    `-._`-._        _.-'_.-'    |                                 

  `-._    `-._`-.__.-'_.-'    _.-'                                  

      `-._    `-.__.-'    _.-'                                      

          `-._        _.-'                                          

              `-.__.-'                                              

 

后台启动与关闭:

 

 

Redis的入门:

      //1、获得连接对象

      Jedis jedis = new Jedis("111.186.103.100", 6379);

      //2、获得数据

      String username = jedis.get("username");

      System.out.println(username);

     

      //3、存储

      jedis.set("addr", "北京");

      System.out.println(jedis.get("addr"));

通过jedis的pool获得jedis的连接对象:

public void test2(){

      //0、创建池子的配置对象

      JedisPoolConfig poolConfig = new JedisPoolConfig();

      poolConfig.setMaxIdle(30);//最大闲置个数

      poolConfig.setMinIdle(10);//最小闲置个数

      poolConfig.setMaxTotal(50);//最大连接数

     

      //1、创建一个redis的连接池

      JedisPool pool = new JedisPool(poolConfig, "111.186.103.100", 6379);

      //2、从池子中获取redis的连接资源

      Jedis jedis = pool.getResource();

     

      //3、操作数据库,json很典型

      jedis.set("xxx","yyyy");

      System.out.println(jedis.get("xxx"));

     

      //4、关闭资源

      jedis.close();

      pool.close();//真正开发不关池子

   }

Spring Data Redis 为四种Redis客户端实现提供了连接工厂:

1 JedisConnectionFactory

@Bean
public RedisConnectionFactory redisCF(){
    JedisConnectionFactory cf = new JedisConnnectionFactory();
    cf.setHostName("redis-server");
    cf.setPort(7393);
    cf.setPassword("xxxxxx");
    return cf;
}

2 JredisConnectionFactory

3 LettuceConnectionFactory

4 SrpConnectionFactory

所有的Redis连接工厂都具有setHostName()、setPort()和setPassword()方法。

使用Redis连接工厂可以生成连接(RedisConnection)。RedisConnection conn = cf.getConnection();

conn.set("xx".getBytes(),"ss".getBytes());字节数组很麻烦的。所以,Spring Data Redis以模板的形式提供了更高级的数据访问方案。RedisTemplate和StringRedisTemplate

RedisConnectionFactory cf =.....

RedisTemplate<String,Product> redis = new RedisTemplate<String,Product>();

redis.setConnectionFactory(cf);            // 注意RedisTemplate使用了两个类型进行参数化。

那么,如果使用的key和value都是String类型,可以使用StringRedisTemplate.

RedisConnectionFactory cf =.....

StringRedisTemplate redis = new StringRedisTemplate(cf); //StringRedisTemplate模板有一个接受RedisConnectionFactory的构造器,因此没有要构建后在调用setConnectionFactory

常用的操作:

使用RedisTemplate<String,Product>

redis.opsForValue().set(product.getId(),product); //根据id作为key保存

Product product = redis.opsForValue().get("123456");//根据id查询产品

在List上进行操作

redis.opsForList().rightPush("cart",product);//从尾部添加一个产品

redis.opsForList().leftPush("cart",product);//从头部添加一个产品

Product product = redis.opsForList().leftPop("cart");//从头部弹出一个元素

Product product = redis.opsForList().rightPop("cart");//从尾部弹出一个元素

Product product = redis.opsForList().range("cart",2,6);//从列表中间获取

在Set上进行操作

redis.opsForSet().add("cart",product);//添加一个元素

Set<Product> list = redis.opsForSet.difference("cart1","cart2");//求差

Set<Product> list = redis.opsForSet.union("cart1","cart2");//求交集

Set<Product> list = redis.opsForSet.isect("cart1","cart2");//求并集

redis.opsForSet.remove("product");//删除一个元素

Product random = redis.opsForSet.randomMember("cart1");//随机获取一个元素

绑定到某个key上:使用BoundXxxOperations

总结:基于Spring Data 的JPA的应用,Spring Data MongoDB和Spring Data Neo4j提供了基于接口定义的自动生成 repository的功能,分别应用在MongoDB文档数据库和Neo4j图数据库。Spring Data Redis提供了两个不同的模板来操作redis数据库。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值