Redis学习笔记

一 Redis的特点
  1. Redis是一种面向 “Key-Value” 数据类型的内存数据库,可以满足我们对海量数据的快速读写需求;其中redis中的key只能是字符串,value支持多种数据类型。
  2. Redis是一个 NoSQL 数据库,NoSQL的全称是not only sql,不仅仅是SQL,泛指非关系型数据库,这种类型的数据库不支持SQL语法。
  3. Redis是一个单线程的服务,作者之所以这么设计,主要是为了保证redis的快速,高效,如果涉及了多线程,就需要使用锁机制来解决并发问题,这样执行效率反而会打折扣。
  4. Redis的命令不区分大小写,但是key区分大小写。
二 Redis基础命令

keys *(查看所有key)
exists(查看某个key是否存在,存在返回1,不存在返回0,例如:exists a)
del(删除key,例如:del a)
type(查看某个key的value类型,例如:type a)
help(查看某个key的用法,例如:help set)
select 1(选择某个数据库,redis默认16个数据库,编号0-15,默认是处于0数据库)
flushall(清空所有数据库)
flushdb(清空当前数据库)

Redis的启动和停止命令(注:以下命令的执行需要先进入redis根目录,例如“redis-5.0.9”目录)

启动redis:redis-server redis.conf
进入redis客户端:redis-cli
停止redis:redis-cli shutdown

三 Redis五种常用数据类型的相关命令
  1. string类型:string类型是redis中最基本的数据类型,它能存储任何形式的内容,包含二进制数据,甚至是一张图片;另外,string类型比较适合存储类型单一的数据。

set(设置键值对,例如:set a 1)
get(获取key的值,例如:get a)
mset(一次设置多个键值对,例如:mset a1 1 a2 2)
mget(一次获取多个key的值,例如:mget a1 a2)
incr(对key的值加一,值必须是数字,例如:set a 1;incr a)
decr(对key的值减一,值必须是数字,例如:set a 2;decr a)
incrby(对key指定步长递增,步长必须是整数,例如:set a 1;incrby a 2)
decrby(对key指定步长递减,步长必须是整数,例如:set a 2;decrby a 2)
strlen(获取key的长度,例如:strlen a)

  1. hash类型:hash类型的值存储了字段和字段值的映射,字段和字段值只能是字符串,不支持其他数据类型;hash类型比较适合存储对象,因为对象里面是有一些属性和值的,我们就可以把这些属性和值存储到这个hash类型里面。

hset(向hash中添加字段和值,格式为:hset key field value,例如:hset person name ccj)
hget(获取hash中指定字段的值,格式为:hget key field,例如:hget person name)
hmset(一次向hash中添加多个字段和值,例如:hmset person name ccj age 18)
hmget(一次获取hash中多个字段的值,例如:hmget person name age)
hgetall(获取hash中所有字段和值,格式为:hgetall key,例如:hgetall person)
hexists(判断hash中是否包含指定字段,格式为:hexists key field,例如:hexists person name)
hdel(删除hash中指定字段,格式为:hdel key field,例如:hdel person name)
hlen(获取hash所有字段的数量,格式为:hlen key,例如:hlen person)
hincrby(对hash中指定字段的值递增,格式为:hincrby key field num,例如:hincrby person age 2)
hkeys(获取hash中所有字段,格式为:hkeys key,例如:hkeys person)
hvals(获取hash中所有字段值,格式为:hvals key,例如:hvals person)

  1. list类型:list是一个有序的字符串列表,列表内部是使用双向链表(linked list)实现的。

lpush(从列表左侧添加元素,格式为:lpush key value,例如:lpush list1 a)
rpush(从列表右侧添加元素,格式为:rpush key value,例如:rpush list2 a b c)
lpop(从列表左侧弹出一个元素,格式为:lpop key,例如:lpop list1)
rpop(从列表右侧弹出一个元素,格式为:rpop key,例如:rpop list1)
llen(获取列表的长度,格式为:llen key,例如:llen list1)
lrange(获取列表指定区间的元素,0代表第一个元素,-1代表最后一个元素,格式为:lrange key start stop,例如:lrange list1 0 -1)
lindex(获取列表指定下标的元素,格式为:lindex key index,例如:lindex list1 0)
lset(修改列表指定下标的元素,格式为:lset key index value,例如:lset list1 0 10)

  1. set类型:set集合中的元素都是不重复的,无序的;set集合比较适合用在去重的场景下。

sadd(向集合中添加元素,格式为:sadd key value,例如:sadd set1 a b c)
smembers(获取集合中所有元素,格式为:smembers key,例如:smembers set1)
srem(从集合中删除指定元素,格式为:srem key value,例如:srem set1 a)
sismember(判断集合中是否包含指定元素,格式为:sismember key value,例如:sismember set1 a)
sdiff(获取两个集合的差集,格式为:sdiff key1 key2,例如:sdiff set1 set2)
sinter(获取两个集合的交集,格式为:sinter key1 key2,例如:sinter set1 set2)
sunion(获取两个集合的并集,格式为:sunion key1 key2,例如:sunion set1 set2)
scard(获取集合中元素的数量,格式为:scard key,例如:scard set1)

  1. sorted set类型(zset类型):是一个有序集合,在集合类型的基础上为集合中的每个元素都关联了一个分数,根据分数进行排序,这样就实现了有序。sorted set比较适合用在获取TopN的场景。

zadd(向集合中添加元素,格式为:zadd key score value,例如:zadd zset1 10 a)
zscore(获取集合中指定元素的分值,格式为:zscore key value,例如:zscore zset1 a)
zrange(获取集合中指定元素的排名(正序),格式为:zrange key start stop,例如:zrange zset1 0 -1)
zrevrange(获取集合中指定元素的排名(倒序),格式为:zrevrange key start stop,例如:zrevrange zset1 0 -1)
zincrby(给集合中指定元素按步长增加分值,格式为:zincrby key num value,例如:zincrby zset1 3 a)
zrem(从集合中删除指定元素,格式为:zrem key value,例如:zrem zset1 a)
zcard(获取集合中元素的数量,格式为:zcard key,例如:zcard zset1)

四 Redis中的expire生存时间

Redis中可以使用expire命令设置一个键的生存时间,到时间后Redis会自动删除它;它的一个典型应用场景是:手机验证码,我们平时在登录或者注册的时候,手机会接收到一个验证码,上面会提示验证码的过期时间,过了这个时间之后这个验证码就不能用了。常用的相关命令如下:

expire key seconds:设置key过期时间
ttl key:获取key的剩余有效时间
persist key:取消key的过期时间
expireat key timestamp:设置key在指定时间戳过期

五 Redis监控命令-monitor

monitor 命令是一把双刃剑。monitor可以监控我们对redis的所有操作,如果在线上的服务器上打开了这个功能,这里面就会频繁打印出来我们对redis数据库的所有操作,这样会影响redis的性能,所以说要慎用。但是有时候通过monitor命令来排查错误是非常有用的(通常会结合grep命令进行过滤),举例如下:

1.服务器输入monitor命令,开始监控Redis:
在这里插入图片描述
2. 通过Java代码去操作Redis服务器,添加一个key-value
在这里插入图片描述
3.这时候,monitor会监控到我们刚刚的操作,并打印到控制台
在这里插入图片描述

六 Redis持久化之RDB与AOF

Redis的数据是保存在内存中的,当我们重启Redis服务器,数据之所以不会丢失,是因为Redis的持久化机制。Redis支持RDB和AOF两种持久化,可以单独使用或者组合使用;RDB是Redis默认的持久化机制。

  1. RDB:RDB持久化是通过快照完成的,当符合一定条件时Redis会自动将内存中的所有数据执行快照操作并存储到硬盘上,默认存储在 dump.rdb 文件中。Redis执行快照的时机是由以下参数控制的,这些参数是在redis.conf文件中的:
    在这里插入图片描述
    RDB的优点:由于存储的有数据快照文件,恢复数据很方便
    RDB的缺点:会丢失最后一次快照以后更改的所有数据,因为两次快照之间是由一个时间差的,这一段时间之内修改的数据可能会丢。

  2. AOF:AOF持久化是通过日志文件的方式,默认情况下没有开启,可以通过 appendonly 参数开启,在redis.conf文件中配置“appendonly yes”即可。AOF日志文件的保存位置和RDB文件相同,都是dir参数设置的,默认是在当前目录,也就是说,我们在哪个目录下启动redis,就保存在哪个目录下,默认的文件名是 appendonly.aof。

    AOF方式只会记录用户的写命令,添加、修改、删除之类的命令,查询命令不会记录,因为查询命令不会影响数据的内容。那redis什么时候会把用户的写命令同步到aof文件中呢?是通过以下参数控制的:
    在这里插入图片描述
    默认是每秒钟执行一次同步操作。appendfsync everysec;也可以实现每执行一次写操作就执行一次同步操作,appendfsync always,但是这样效率会有点低;或者使用appendfsync no,表示不主动进行同步,由操作系统来做,30秒执行一次。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
尚硅谷是一个教育机构,他们提供了一份关于Redis学习笔记。根据提供的引用内容,我们可以了解到他们提到了一些关于Redis配置和使用的内容。 首先,在引用中提到了通过执行命令"vi /redis-6.2.6/redis.conf"来编辑Redis配置文件。这个命令可以让你进入只读模式来查询"daemonize"配置项的位置。 在引用中提到了Redis会根据键值计算出应该送往的插槽,并且如果不是该客户端对应服务器的插槽,Redis会报错并告知应该前往的Redis实例的地址和端口。 在引用中提到了通过修改Redis的配置文件来指定Redis的日志文件位置。可以使用命令"sudo vim /etc/redis.conf"来编辑Redis的配置文件,并且在文件中指定日志文件的位置。 通过这些引用内容,我们可以得出结论,尚硅谷的Redis学习笔记涵盖了关于Redis的配置和使用的内容,并提供了一些相关的命令和操作示例。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Redis学习笔记--尚硅谷](https://blog.csdn.net/HHCS231/article/details/123637379)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Redis学习笔记——尚硅谷](https://blog.csdn.net/qq_48092631/article/details/129662119)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值