Redis笔记(一)
基础篇
安装好Redis后如何连接:
命令 : 1. redis-cli 2. auth [密码]
命令: redis-cli -h [IP地址] -p [端口号] -a [密码]
如何切换库
select [库编号] 0-14
Redis常见命令
Redis数据结构介绍
Redis是一个key—value的数据库,key一般都是String value类型多种多样,有以下几种
- String
- Hash
- List
- Set
- SortedSet
- GEO
- BitMap
- HypetLog
前五种数据类型是Redis的基本数据类型,以后用到的大部分也是这五种
Redis为了方便开发者的学习使用,在其官网有各种类型命令的教程Redis。也可以在使用redis命令行来查看命令的使用方式
help @[命令行] 如:help @set
Redis通用命令
通用命令是不分数据类型的,所有的数据类型都可以使用。通用命令有许多,详情可以在Redis官网查看。在generic分类下的命令都是通用命令
也可以在命令行使用help命令查看有哪些通用命令
help @generic
下面介绍几个常用的通用命令
-
keys:查看符合模板的所有key,不建议在生产环境下使用
keys * //查看所有key keys a* //查看所有a开头的key keys a?? //查看a开头并且a后面有两个字符的key。问好代表占位符
-
Del:删除指定的key
del name //删除名为name的key del n1 n2 n3//批量删除key
-
Exists:判断一个key是否存在
exists name //判断名为name的key是否存在 存在返回 1;不存在返回 0
-
EXPIRE:给一个key设置有效期,有效期到了后自动删除这个key
expire age 18 //设置名为age的key有效期是18秒的时间
-
TTL:查看一个key的剩余有效时间
ttl age //查看名为age的key的剩余有效时间。单位:秒
返回-2代表该key已过期,不存在了。返回-1代表该key为永久有效
String类型
String类型也就是字符串类型,是Redis最简单的存储类型,其Value是字符串。不过根据其字符串的格式不同,又可以分为三种
-
String:普通字符串。如:“abc”
-
int: 整数类型,可以做自增、自减的操作。如:“123”
-
float:浮点类型,可以做自增、自减的操作。如:“123.23”
不管哪种格式,底层都是字节数组形式存储,只不过是编码不同。字符串类型的最大空间不能超过512m
下面介绍几个常用的String类型命令
-
Set:添加或者修改已经存在的一个String类型的键值对
set name zhangsan //设置名为name的key,value为“zhangsan”
-
Get:根据key获取String类型的Value
get name //获取名为name的key,返回value
-
MSet:批量添加多个String类型的键值对
mset k1 v1 k2 v2 k3 v3
-
MGet:批量获取多个String类型的键值对
mget k1 k2 k3
-
INCR:让一个整形的key自增1
set age 18 incr age
-
INCRBY:让一个整型的key自增并指定步长,例如incrby num 2让num自增2
incrby age 2
-
INCRBYFLOAT:让一个浮点型的key自增并指定步长,例如incrby num 2.3让num自增2
set i 2.45 incrbyfloat i 2
-
SETNX:添加一个String类型的键值对,前提是这个key不存在,否则不执行
setnx name lis //name存在,不执行 setnx name2 lis //name2不存在,执行
-
SETEX:添加一个String类型的键值对,并添加有效期
setex num 100 10 //100秒后num销毁
Key的结构
Redis的key允许有多个单词形成层级结构,多个单词使用“:”隔开;格式如下
项目名:业务名:类型:id
如果Value是一个java对象,例如一个User对象,则可以将对象序列化为json字符串后存储:
Key | value |
---|---|
xiangmu:user:1 | {“id”:1,“name”:“zhangsan”,“age”:18} |
Hash类型
Hash类型,也叫散列,其value是一个无序字典,类似于Java中的HashMap结构。
Hash结构可以将对象中的每个字段独立存储,可以针对单个字段做CRUD
key | value | |
---|---|---|
field | value | |
xiangmu:user:1 | name age | zhangsan 18 |
Hash类型常用命令
-
Hset key field value:添加或修改hash类型key的field的值
hset xiangmu:user:2 field name lisi //给键名为xiangmu:user:2的建设置以一对键值对 {name:lisi}
-
Hget key field:获取一个hash类型key的filed的值
hget xiangmu:user:2 name //返回“lisi”
-
HMset:批量添加多个hash类型key的field的值
Hmset xiangmu:user:3 name wangwu age 18;
hset也可以支持这种功能
-
HMget:批量获取多个hash类型key的field的值
hmget xiangmu:user:2 xiangmu:user:3 //返回 name age
-
HgetAll:获取一个hash类型key中的所有field和value
hgetAll xiangmu:user:3 //返回 name wangwu age 18
-
Hkeys:获取一个hash类型key中的所有field
hkeys xiangmu:user:3 //返回name age
-
Hvals:获取一个hash类型key中的所有value
Hvals xiangmu:user:3 //返回 wangwu 18
-
Hincrby:让一个hash类型key的字段值自增并指定步长
Hincrby xiangmu:user:3 age 2 //返回20
-
Hsetnx:添加一个hash类型的key的field值,前提是这个field不存在,否则不执行
Hsetnx xiangmu:user:3 sex man //添加成功
List类型
Redis中的listt类型有点像Java中的LinkedList类似,可以看成是一个双向链表结构。既可以正向检索也可以支持方向检索。其特征业余LinkedList类似
- 有序
- 元素可以重复
- 插入和删除快
- 查询速度一般
List类型常用命令
-
LPUSH key element … :向列表左侧插入一个或多个元素
LPUSH nums 1 2 3 //创建键名为nums的list类型的key 值从左侧依次插入1,2,3
-
LPOP key:移除并返回列表左侧的第一个元素,没有则返回nil
LPOP nums //返回3
-
RPUSH key element … :向列表右侧插入一个或多个元素
RPUSH nums 1 //向nums右侧插入4
-
RPOP key:移除并返回列表右侧的第一个元素
RPOP nums //返回4
-
LRANGE key star end:返回一段角标范围内的所有元素
LRANGE nums 0 2 //返回2 角标从左往右,从0开始
-
BLPOP和BRPOP:与LPOP和RPOP类似,只不过在没有元素时等待指定时间,而不是直接返回nil
BLPOP nums2 100 //返回nums2 左侧的第一个元素,没有的话等待100秒
Set类型
Redis的Set结构与Java中的HashSet类似,可以看做是一个value为null的HashMap。因为也是一个hash表,因此具备与HashSet类似的特征:
- 无序
- 元素不可重复
- 查找快
- 支持交集、并集、差集等功能
Set类型的常用方法
-
SADD key member … :向set中添加一个或多个元素
SADD arr zhangsan lisi //创建键名为arr的set类型的key
-
SREM key member … : 移除set中的指定元素
SREM arr lisi //将lisi从arr中移除
-
SCARD key: 返回set中元素的个数
SCARD arr //返回1
-
SISMEMBER key member:判断一个元素是否存在于set中
SISMEMBER arr zhangsan //判断zhangsan是否存在与arr中
-
SMEMBERS key:获取set中的所有元素
SMEMBERS arr //获取arr中所有的元素
-
SINTER key1 key2 … :求key1与key2的交集
SADD arr2 wangwu zhaoliu zhangsan SINTER arr arr2 //获取arr与arr2的交集
SortedSet类型
redis中的sorteset是个可以排序的set集合,与Java中的TreeSet类似。但底层数据结构差异大。SortedSet中的每一个元素都带有一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表(SkipList)加 hash表。
SortedSet具备下列特性:
- 可排序
- 元素不重复
- 查询速度快
因为SortedSet的可排序特性,经常被用来实现排行榜这样的功能。
SortedSet类型常用方法
- ZADD key score member:添加一个或多个元素到sorted set ,如果已经存在则更新其score值
- ZREM key member:删除sorted set中的一个指定元素
- ZSCORE key member : 获取sorted set中的指定元素的score值
- ZRANK key member:获取sorted set 中的指定元素的排名
- ZCARD key:获取sorted set中的元素个数
- ZCOUNT key min max:统计score值在给定范围内的所有元素的个数
- ZINCRBY key increment member:让sorted set中的指定元素自增,步长为指定的increment值
- ZRANGE key min max:按照score排序后,获取指定排名范围内的元素
- ZRANGEBYSCORE key min max:按照score排序后,获取指定score范围内的元素
- ZDIFF、ZINTER、ZUNION:求差集、交集、并集
注意:所有的排名默认都是升序,如果要降序则在命令的Z后面添加REV即可,例如:
- 升序获取sorted set 中的指定元素的排名:ZRANK key member
- 降序获取sorted set 中的指定元素的排名:ZREVRANK key memeber
总结
redis常用的类型有String
、Hash
、List
、Set
、SorteSet
分别类似于Java中的String、HashMap、LinkedList、HashSet、TreeSet。其通用方法和各种类型的常用方法都可以在redis官网查找。