redis对数据的存储获取,以及通过jedis来用Java操作redis

redis的概念:

redis是一款高性能的NOSQL系列的非关系型数据库

nosql的概念:

NoSQL(NoSQL = Not Only SQL),意即“不仅仅是SQL”,是一项全新的数据库理念,泛指非关系型的数据库。

非关系型数据库的优势:

  • 性能NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的解析,所以性能非常高。
  • 可扩展性同样也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展。

关系型数据库的优势:

  • 复杂查询可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询。
  • 事务支持使得对于安全性能很高的数据访问要求得以实现。对于这两类数据库,对方的优势就是自己的弱势,反之亦然。

总结

  • 关系型数据库与NoSQL数据库并非对立而是互补的关系,即通常情况下使用关系型数据库,在适合使用NoSQL的时候使用NoSQL数据库, 让NoSQL数据库对关系型数据库的不足进行弥补;
  • 一般会将数据存储在关系型数据库中,在nosql数据库中备份存储关系型数据库的数据

什么是Redis

Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,目前为止Redis支持的键值数据类型如下:
                1) 字符串类型 string
                2) 哈希类型 hash
                3) 列表类型 list 允许有重复元素
                4) 集合类型 set   不允许有重复元素
                5) 有序集合类型 sortedset
                redis的应用场景
                •    缓存(数据查询、短连接、新闻内容、商品内容等等)
                •    聊天室的在线好友列表
                •    任务队列。(秒杀、抢购、12306等等)
                •    应用排行榜
                •    网站访问统计
                •    数据过期处理(可以精确到毫秒
                •    分布式集群架构中的session分离

利用jedis来操作redis中的各种数据类型

所有数据类型都一一举例,调用jedis所需要的jar包在文末上传

package per.test;

import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;


/**
 * Jedis操作各种redis中的数据类型
 */
public class JedisTest {
    @Test
    public void test1(){
        /*
        * jedis快速入门
        * */
        //获取连接
        Jedis jedis = new Jedis("localhost", 6379);
        //操作
        jedis.set("username","zhangsan");
        //关闭连接
        jedis.close();
    }

    //操作字符串类型的数据
    @Test
    public void  test2(){
        //获取连接
        //localhost是本机ip
        // 不写参数就默认  Jedis jedis = new Jedis("localhost",6379)
        Jedis jedis = new Jedis();
        //操作
        //存储键值对
        jedis.set("username","an");
        //获取值(通过键)
        String name = jedis.get("username");
        System.out.println(name);
        //关闭连接
        jedis.close();
    }

    //操作字符串类型数据并指定失效时间 可以用作连接失效
    @Test
    public void test3(){
        //获取连接
        Jedis jedis = new Jedis();

        //操作
        //对于键为lianjie 值为hehe的数据 在20s后会失效
        jedis.setex("lianjie",20,"hehe");
        //关闭连接
        jedis.close();
    }

    //操作哈希类型 hash : map格式
    @Test
    public void test4(){
        Jedis jedis = new Jedis();

        //存储数据
        //        jedis.hset("class","class1","12");报错 出现了java特有关键词class(特有)
        jedis.hset("user","class1","12");
        jedis.hset("user","class2","13");
        jedis.hset("user","class3","20");
        jedis.hset("user1","grade1","1");
        jedis.hset("user1","grade2","2");

        //获取数据(单个)
        String infor = jedis.hget("user","class2");
        System.out.println(infor);

        //获取hash中所有map中的数据jedis.hgetAll("user");
        // 返回的是Map<String,String>也就是对应的field和value

        //获取user(key)中的字段及值
        Map<String,String> user = jedis.hgetAll("user");
        //keyset 获取所有的field
        Set<String> keys = user.keySet();
        for (String key : keys) {
            //获取value值
            String value = user.get(key);
            System.out.println(key+value);
        }


        //获取user1(key)中的字段及值
        Map<String,String> user1 = jedis.hgetAll("user1");
        //keyset 获取所有的field
        Set<String> keys1 = user1.keySet();
        for (String key : keys1) {
            //获取value值
            String value = user1.get(key);
            System.out.println(key+value);
        }


        jedis.close();
    }

    //操作list类型
    @Test
    public void  test5(){
        //获取连接
        Jedis jedis = new Jedis();
        //操作
        //存储
        jedis.lpush("mylist","a","b","c");//从左向右存
        jedis.rpush("mylist","a","b","c");//从右向左存
        //获取范围
        List<String> list = jedis.lrange("mylist",0 ,-1);
        System.out.println("mylist:"+list);
        //list弹出 (移除)
        //lpop把最左端的value弹出
        String valuel = jedis.lpop("mylist");
        //rpop把最右端的value弹出
        String valuer =jedis.rpop("mylist");

        System.out.println("左边弹出的值"+valuel);
        System.out.println(valuer);

        //断开
    }

    //操作set类型集合(不允许有重复,有重复则不添加)
    @Test
    public void test6(){
        //获取连接
        Jedis jedis  = new Jedis();
        //操作
        //set存储
        jedis.sadd("set","hello","java","word","hello");
        //set获取 返回值类型跳转此方法源码产看
        Set<String> set = jedis.smembers("set");
        System.out.println(set);
        //断开
        jedis.close();
    }

    //操作有序集合sortedset  不允许重复元素 且元素有序
    /*
    有序集合类型 sortedset:
    不允许重复元素,且元素有顺序.每个元素都会关联一个double类型的分数。
    redis正是通过分数(score)来为集合中的成员进行从小到大的排序。
    */
    @Test
    public void test7(){
        //获取连接
        Jedis jedis = new Jedis();

        //操作

        //存储数据
        jedis.zadd("mysortedset",3,"亚瑟");
        jedis.zadd("mysortedset",30,"后裔");
        jedis.zadd("mysortedset",55,"孙悟空");
        //获取数据
        Set<String> set =jedis.zrange("mysortedset",0,-1);
        System.out.println(set);

        /*
        输出结果 按score的值来决定member(成员)的排序
        [亚瑟, 后裔, 孙悟空]
        */
        //关闭
        jedis.close();

    }

    //jedis连接池使用 这个连接池是内置的不需要从外部导入
    @Test
    public void test8(){
        //创建连接池对象
        JedisPool jedisPool = new JedisPool();
        //获取连接
        Jedis jedis = jedisPool.getResource();
        //使用
        jedis.set("usernamer","kevin");
        //关闭 这个关闭是把其归还到连接池中 需要用再去拿 不用浪费资源
        jedis.close();

    }
}

发现好像只能上传资源

//等资源审核过了我再填这个坑吧--

https://download.csdn.net/download/qq_33551891/11110579

https://download.csdn.net/download/qq_33551891/11110582

...非作者下载居然要积分  有需要的私信我吧

附上 redis文档在线资源路径

http://www.runoob.com/redis/redis-tutorial.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java可以使用Jedis库来操作Redis进行Bitmap数据存储操作。以下是一个示例代码: ```java import redis.clients.jedis.Jedis; public class RedisBitmapExample { public static void main(String[] args) { // 创建Jedis对象,连接Redis Jedis jedis = new Jedis("localhost"); // 设置位图的某一位为1 jedis.setbit("mybitmap", 0, "1"); // 获取位图的某一位的值 boolean bitValue = jedis.getbit("mybitmap", 0); System.out.println("Bit value at index 0: " + bitValue); // 统计位图中值为1的位数 long bitCount = jedis.bitcount("mybitmap"); System.out.println("Number of bits set to 1: " + bitCount); // 使用位图进行位运算 jedis.setbit("bitmap1", 0, "1"); jedis.setbit("bitmap2", 1, "1"); jedis.bitop(BitOP.AND, "bitmapResult", "bitmap1", "bitmap2"); // 获取结果位图的某一位的值 boolean resultBitValue = jedis.getbit("bitmapResult", 0); System.out.println("Result bit value at index 0: " + resultBitValue); } } ``` 在上述示例中,我们使用Jedis库连接到本地Redis服务。然后,我们使用`setbit`方法设置位图的某一位为1,并使用`getbit`方法获取该位的值。我们还使用`bitcount`方法统计位图中值为1的位数。 另外,我们还展示了如何使用位图进行位运算。通过`bitop`方法,我们将两个位图进行逻辑与运算,并使用`getbit`方法获取结果位图的某一位的值。 请注意,以上示例仅为演示目的,并没有考虑异常处理和连接池管理等最佳实践。在实际使用中,请根据需求进行适当的优化和改进。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值