一、简介

Redis是一个开源的基于内存的并且可支持持久化的高性能的NoSQL数据库(解决性能和并发问题),通过将数据写入内存中,不需要通过I/O流读取数据,读取效率高。
image.png

特点:支持数据结构类型(值的结构类型)丰富,如字符串(strings),散列(hashes),列表(lists),集合(sets),有序集合(sorted sets)与范围查询,bitmaps,hyperloglogs和地理空间(geospatial)索引半径查询

数据模型:
image.png

二、常用配置(redis.windows.conf)

  1. #设置密码(使用:auth 密码)
  2. requirepass admin
  3. #设置访问ip(只有本机能访问,其他ip需要访问只需要注释该行)
  4. bind 127.0.0.1
  5. #是否受保护(yes时只有本机能访问,禁止外网,正常情况应该禁止外网访问)
  6. protected-mode no
  7. #连接超时时间(在指定时间内如果客户端没有操作则断开连接,单位为秒,0代表禁用,不关闭)
  8. timeout 0
  9. #访问端口号
  10. port 6379
  11. #日志显示级别(debug、varbose、notice、warning)
  12. loglevel notice
  13. #日志文件输出位置(需要手动创建,格式必须正确)
  14. logfile ""
  15. #数据库数量(默认进入第一个索引为0的数据库)
  16. databases 16
  17. ############################################################
  18. ##RDB模式和AOF模式可以同时开启(需要取消RDB的‘save’表达式)##
  19. ##同时开启后Redis重建数据集时会优先使用AOF的数据文件 ##
  20. ############################################################
  21. ###################RDB操作###################
  22. #当时间间隔条件满足后或者操作条数条件满足后即会执行持久化操作(容易丢失数据)
  23. #多少秒,多少改变数量保存一次(满足其中一个条件即可)
  24. save 900 10
  25. #——RDB存储文件名称
  26. dbfilename dump.rdb
  27. #存储文件目录
  28. dir ./
  29. ###################AOF操作###################
  30. #开启AOF(可将每一次操作都存进磁盘中)
  31. appendonly yes
  32. #设置AOF保存模式
  33. #always:每执行一个命令都会进行一次磁盘操作(数据写入)——数据保存完整性好,但是效率低
  34. #everysec:每秒执行一次磁盘操作(常用)
  35. #no:将磁盘操作交给操作系统——数据同步频率低,容易丢失数据,效率高
  36. appendfsync everysec
  37. #AOF存储文件名称
  38. appendfilename "appendonly.aof"

三、键Key

key类型:可以使用任意二进制序列、可以使用空字符串、可以使用字符串(推荐使用)

取值规范:不能太长(消耗内存)、不能太短(可读性差)
对象名:id:id值 —→ user:id:1

Key命令:

exists key——检查该key是否存在
del key——删除该key
del key1 key2 key3——删除多个key
keys *——查询所有key
keys java*——查询所有以java开头的key
keys *java——查询所有以java结尾的key
keys ??java——查询前面两个字符任意,后面字符为java的key
keys java?——查询最后一个字符任意,以java开头的key
keys j[av]a——查询以j开头,以a结尾,中间包含一个a或v字母的key

expire kye seconds——设置key的过期时间,单位为秒,如果没有指定,则永不过期(如果是带有生存时间的key,新指定的时间会代替旧的时间)
ttl key——查看当前key的剩余过期时间,单位为秒
-2表示这个key已经过期
-1表示这个key没有设置过期时间
其他值表示这个key的剩余生存时间

rename key newkey——将key改名为newkey,如果两个值相同,则不做改变,若key不存在则会返回一个错误,若newkey已存在,改变后将覆盖原先的key值

type key——查看该key的数据结构类型,正常操作情况下创建的key都为String类型

四、值value(数据结构类型)

常用的数据结构类型:String、List、Set、SortedSet、hash

String类型:

----------------------------------------------------------------------------------------------------------
set key value        // 添加数据
get key                 // 获取数据——键需存在,否则取到为空
----------------------------------------------------------------------------------------------------------
del key                    // 删除该key
----------------------------------------------------------------------------------------------------------
mset key1 value1 key2 value2 key3 value3        // 一次性添加多条数据
mget key1 key2 key3        // 一次性获取多条数据
----------------------------------------------------------------------------------------------------------
strlen key             // 获取该键的值的字符个数
----------------------------------------------------------------------------------------------------------
append key value            // 如果该键存在,则在对应值后面追加字符串,如果不存在,则新增数据
----------------------------------------------------------------------------------------------------------
incr key                // 该键的值自增1(需要纯数字)
incrby key num    // 该键的值自增num(需要纯数字)
incrbyfloat key num        // 该键的值自增num(自增小数)
----------------------------------------------------------------------------------------------------------
decr key                // 该键的值自减1
decrby key num    // 该键的值自减num
----------------------------------------------------------------------------------------------------------

List类型(链表结构):
特点:基于LinkedList实现、元素是字符串类型、列表头尾增删快、中间增删慢、增删元素是常态、元素可以重复出现
索引:从左到右则从0开始,逐渐增大;从右到左则从-1开始,逐渐减小
image.png

----------------------------------------------------------------------------------------------------------
lpush key value1 value2 value3        // 从左开始添加到队列,可一次性添加多个值,最后添加的值在最左边
rpush key value1 value2 value3        // 从右开始添加到队列,可一次性添加多个值,最后添加的值在最右边
----------------------------------------------------------------------------------------------------------
lrange key start stop        // 从左边开始读取下标为start到stop的数据(只能从左开始),若是 0到-1 则为查全部数据
lindex key index                // 根据指定索引查询对应位置的值,从0开始,若为负数,则会自动取绝对值
llen key                                // 查询集合中的元素数量(长度)
----------------------------------------------------------------------------------------------------------
lpop key                                             // 移除左边第一个元素,并返回该元素
rpop key                                            // 移除右边第一个元素,并返回该元素
blpop key1 key2 key3 timeout    // 在timeout时间内删除key中左边第一个值并返回该值;当只有一个key时,只对当前key操作,若有多个key,则从第一个key开始操作
----------------------------------------------------------------------------------------------------------

Hash类型:
特点:由field和与之关联的value组成map键值对,field和value都是字符串类型;在idea调用的方法中,包含两个参数,第一个参数为key,第二个参数为map,map中包含了field和value

----------------------------------------------------------------------------------------------------------
hset key field value                        // 添加数据(可以将key比喻成一个对象,field为对象属性,value为属性值)
hget key field                                    // 获取数据
hdel key field1 field2 field3        // 删除数据,可批量删除
----------------------------------------------------------------------------------------------------------
hmset key field1 value1 field2 value2 field3 value3            // 一次性添加多个字段,若字段存在,则为修改
hmget key field1 field2 field3                                                    // 一次性查询多个字段
----------------------------------------------------------------------------------------------------------
hlen key                                    // 查询指定key的字段数量
hexists key field                    // 判断指定的key中是否包含指定的field(返回0 为没有,返回1则有)
hgetall key                                // 获取指定key中的所有field和value值
hkeys key                                    // 获取key中所有的field
hvals key                                    // 获取key中所有的value
hsetnx key field value        // 如果指定的key中有对应的field则返回0,如果没有则将做存储数据操作
----------------------------------------------------------------------------------------------------------

Set类型:
特点:无序、去重,元素是字符串类型

----------------------------------------------------------------------------------------------------------
sadd key member1 member2 member3            // 添加数据到key集合中
smembers key                                                    // 读取key集合中的数据
srem key member                                                // 删除key对应的member(可多个)
----------------------------------------------------------------------------------------------------------
scard key                                // 获取key集合中元素的个数
sismember key member        // 判断key集合中是否包含指定的member
srandmember key count        // 在指定的key中随机获取count个值
spop key count                    // 在指定的key中随机获取count个值,并将这几个值删除
----------------------------------------------------------------------------------------------------------
sinter key1 key2 key3        // 获取这些key的交集
sunion key1 key2 key3        // 获取这些key的并集
sdiff key1 key2 kdy3        // 获取这些集合的差集(左减右)
----------------------------------------------------------------------------------------------------------

SortedSet类型(适用于排行榜):
特点:有序的、去重的,元素是字符串类型,每个元素都有一个浮点型的分值(可相同),按照分值排序,默认从小到大排序

----------------------------------------------------------------------------------------------------------
zadd key score1 member1 score2 member2 score3 member3        // 添加数据,分值在前,需要排序的值在后
zrange key start stop [withscores]                                            // 以默认排序方式(从小到大)读取数据,可带上显示分数参数-withscores
zrevrange key start stop [withscroes]                                        // 以分值从大到小排序,可带上显示分数参数
zrem key member1 member2 member3                                                // 删除数据
----------------------------------------------------------------------------------------------------------

五、idea配置

引入依赖jar包

<dependency><!--连接驱动-->
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.9.0</version>
</dependency>

连接redis服务端
1、直接创建Jedis对象 new Jedis("连接地址",[连接端口号,默认6379])
2、使用Jedis对象调用Redis的方法。