Redis是以key-value的方式存储数据的缓存数据库。
Redis基本操作
- 功能性指令
信息添加
set key value
信息查询
get key (数据没有返回(nil))
- 清除屏幕信息
clear
- 帮助信息查阅
help command(命令名)
help @组名
例如,help get
例如,help @string
- 退出指令(三种)
quit
exit
<Esc> (会关掉显示屏,最好别用)
Redis支持的数据类型
redis支持五种数据类型,分别是string、hash、list、set、sorted set
string(字符串)
格式:
-添加/修改数据
set key value (单数据插入)
mset key1 value1 key2 value2 ...... (多数据插入)
-获取数据
get key
mget key1 key2 ......
-设置一个不可修改的key
setnx key value
(注意:只在键 key 不存在的情况下, 将键 key 的值设置为 value 。
若键 key 已经存在, 则 SETNX 命令不做任何动作。 可用于分布锁)
-设置数值数据增加指定范围的值
incr key (默认加1)
incrby key increment (整数)
incrbyfloat key increment (小数)
-设置数值数据减少指定范围的值
decr key (默认减1)
decrby key increment
-设置数据具有指定的生命周期
setex key seconds value
psetex key milliseconds value
1.string类型在redis内部存储默认是一个字符串,当遇到增减类(incr,decr)操作时会转成数值进行计算。
2.string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。
3.redis所有的操作都是原子性的,采用单线程处理所有业务,命令是一个一个执行的,因此无需考虑并发带来的影响。
4.redis中string类型数据最大存储量 521MB
注意:按数值进行操作的数据,如果原始数据不能转成数值,或超越redis数值上限范围,将报错。
redis数值计算上限范围(java中long类型数据的最大值,Long.MAX_VALUE = 2^(63)-1)
利用redis数值超越上限范围报错的方式,可以用于处理点击次数的业务中
(设置保存值=最大值-可点击次数,若用户继续点击redis报错,程序则提示用户次数用完,
这样就不需要去判断用户次数,提高程序性能)。
hash(哈希)
存储需求:对一系列的存储数据进行编组,方便管理,典型应用存储对象信息
存储结构:一个存储空间保存多个键值对数据
hash类型:底层使用哈希表结构实现数据存储
格式:
- 添加/修改数据
hset key field value
hmset key field1 value1 field1 value2 ......
- 获取数据
hget key field
hmget key field1 field2 ......
hgetall key
-删除数据
hdel key field1 field2 ......
-设置数值数据增加/减少指定范围的值
hincr key field (默认加1)
hincrby key field increment (整数)
hincrbyfloat key field increment (小数)
-获取哈希表中字段的数量
hlen key
-获取哈希表中是否存在指定字段
hexists key field
1.hash类型下的value只能存储字符串,不允许存储其他数据类型的数据,不存在嵌套现象。如果数据未获取到,对应的值为(nil)。
2.每个hash只能存储 2^(32)-1 个键值对。
3.hash类型十分贴近对象的数据存储形式,并且可以灵活添加、删除对象属性。但hash设计初衷不是为了存储大量对象而设计的,切记不可滥用,更不可以将hash作为对象列表使用。
4.hgetall key 操作可以获取全部的属性,但如果内部的field过多,遍历整体数据效率会很低,有可能会成为数据访问的瓶颈。
list(列表)
数据存储需求:存储多个数据,并对数据进入存储空间的顺序进行区分。
需要的存储结构:一个存储空间保存多个数据,且通过数据可以体现进入顺序。
list类型:保存多个数据,底层使用双向链表存储结构实现。
格式:
-添加/修改数据
-左边插入
lpush key value1 value2 ......
-右边插入
rpush key value1 value2 ......
-获取数据
lrange key start stop (lrange key 0 -1 (获取全部数据))
lindex key index
-获取list列表的长度
llen key
-获取并移除数据
lpop key
rpop key
blpop key timeout(等待时间)
brpop key timeout(等待时间)
查询key中是否存在value,存在返回key和value并移除value,不存在,进入等待时间,时间过后不存在返回(nil)
-移除指定数据
lrem key count value
set(集合)
存储需求:存储大量的数据,在查询方面提供更高的效率。
需要的存储结构:能够保存大量的数据,高效的内部存储机制,便于查询。
set类型:与hash存储结构完全相同,但仅存储键,不存在键值(nil),并且值是不允许重复的。
格式:
-添加数据
sadd key member1 member2 ......
-获取全部数据
smembers key
-删除数据
srem key member1 member2 ......
-获取集合数据总量
scard key
-判断集合中是否包含指定数据
sismember key member
-随机获取集合中指定数量的数据
srandmember key count
-随机获取集合中的某个数据并将该数据移出集合
spop key
-求两个集合的交、并、差集
sinter key1 key2 ......
sunion key1 key2 ......
sdiff key1 key2 ......
-求两个集合的交、并、差集并存储到指定集合中
sinterstore destination key1 key2 ......
sunionstore destination key1 key2 ......
sdiffstore destination key1 key2 ......
-将指定数据从原始集合中移动到目标集合中
smove source destination member
set类型不允许数据重复,如果添加的数据在set中已经存在,将只保留一份。
set虽然与hash的存储结构相同,但是无法启用hash中存储值的空间。
zset(sorted_set 有序集合)
存储需求:数据排序有利于数据的有效展示,需要提供一种可以根据自身特征进行排序的方式。
存储结构:可以保存可排序的数据结构。
sorted_set类型:在set的存储结构基础上添加可排序字段。
格式:
-添加数据
zadd key score value
-获取全部数据
zrange key start stop [withscores]
zrevrange key start stop [withscores]
-删除数据
zrem key member1 member2 ......
-按条件获取数据
zrangebyscore key min max [withscores] [limit]
zrevrangebyscore key min max [withscores]
注意:
min与max用于限定搜索查询的条件
start与stop用于限定查询范围,作用于索引,表示开始和结束索引
offset与count用于限定查询范围,作用于查询结果,表示开始位置和数据总量
-按条件删除数据
zremrangebyrank key start stop
zremrangebyscore key min max
-获取集合数据总量
zcard key
zcount key min max
-集合交、并操作
zinterstore destination numkeys key [key]
zunionstore destination numkeys key [key]
注意:
score保存的数据存储空间是64位,如果是整数范围是-9007199254740992~9007199254740992
score保存的数据也可以是一个双精度的double值,基于双精度浮点数的特征,可能会丢失精度,使用时候要慎重(比如,在描述0.5=(2^-1),0.25=(2^-2),0.125=(2^-4)这些数据可以精准描述,而0.3,0.6,0.9这些数字都不了精准描述)
sorted_set 底层存储还是基于set结构的,因此value数据不能重复,如果重复添加相同的数据,score值将被反复覆盖,保留最后一次修改的结果
key基本操作
-删除指定的key
del key
-获取key的存在
exists key
-获取key的类型
type key
-为指定的key设置有效值
expire key seconds
pexpire key milliseconds
-获取key的有效时间
ttl key
pttl key
-设置key从时效性转换到永久性
persist key
-查询key操作
keys pattern
查询模式规则
* 匹配任意数量的任意符号 ? 匹配一个任意字符 [] 匹配一个指定符号
-修改key的名字
rename key newkey
renamenx key newkey (如果newkey存在则不做操作)
-对key进行排序
sort key(默认升序)
redis支持对 hash、list,set,sorted set元素(元素可以为数值与字符串)的排序,string不行。
db基本操作
redis共有16个数据库编号从0~15,通常默认打开的是0号数据库。
-切换数据库
select index
-退出
quit
-查询数据库是否连通
ping (连通返回 pong)
-打印指定的字符串
echo message
-数据移动
move key db
(如果移动的key在指定数据库中存在则移动失败)
-获取当前数据库key的个数
dbsize
-数据删除
flushdb (删除当前数据库的数据)
flushall (删除全部数据库的数据)