3、Redis常用五大数据类型
3.1. Redis键(key)
命令 | 作用 |
keys * | 查看当前库所有key |
exists key | 判断key是否存在 |
type key | 查看key是什么类型的 |
del | 删除指定的key数据 |
expire key 10 | 为key设置过期时间 |
ttl key | 查询还有多久过期(-1:永不过期,-2:已经过期) |
3.2 Redis字符串
- String类型是Redis中最基本的类型,一个Redis中字符串value最多可以是
512M
- String是
二进制安全的
.意味着Redis的String可以包含任何数据,比如jpg图片或者是序列化的对象。 - 一个redis中字符串value最多可以是512M.
3.2.1: 常用命令
set <key> <value>
:存值(key如若已存在则覆盖)
127.0.0.1:6379> set name qi OK
get <key>
:取值
127.0.0.1:6379> get name "qi"
append <key> <value>
将给定的value追加到原值的末尾
127.0.0.1:6379> append name jing (integer) 6 127.0.0.1:6379> get name "qijing"
strlen <key>
获取值得长度
127.0.0.1:6379> strlen name (integer) 6
setnx key value
:只有key不存在时,设置key的值
# 存在key则设置不成功 127.0.0.1:6379> setnx name zhang (integer) 0 # 不存在这个key,成功设置 127.0.0.1:6379> setnx age 10 (integer) 1
incr <key>
: 只能对数字值操作+1,如果为空,新增值为1
# key值不存在,也就是key为空 127.0.0.1:6379> incr k1 (integer) 1 127.0.0.1:6379> get k1 "1" # key不为空 127.0.0.1:6379> set age 10 OK 127.0.0.1:6379> incr age (integer) 11 127.0.0.1:6379> get age "11"
decr <key>
:只能对数字值操作-1,如果为空,则为0
127.0.0.1:6379> set age 10 OK 127.0.0.1:6379> decr age (integer) 9 127.0.0.1:6379> get age "9"
incrby <key> <步长>
:可以设置每次增加多少
127.0.0.1:6379> set age 10 OK 127.0.0.1:6379> incrby age 10 (integer) 20 127.0.0.1:6379> get age "20"
decrby <key> <步长>
:可以设置每次减少多少
127.0.0.1:6379> set age 10 OK 127.0.0.1:6379> decrby age 10 (integer) 0 127.0.0.1:6379> get age "0"
mset <key1> <value1> <key2> <value2>
:可以设置多个key-value
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3 OK 127.0.0.1:6379> keys * 1) "k1" 2) "k2" 3) "k3"
同理:msetnx <key1> <value2> <key2> <value2>
:给定所有key都 不存在设置key的值,一个失败都失败
mget <key1> <key2>
:可以获取多个key的value值
127.0.0.1:6379> mget k1 k2 k3 1) "v1" 2) "v2" 3) "v3"
getrange <key> <起始位置> <结束位置>
:获取值的范围,类似于java中的substring
127.0.0.1:6379> set name YangLi OK 127.0.0.1:6379> getrange name 0 3 "Yang"
setrange <key> <起始位置> <value>
: 从key的起始位置加入值
127.0.0.1:6379> setrange name 3 aaa (integer) 7 127.0.0.1:6379> get name "123aaa7" 127.0.0.1:6379>
setex <key> <过期时间> <value>
: 设置过期时间
127.0.0.1:6379> setex age 10 21 OK 127.0.0.1:6379> ttl age (integer) -2 127.0.0.1:6379> get age (nil)
getset <key> <value>
:设置新值获取旧值
127.0.0.1:6379> getset name MaYangLi "qijingjing" 127.0.0.1:6379> get name "MaYangLi"
3.3 Redis列表(List)
- Redis列表是最简单的字符串列表,按照插入顺序,你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
- 它的底层是一个
双向链表
,对两端操作性很高,通过索引下标的操作中间点的性能很差。
3.3.1:常用命令
lpush/rpush <key> <v1> <v2> <v3>
:从左边/右边插入一个或多个值
lrange <key> <开始位置> <结束位置>
:按照索引下标获得元素
127.0.0.1:6379> lpush name qijingjing yangli (integer) 2 # 0 到 -1 代表全部元素 127.0.0.1:6379> lrange name 0 -1 1) "yangli" 2) "qijingjing"
lpop/rpop <key>
: 从左边/右边取到一个值,取出后即值不存在了
127.0.0.1:6379> rpush name v1 v2 v3 (integer) 3 127.0.0.1:6379> lpop name "v1" 127.0.0.1:6379> rpop name "v3"
rpoplpush <key1> <key2>
:从key1列表右边吐出一个值,插到key2列表左边
127.0.0.1:6379> rpush name1 v1 v2 v3 (integer) 3 127.0.0.1:6379> rpush name2 v4 v5 v6 (integer) 3 127.0.0.1:6379> rpoplpush name1 name2 "v3" 127.0.0.1:6379> lrange name1 0 -1 1) "v1" 2) "v2" 127.0.0.1:6379> lrange name2 0 -1 1) "v3" 2) "v4" 3) "v5" 4) "v6"
lindex key <下标>
:按照索引下标获得元素(从左到右)
127.0.0.1:6379> rpush name v1 v2 v3 (integer) 3 127.0.0.1:6379> lindex name 0 "v1" 127.0.0.1:6379> lindex name 2 "v3"
llen <key>
:获得列表长度
127.0.0.1:6379> rpush name v1 v2 (integer) 2 127.0.0.1:6379> llen name (integer) 2
linsert <key> <before>/<after> <value> <newvalue>
:在value的前面/后面插入newvalue插入值
127.0.0.1:6379> rpush age v1 v2 v3 (integer) 3 127.0.0.1:6379> linsert age before v3 v4 (integer) 4 127.0.0.1:6379> lrange age 0 -1 1) "v1" 2) "v2" 3) "v4" 4) "v3"
lrem <key><n><value>
:从左边删除n个value(从左到右)
127.0.0.1:6379> rpush k11 v1 v2 v3 v3 v3 v4 v5 (integer) 7 127.0.0.1:6379> lrem k11 2 v3 (integer) 2 127.0.0.1:6379> lrange k11 0 -1 1) "v1" 2) "v2" 3) "v3" 4) "v4" 5) "v5"
lset <key> <index> <value>
:在指定下标位置换一个新值
127.0.0.1:6379> rpush key v1 v2 v3 (integer) 3 127.0.0.1:6379> lset key 0 vv OK 127.0.0.1:6379> lrange key 0 -1 1) "vv" 2) "v2" 3) "v3"
3.4 Redis集合(Set)
- Redis set 对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以
自动排重
的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择 - Redis的Set是string类型的无序集合,它底层其实是一个value为null的hash表
3.4.1:常用命令
sadd <key><value1><value2>
:将一个或多个元素加入到集合key中,已经存在的会被忽略
smembers<key>
:取出该集合所有值
127.0.0.1:6379> sadd name qi qi a b c (integer) 4 127.0.0.1:6379> smembers name 1) "c" 2) "a" 3) "b" 4) "qi"
sismember<key><value>
:判断集合key是否有含value值,有1,没有0
127.0.0.1:6379> sadd name qw df (integer) 2 127.0.0.1:6379> sismember name qw (integer) 1 127.0.0.1:6379>
scard<key>
:返回该集合的元素个数。
127.0.0.1:6379> sadd age 1 2 3 (integer) 3 127.0.0.1:6379> scard age (integer) 3
srem<key><value1><value2>
:删除集合中的某个元素(没有则不做处理)
127.0.0.1:6379> sadd name a b c d (integer) 1 127.0.0.1:6379> srem name a b (integer) 2 127.0.0.1:6379> smembers name 1) "c" 2) "d"
spop<key>
:随机从该集合中吐出一个值
127.0.0.1:6379> spop name "a" 127.0.0.1:6379> smembers name 1) "c" 2) "b"
srandmember<key><n>
:随机从该集合中取出n个值,不会从集合中删除。
127.0.0.1:6379> sadd name a b c d e (integer) 5 127.0.0.1:6379> srandmember name 3 1) "c" 2) "a" 3) "e"
smove<source><destination><value>
:把一个集合的值移到另一个集合
127.0.0.1:6379> sadd age1 1 2 3 4 5 (integer) 5 127.0.0.1:6379> sadd age2 6 7 8 9 10 (integer) 5 127.0.0.1:6379> smove age1 age2 1 (integer) 1 127.0.0.1:6379> smembers age1 1) "2" 2) "3" 3) "4" 4) "5" 127.0.0.1:6379> smembers age2 1) "1" 2) "6" 3) "7" 4) "8" 5) "9" 6) "10"
sinter<key1><key2>
:返回两个集合的交集
元素
127.0.0.1:6379> sadd age1 1 2 3 4 (integer) 1 127.0.0.1:6379> sadd age2 1 3 567 (integer) 2 127.0.0.1:6379> sinter age1 age2 1) "1" 2) "3"
sunion<key1><key2>
:返回两个集合的并集
元素
127.0.0.1:6379> sadd age1 1 2 3 4 (integer) 4 127.0.0.1:6379> sadd age1 2 3 4 56 (integer) 1 127.0.0.1:6379> sunion age1 age2 1) "1" 2) "2" 3) "3" 4) "4" 5) "56"
sdiff<key1><key2>
:返回两个集合的差集
元素(key1中的,key2中没有的)
127.0.0.1:6379> sadd age1 1 3 5 7 (integer) 4 127.0.0.1:6379> sadd age2 1 2 4 6 7 (integer) 5 127.0.0.1:6379> sdiff age1 age2 1) "3" 2) "5"
3.5 Redis哈希(Hash)
- Redis hash 是一个键值对的集合
- Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。存储部分变更的数据,如用户信息等。
hset <key><field><value>
:给key集合中的field键赋值value
hget <key><field>
:从key集合field取出value。
127.0.0.1:6379> hset user name qijingjing (integer) 1 127.0.0.1:6379> hget user name "qijingjing"
hmset <key1><value1><key2><value2>..
:批量设置hash的值
127.0.0.1:6379> hmset user age 1 city beijing OK 127.0.0.1:6379> hget user age "1" 127.0.0.1:6379> hget user city "beijing"
hexists<key1><field>
:查看哈希表key中,给定field是否存在
127.0.0.1:6379> hset user name qijingjing (integer) 1 127.0.0.1:6379> hexists user name (integer) 1
hkeys <key>
:列出该hash集合所有的filed
127.0.0.1:6379> hset user name qijing age 1 (integer) 2 127.0.0.1:6379> hkeys user 1) "name" 2) "age"
hvals <key>
:列出hash集合所有的value
127.0.0.1:6379> hmset user age 1 name qijingjing OK 127.0.0.1:6379> hvals user 1) "1" 2) "qijingjing"
hincrby <key><field><increment>
:为哈希表key中的field的值进行加减操作
127.0.0.1:6379> hset user age 1 (integer) 1 127.0.0.1:6379> hincrby user age 10 (integer) 11 127.0.0.1:6379> hincrby user age -1 (integer) 10
hsetnx <key><field><value>
:将哈希表key中的field的值设置为value,当且仅当field不存在
127.0.0.1:6379> hset user name qijing (integer) 1 127.0.0.1:6379> hsetnx user age 1 (integer) 1 127.0.0.1:6379> hkeys user 1) "name" 2) "age"
3.6: Redis有序集合Zset(sorted set)
与set相比,sorted set增加了一个权重参数score,使得集合的元素可以按照score进行有序排列,可以用sorted set来做带权重的队列,比如普通消息的score为1,重要消息的score为2,让权重高的先执行即可。可以用于排行榜操作。
zadd <key><score1><value1><score2><value2>...
:将一个或多个元素加入到有序集合key中
zrange<key><start><stop>[WITHSCORES]
:返回有序集合key中,下标在start到stop之间的元素,带WITHSCORES可以让分数一起和值返回到结果集。
127.0.0.1:6379> zadd age 12 xiaohong 13 xiaowang 10 xiaoli (integer) 3 127.0.0.1:6379> zrange age 0 -1 1) "xiaoli" 2) "xiaohong" 3) "xiaowang"
zrangebyscore key min max [withscores][limit offset count]
:返回有序集key中,所有score值介于min和max之间(包括等于min或max)的成员,有序集合成员按score值递增排列
zrevrangebyscore key max min
:同上,只是从大到小排序
127.0.0.1:6379> zadd age 12 xiaohong 13 xiaowang 10 xiaoli 16 xiaohei (integer) 4 127.0.0.1:6379> zrangebyscore age 13 17 1) "xiaowang" 2) "xiaohei"
zincrby <key><increment><value>
:为元素的score加上增量
127.0.0.1:6379> zadd age 10 xiaohong 11 xiaolan (integer) 2 127.0.0.1:6379> zincrby age 3 xiaohong "13"
zrem<key><value>
:删除该集合下指定值的元素
127.0.0.1:6379> zadd age 10 xiaohong 11 xiaolan (integer) 2 127.0.0.1:6379> zrem age xiaohong (integer) 1 127.0.0.1:6379> zrange age 0 -1 1) "xiaolan"
zcount<key><min><max>
:统计该集合分数区间的元素个数
127.0.0.1:6379> zadd age 2 zhangsan 4 lisi 6 wangwu 8 zhaoliu (integer) 4 127.0.0.1:6379> zcount age 2 6 (integer) 3
zrank<key><value>
:返回该值在集合中的排名,从0开始
127.0.0.1:6379> zadd age 2 zhangsan 4 lisi 6 wangwu 8 laoliu (integer) 4 127.0.0.1:6379> zrank age laoliu (integer) 3
4、Redis配置文件介绍
Redis的配文件位于Redis安装目录下,文件名为redis.conf
4.1:Units单位
1、配置大小单位,开头定义了一些基本的度量单位,只支持bytes,不支持bit
2、对大小写不敏感
4.2:INCLUDES包含
和spring配置文件类似,可以通过includes包含,redis.conf可以作为总文件,可以包含其他文件!
4.3:NETWORD网路配置
bind 127.0.0.1 #绑定的ip protected-mode yes #保护模式,no的话支持远程访问 port 6379 #默认端口
4.4:GENERAL通用
timeout 0 #默认永不超时 tcp-keepalive 300 #检测连接是否还活着 daemonize yes #改为yes,开启redis后台启动 logfile "" #日志文件的位置 databases 16 #设置数据库的数目,默认的数据库是零号数据库 loglevel notice #日志级别。(debug记录大量日志信息,适用于开发、测试阶段,verbose:有用的信息,notice: 生产环境,warning:警告信息)
4.5:限制
maxclients 10000 # 设置能连上redis的最大客户端连接数量 maxmemory <bytes> # redis配置的最大内存容量 maxmemory-policy noeviction # maxmemory-policy 内存达到上限的处理策略 #volatile-lru:利用LRU算法移除设置过过期时间的key。 #volatile-random:随机移除设置过过期时间的key。 #volatile-ttl:移除即将过期的key,根据最近过期时间来删除(辅以TTL) #allkeys-lru:利用LRU算法移除任何key。 #allkeys-random:随机移除任何key。 #noeviction:不移除任何key,只是返回一个写错误。
4.6:SRCURITY安全
# 启动redis # 连接客户端 # 获得和设置密码 config get requirepass config set requirepass "123456" #测试ping,发现需要验证 127.0.0.1:6379> ping NOAUTH Authentication required. # 验证 127.0.0.1:6379> auth 123456 OK 127.0.0.1:6379> ping PONG