redis基本入门 | 青训营

62 阅读3分钟

基本

nosql ---> 集群利用 ----> redis功能开发

nosql:除了关系型数据库,key(String):value(多种类型) 的键值对类型

作用

不要在使用reids的地方又使用sql查询,这样会使得效率变低的

基本类型和操作

  1. redis-cli 使用客户端

  2. select 1 默认有 0 - 15 的数据库,选择 1

  3. flushdb 刷新

    其他类型还有很多不同的操作,详细看文档,或者参考牛客test
    
  4. set test:count 1 设置变量,多个单词变量名使用:隔开,相当于test_count

  5. get test:count 获取

  6. incr test:count 自增

  7. decr test:count 自减

  8. 集合类型操作元素

    • add key 元素key,元素value add user name "zc"
    • remove key 元素key
  9. keys * 使用键值对

  10. type test:count 类型?

10.exists test:count 存在?

11.del test:count 删除

12.expire test:count 10 设置存活时间10秒,可以指定单位

需要注意的是:reids假如过期了,会直接删除key,而不是设置为null

image.png

自启动

安装服务:redis-server --service-install redis.windows-service.conf
卸载服务:redis-server --service-uninstall

list

的特殊,可以作为栈或者队列

image.png

set(集合不重复,且无序)

可以随机弹出一些元素

zset(有序集合)

可以像hash,只是value是数值,且会自动按照数值排序

使用java得到的set也是有序的:www.cnblogs.com/gigabit/p/1…

hash的结构

image.png

事务

image.png

  • 所以常常使用编程式事务管理,就是为了可以在同一个方法前查询,而不是使用声明式就无法在一个方法中干事务之外的活了,如下示例
  • 事务没有回滚操作,所以开事务不是为了回滚,事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。 Redis事务的主要作用就是串联多个命令防止别的命令插队。就没有隔离的必要,但是没有原子性
// 编程式事务
@Test
public void testTransaction() {
    Object result = redisTemplate.execute(new SessionCallback() {
        @Override
        public Object execute(RedisOperations redisOperations) throws DataAccessException {
            String redisKey = "text:tx";
​
            //提前查询,不会和事务一起提交,而是先执行
            redisOperations.opsForSet().members(redisKey);
            
            // 启用事务,一个事务的所有指令会放到一个队列中后在一起执行,而且没有快照
            redisOperations.multi();
            redisOperations.opsForSet().add(redisKey, "zhangsan");
            redisOperations.opsForSet().add(redisKey, "lisi");
            redisOperations.opsForSet().add(redisKey, "wangwu");
​
            System.out.println(redisOperations.opsForSet().members(redisKey));
​
            // 提交事务
            return redisOperations.exec();
        }
    });
    System.out.println(result);
}

持久化

比较是内存的东西,需要写到磁盘才会持久化

image.png

高级类型

HyperLogLog

- 采用一种基数算法,用于完成独立总数的统计。 - 占据空间小,无论统计多少个数据,只占12K的内存空间。 - 不精确的统计算法,标准误差为 0.81% 。

就是一个类似set的东西,都是存放到rdies的大小恒定12k,而且这玩意只能用于统计去重数量(估算)

image.png

基本使用

image.png

Bitmap

  • 不是一种独立的数据结构,实际上就是字符串。 - 支持按位存取数据,可以将其看成是byte数组。 - 适合存储索大量的连续的数据的布尔值

image-20230626183438198

image.png

基本使用

image.png