目录
一、Redis下载与安装
二、基本概念
1.什么是Redis?
2.Redis端口多少?
3.Redis是单线程还是多线程?
4.Redis为什么单线程还这么快?
三、Redis的基本操作
四、Redis的五个基本类型
1.Redis-key
2.字符串 string
3.列表 list
4.集合 set
5.哈希
6.有序集合 zset
前言:
本文只是对redis的入门学习,如需更为详细和系统的学习,请访问以下两个链接的参考资料:
1.百度网盘分享链接:
链接:https://pan.baidu.com/s/11k14fqNSj2N_YrUUXkEDIw?pwd=1j8i
提取码:1j8i2.参考资料网址:Redis 数据类型 | 菜鸟教程 (runoob.com)
一、Redis下载与安装
- 官网下载安装包:雷迪斯 (redis.io)
- 将安装包传到Linux系统
- 将安装包拷贝到 /opt
- 解压安装包
- 进入解压后的目录
- 执行make命令
- 执行make install命令
- 切换到/usr/local/bin目录下
- 拷贝Redis的配置文件(redis.conf)到当前目录下
- 修改配置文件
- 启动Redis的服务器 执行命令 ./redis-server redis.conf
- 启动Redis的客户端 执行命令 ./redis-cli -p 6379
- 测试是否连接上Redis的服务器 执行命令 ping
二、基本概念
1.什么是Redis?
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件 。 它支持多种类型的数据结构,如字符串(strings), 散列(hashes), 列表(lists), 集 合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间 (geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化 (persistence)-- RDB和AOF , 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高 可用性(high availability)
2.Redis端口多少?
6379
3.Redis是单线程还是多线程?
单线程。
Redis是很快的,官方表示,Redis是基于内存操作的,CPU不是Redis的性能瓶颈,Redis的瓶颈就是 根据机器的内存和网络带宽。既然可以使用单线程来实现,就使用单线程了! Redis是C语言实现的,官方数据:读:110000/s 写: 80000/s,完全不比同样使用key-value的 Memcached差
4.Redis为什么单线程还这么快?
误区1: 高性能的服务器一定是多线程的
误区2: 多线程(CPU上下文切换)一定比单线程效率高
核心: Redis是将所有的数据全部放在内存中的,所以说使用单线程去操作效率就是最高的,相比多线程,减少了CPU上下文切换的耗时。对于内存系统来说,没有上下文切换效率就是最高的,多次读写都是在一个CPU上的。
三、Redis的基本操作
Redis默认有16个数据库,默认使用的是第0个数据库,可以通过select切换数据库。
Redis的命令对大小写不敏感
- select 切换数据库,格式: select index
- 查看数据的大小, 格式: dbsize
- 查看所有的key,格式: keys *
- 清空当前数据库和清空所有的数据库:flushdb flushall
四、Redis的五个基本类型
1.Redis-key
#########################################################
# SET 设置key
# GET 查看key的值
# EXPIRE 设置key的过期时间
# TTL 查看key剩余的时间
# EXISTS 判断当前的key是否存在
# KEYS * 查看当前所有的key
# DEL key 删除当前的key
# TYPE 查看key存储的value的类型
2.字符串 string
set get
- 设置值和获取值: 格式: set key value get key
- 判断key是否存在,格式: exists key
- 追加字符串,如果key不存在,相当于set命令,格式: append key value
- 获取字符串的长度,格式: strlen key
- 对value进行自增1和自减1操作,格式: incr key decr key
- 设置加减的步长,格式: incrby key num decrby key num
- 获取给定范围的字符串值,格式: getrange key start stop
- 从指定位置开始替换字符串的值,格式: setrange key offset value
- 设置过期时间,查看剩余时间,格式: setex key seconds value ttl key
- 如果key不存在则设置,负责失败,格式: setnx key value
- 同时设置或者获取多个值,格式: mset key1 value1 key2 value2 ... mget key1 key2..
- msetnx是一个原子操作,要么一起成功,要么一起失败
- 用string存储对象时key值的设计
小结 ——String类似的使用场景:
- value除了是字符串也可以是数字!
- 计数器
- 统计多单位的数量 对象缓存存储
3.列表 list
在Redis中,我们可以把list完成栈、队列、阻塞队列 所有的list命令都是用l开头的
- 从list的左边或者右边插入值,格式: lpush key value rpush key value lrange获取指定范围的值,格式: lrange key start stop
- 从列表的左边或者右边移除值,格式: lpop key rpop key
- 获取指定下标的值,格式: lindex key index
- 获取列表中的元素个数,格式: llen key
- 移除列表中的元素,格式: lrem key count value
- 截取列表的值,格式: ltrim key start stop
- 移除列表中最后一个元素,将它添加到另一个列表中,格式: rpoplpush key1 key2
- 根据下标替换列表中的值,格式: lset key index value
- 在列表中插入值,格式: linsert key before|after value new_value
小结
- 他实际上是一个链表,before or after, left,right都可以插入值
- 如果key不存在,创建新的链表
- 如果key存在,新增内容
- 如果移除了所有的值,空链表,也代表不存在
- 在两遍插入或者改动值,效率最高!中间元素,相对来说效率会低一点
- 队列: LPOP RPUSH
- 栈: LPOP LPUSH
4.集合 set
- set中的值是不能重复的
- sadd 给set中添加值,格式: sadd key value1 value2 ...
- 示例,其中第二次命令可以看出,在key(name)后添加value才可以成功执行
- 示例,其中第二次命令可以看出,在key(name)后添加value才可以成功执行
- 获取set中的所有值,格式: smembers key
- 判断某个值是否在set中,格式: sismember key value
- 获取set中元素的个数,格式: scard key
- 删除set中的值,格式: srem key value1 value2....
- 从set中获取随机值,格式: srandmember key count
- 示例,假如一个抽奖机制,随机发送奖品
-
在jiangpin(奖品)中随机抽取shubao(书包)、shuibei(水杯)、qianbi(铅笔)
-
- 示例,假如一个抽奖机制,随机发送奖品
- 随机删除指定个数个元素,格式: spop key count
- 将指定的元素从一个set中移动到另一个set中,格式: smove set1 set2 value
- 示例,将users中的xiaoli移到到name中
- 示例,将users中的xiaoli移到到name中
-
数字集合类:
-
差集
交集
并集
-
- 应用
- 实现交集——抖音中,A用户将所有关注的人放在一个set集合中,将他的粉丝放在一个集合中 可以实现共同关注,共同爱好,二度好友(推荐好友)等
- 实现差集
-
实现并集,重复的只显示1遍
- 实现交集——抖音中,A用户将所有关注的人放在一个set集合中,将他的粉丝放在一个集合中 可以实现共同关注,共同爱好,二度好友(推荐好友)等
5.哈希
hash 可以将哈希看成是一个Map集合,key-value中的value是一个map集合
- 设置或者获取一个hash的值,格式:设置: hset key field1 value1 获取: hget key field
- 设置或者获取hash的值,格式:设置: hmset key field1 value1 field2 value2 ... 获取:hmget key field1 field2...
- 获取hash中的所有值:getall
- 删除指定field的hash键值对,格式: hdel key field
- 12
6.有序集合 zset
- 添加一个值,格式: zadd key scores value
- 获取zset中一个范围的值,格式: zrange key start stop
- 将zset中的值按照score从小到大排序输出,格式: zrangebyscore key min max
- 移除zset中指定的元素,格式: zrem key value
- 查看zset中的元素个数,格式: zcard key
- 根据score的值统计在给定区间的元素个数,格式: zcount key min max