Redis基础入门

Redis入门

概念: REmote DIctionary Server

​ 是用C语言开发的一个开源的高性能键值对(key-value)数据库。

特征:

1、数据间没有必然的关联关系

2、内部采用单线程机制进行工作

3、高性能

4、多数据类型支持(String、list、hash、set、sorted_set)

5、持久化支持。可以进行数据灾难恢复,突发状况,比如断点

应用:

1、为热点数据加速查询(主要场景),如热点商品,热点新闻,热点资讯等高访问量信息等

2、任务队列,如秒杀、抢购、购票排队等

3、即时信息查询,如各位排行榜,各类网站访问统计、公交到站信息、在线人数信息、设备信号等

4、时效性信息的控制,如验证码控制、投票控制等

5、分布式数据共享,如分布式集群架构中的session

6、消息队列

7、分布式锁

redis安装包文件:

redis-server.exe:启动redis的可执行文件

redis-cli.exe:操作redis,命令行客户端

redis-check-aof.exe:持久化用的,AOF文件修复工具

redis-check-dump.exe:RDB文件检查工具(快照持久化文件)

redis-bechmark.exe:性能测试工具

redis-windows.conf:redis核心配置文件

redis的基本操作:

一、功能性命令

​ 1、信息添加。 set key value

​ 2、信息查询,如果不存在,返回空(nil)。 get key

​ 3、删除信息。del key

二、清除屏幕信息

clear

三、帮助信息查阅

help	命令名
help	@组名

四、退出指令

quit
exit
<ESC>

数据类型

一、string

1、基本操作:

  • 添加/修改数据

    set key value

  • 获取数据

    get key

  • 删除数据

    del key

  • Multiple:多个

  • 添加/修改多个数据

    mset key1 value1 key2 value2...

  • 获取多个数据

    mget key1 key2...

  • 获取数据字符个数

    strlen key

  • 追加信息到原始信息后部

    append key value

2、扩展操作:

  • 设置数值数据增加指定范围的值

    incr	key	一次增加一个单位
    incrby	key	increment	increment可为正或负
    incrbyfloat	key	increment
    
  • 设置数值数据减少指定范围的值

    decr	key	一次减少一个单位
    decrby	key	increment
    

redis用于控制数据库表主键id,为数据库主键提供生成策略,保障数据库表的主键唯一性,此方案适用于所有数据库,且支持数据库集群。

  • 设置数据具有指定的生命周期

    setex	key	seconds	value	秒为单位,重新set会覆盖之前的set
    psetex	key	milliseconds value	毫秒为单位
    

redis控制数据的生命周期,通过数据是否失效控制业务行为,适用于所有具有时效性限制控制的操作。

redis应用于各种结构型和非结构型高热度数据访问加速

3、注意事项

数据操作不成功的反馈与数据正常操作之间的差异

数据未获取到

数据最大存储量(512MB)

数值计算最大范围(java中的long的最大值:9223372036854775807)

4、key的命名规范

表名:主键名:主键值:字段名

二、hash

对象类数据的存储如果具有较频繁的更新需求操作会显得笨重。

对一系列存储的数据进行编组,方便管理,典型应用存储对象信息。

一个存储空间保存多个键值对数据。

1、基本操作

  • 添加/修改数据

    hset key field value

  • 获取数据

    hget key field hgetall key

  • 删除数据

    hdel key field1 [field2]

  • 添加/修改多个数据

    hmset key field1 value1 field2 value2...

  • 获取多个数据

    hmget key field1 field2...

  • 获取哈希表中字段的数量

    hlen key

  • 获取哈希表中是否存在指定的字段

    hexists key field

2、扩展操作

  • 获取哈希表中所有的字段名或字段值

    hkeys	key
    hvals	key		value值可能会重复,如果重复,照样获取
    
  • 设置指定字段的数值数据增加指定范围的值

    hincrby			key	field	increment
    hincrbyfloat	key	field	increment
    没有hdecrby,可以将increment设为负值
    

3、注意事项

  • hash类型下的value只能存储字符串,不允许其他数据类型,不存在嵌套现象,如果数据未获取到,对应值为空(nil)。
  • 每个hash可以存储2^32 -1个键值对。
  • hash类型十分贴近对象的数据存储形式,并且可以灵活添加删除对象属性。但hash设计初衷不是为了存储大量对象而设计的,切记不可滥用,更不可以将hash作为对象列表使用。
  • hgetall操作可以获取全部属性,如果内部field过多,便利整体数据效率就会很低,有可能成为数据访问瓶颈。

三、list

数据储存需求:存储多个数据,并对数据进入存储空间的顺序进行分区。

需要的储存结果:一个储存空间保存多个数据,且通过数据可以体现进入顺序。

list类型:保存多个数据,底层使用双向链表存储结构实现。

1、基本操作

  • 添加/修改数据

    l/rpush	key	value1	[value2]
    l/rpushx	key	value	将一个值插入到已存在的列表头部
    linsert key before/after key value 在列表的元素前或者后插入元素
    
    
  • 获取数据

    lrange	key	start stop
    lrange	key	0 -1	获取全部数据
    lindex	key	index
    llen	key
    
  • 获取并移除数据

    lpop	key
    rpop	key
    

2、扩展操作

  • 规定时间内获取并移除数据

    blpop	key1 [key2]	timeout
    b:阻塞版本,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止,比如任务队列。
    brpop	key1 [key2]	timeout
    brpoplpush	list1 list2 timeout 
    从列表中取出最后一个元素,并插入到另外一个列表的头部; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
    
  • lrem key count value

    移除表中count个与value相等的值,count>0从表头开始,count<0从表尾开始

3、注意事项

  • list中保存的数据都是string类型的,数据总容量是有限的,最多2^32-1个元素(4294967295)。
  • list具有索引的概念,但是操作数据时通常以队列的形式入队出队操作,或以栈的形式进行入栈出栈操作。
  • 获取全部数据操作结束索引设置为-1。
  • list可以对数据进行分页操作,通常第一页信息来自于list,第二页以及更多的信息通过数据库的形式进行加载。
  • 可以重复添加。

四、set

新的需求:存储大量数据,在查询方面提供更高的效率

需要的存储结构:能够保存大量数据,高效的内部存储机制,便于查询

set类型:与hash存储结构完全相同,仅存储键,不存储值,并且键是不允许重复的

1、基本操作

  • 添加数据

    sadd key member1 [member2]

  • 获取全部数据

    smembers key

  • 删除数据

    srem key member1 [member2]

  • 获取集合数据总量

    scard key

  • 判断集合中是否包含指定数据

    sismember key member

2、扩展操作

  • 随机获取集合中指定数量的数据

    srandmember key [count]

  • 随机获取集合中的某个数据并将该数据移出集合

    spop key

  • 求两个集合的交,并,差集,差集有先后顺序

    交:sinter key1 [key2]

    并:sunion key1 [key2]

    差:sdiff key1 [key2]

  • 求两个集合的交、并、差集并存储到指定集合中

    sinterstore destination key1 [key2]

    sunionstore destination key1 [key2]

    sdiffstore destination key1 [key2]

  • 将指定数据从原始集合中移动到目标集合中

    smove source destination member

3、注意事项

  • set类型不允许数据重复,如果添加的数据在set中已经存在,将只保留一份。
  • set虽然与hash的存储结构相同,但是无法启动hash中存储值的空间

五、sorted_set

新的存储需求:数据排序有利于数据的有效展示,需要提供一种可以根据自身特征进行排序的方式。

新的存储结构:新的存储类型,可以保存可排序的数据。

sorted_set类型:在set结构基础上添加可排序字段(score)。

1、基本操作

  • 添加数据

    zadd key score1 member1 [score2 member2]

  • 获取全部数据

    zrange key start stop [withscores] 由小到大

    [withscores]:带上score值

    zrevrange key start stop [withscores] 由大到小

  • 删除数据

    zrem key member [member…]

  • 按条件获取数据

    zrangebyscore key min max [withscores] [limit]

    跟mysql数据库的limit功能一致,检索前多少条记录

    zrevrangebyscore key max min [withscores]

  • 条件删除数据

    zremrangebyrank key start stop

    zremrangebyscore key min max

  • 注意:

    min与max用于限定搜索查询的条件。

    start与stop用于限定查询范围,作用于索引,表示开始和结束索引。

    offset与count用于限定查询范围,作用于查询结果,表示开始位置和数据总量。

  • 获取集合数据总量

    zcard key

    zcount key min max

  • 集合交、并操作

    交:zinterstore destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]

    计算给定的一个或多个有序集的交集,其中给定 key 的数量必须以 numkeys 参数指定,并将该交集(结果集)储存到 destination 。默认情况下,结果集中某个成员的分数值是所有给定集下该成员分数值之和。

    并:zunionstore destination numkeys key [key …]

    如果destination已存在,则覆盖。

2、扩展操作

  • 获取数据对应的索引(排名)

    zrank key member

    zrevrank key member

  • score值获取与修改

    zscore key member

    zincrby key increment member

3、注意事项

  • score把偶才能的数据存储空间是64位
  • score保存的数据也可以是一个双精度的double值,基于双精度浮点数的特征,可能会丢失精度,使用时候要慎重
  • sorted_set底层存储还是基于set结构的,因此数据不能重复,如果重复添加相同的数据,score值将被反复覆盖,保留最后一次修改的结果
  • 注意score长度,整体score长度必须是统一的,不足位补0,第一排序规则首位不得是0。

应用场景:涉及到排序的,投票,排行榜,统计,带有权重的消息队列

通用指令

一、key

1、基本操作

  • 删除指定key

    del key

  • 获取key是否存在

    exists key

  • 获取key对应值的类型

    type key

2、扩展操作(时效性控制)

  • 为指定key设置有效期

    expire	key	seconds
    pexpire	key	milliseconds
    
    expireat	key	timestamp
    pexpireat	key	milliseconds-timestamp
    时间戳
    
  • 获取key的有效时间

    ttl		key		time to live,返回-1是永久,返回-2是不存在
    pttl	key
    
  • 切换key从时效性转换成永久性

    persist	key
    

3、扩展操作(查询模式)

  • keys pattern

    查询模式规则:

    ​ * 匹配任意数量的任意符号

    ​ ? 匹配一个任意符号

    ​ [] 匹配一个指定符号

4、其他操作

  • 为key改名

    rename key newkey

    renamenx key newkey

  • 对所有key排序,list或set或sorted_set

    sort key [desc/asc] 排序不懂原数据

  • 其他key通用操作

    help @generic

二、db基本操作

redis为每个服务器提供16个数据库,编号0-15,每个数据库之间的数据相互独立,他们共用一块空间,空间配置以后再说。

1、基本操作

  • 切换数据库,默认在0块区域

    select index

  • 其他操作

    quit

    ping 看与服务器是否连通

    echo message 输出信息

  • 数据移动

    move key db

    移动并删除,相当于剪切操作;必须保证另一个数据库中没有,否则会失败

  • 数据清除

    dbsize 看数据库中有多少个key

    flushdb

    flushall

Jedis

Java语言连接redis服务:Jedis、SpringData Redis、Lettuce

客户端连接Redis
import redis.clients.jedis.Jedis;
public class jedis {
    public static void main(String[] args) {
    //1、连接redis
      Jedis jedis = new Jedis("127.0.0.1", 6379);
     //2、操作redis
      jedis.set("name","luqian");
      System.out.println(jedis.get("name"));
     //3、关闭redis连接
      jedis.close();
    }
}

jedis简易工具类,基于连接池获取

​ JedisPool:Jedis提供的连接池技术

​ poolConfig:连接池配置对象

​ host:redis服务地址

​ port:redis服务端口号

public class JedisUtil {
    public static Jedis getJedis(){
   JedisPoolConfig jpc = new JedisPoolConfig();
        //最大连接数
        jpc.setMaxTotal(30);
        //活动连接数
        jpc.setMaxIdle(10);
        String host = "127.0.0.1";
        int port = 6379;
    JedisPool jp = new JedisPool(jpc,host,port);
        return jp.getResource();
    }
}

可视化客户端:Redis Desktop Manager

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值