基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库
redis是一个高性能的key-value存储系统。它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sortedset--有序集合)和hash(哈希类型)
存储值类型:
sql: 数据存储在表结构中,需要先定义表和字段结构才能存储数据。
nosql:存储的数据格式可以是json、hash等键值对, 不需要定义表,随时可以存储
sql: 支持join操作、使用一条SQL语句可以关联多张表将数据查询出来
nosql:不支持SQL语句,更不支持join操作
sql: SQL 中不允许删除已经被使用的外部数据以保证数据完整性,数据耦合性高
nosql:没有强耦合的概念,数据可以随时删除
sql: SQL具有事务的概念,如果对多张表数据进行更新操作,要么都成功,要么回退数据不更改。
nosql:nosql没有事务概念,数据的操作都是原子级的
在相同水平的系统设计的前提下, 因为 NoSQL 中省略了 JOIN 查询的消耗, 故理论上性能上是优于 SQL 的
# 添加一个值 set key value # 添加多个 mset key1 value1 key2 value2
# 获取一个 get key # 获取多个值 mget key1 key2
# 删除值 del key
strlen key
append key value
# 数值 + 1, 每次只增加1 incr key # 指定 数值增加10, 只能增加整数值 incrby key 10 # 指定数值增加10.5, 可以增加整数或小数 incrbyfloat key 10.5
# 数值 - 1, 每次只能减1 decr key # 指定 数值减去10, 只能减整数值 decrby key 10
为指定的 key 设置值及其过期时间。如果 key 已经存在, SETEX 命令将会替换旧的值
# 格式: setex key seconds value # 设置 code=3920且有效期等于60s的数据 setex code 60 3920 # 查看有效时期 ttl code
keys *
hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。
Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)
增加修改数据
格式: hset key field value
格式: hmset key field value
# 添加一个hash数据 hset user name "张三" # 会覆盖name字段值 hmset user name "lisi" name "wangwu" # 添加多了字段 hset user age 20 hight 175
查看字段
格式: hget key field
格式: hmget key field
# 查看一个字段值 hget user name # 查看多个字段值 hmget user name age hight
查看hash表中字段的数量
格式: hlen key
hlen user
hash表中是否存在指定的字段
格式: hexists key field
hexists user gender
查看hash表中的字段和值
格式: hkeys key
格式:hvals key
# 查看hash表中的所有字段 hkeys user # 查看hash表中的所有值 hvals user
格式: hgetall key
hgetall user
格式:hincrby key field incrment
格式:hincrbyfloat key field incrment
# 指定 数值增加10, 只能增加整数值 hincrby user age 1 # 指定数值增加10.5, 可以增加整数或小数 hincrbyfloat user age 1.5
hsetnx 命令用于为哈希表中不存在的的字段赋值
# 格式: hsetnx key field value hsetnx user gender nan
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
格式:
lpush key vuale1 value2 或 rpush key vuale1 value2
# 从左边添加一个或多个数据 lpush list1 1 2 3 4 5 6 # 从尾部添加一个或多个数据 rpush list2 1 2 3 4 5 6
格式: lrange key start stop
格式: lindex key index
格式: llen key
# 通过索引范围查看数据 lrange list2 0 -1 # 查看指定索引位置的数据 lindex list2 0 # 查看list 的长度 llen list2
格式: lpop key 或 rpop key
格式: blpop key 或 brpop key
格式: lrem key count value
count 的值可以是以下几种:
Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
Redis 中集合是通过哈希表实现的。
添加数据
格式: sadd key member [member ...]
# 添加集合成员 sadd city beijing shanghai xian tianjin wuhan zhengzhou
获取数据
格式: smembers key
删除成员
格式: srem key member [member ...]
srem city beijing
查看集合成员数量
格式: scard key
scard city
判断是否是集合中的成员
格式: sismember key member
sismember city beijing
随机获取指定数量的成员数据
格式: srandmember key count
# 随机获取2个成员数据 srandmember city 2
随机获取集合中的成员数据并删除该数据
格式: spop key
spop city
交集,并集,差集
格式: 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
# 将集合成员1从集合set5中移动到集合set6中 smove set5 set6 1
Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复
添加数据
格式: zadd key score1 member1 [score2 member2 ...]
# 添加数据 zadd zset1 10 ls # 添加多个数据 zadd zset1 10 ww 30 zs 25 zl
获取有序集合中的数据
格式: zrange key start stop [withscores]
或 zrevrange key start stop [withscores]
zrange 和 zrevrange 互为逆序
zrange zset1 0 -1 withscores zrevrange zset1 0 -1 withscores
删除数据
格式: zrem key member [member]
按条件查询
格式: zrangebyscore key min max [WITHSCORES] [LIMIT offset count]
格式: zrevrangebyscore key min max [WITHSCORES] [LIMIT offset count]
备注: min和max 查询条件范围,指向的是有序集合排序的数值
按条件删除
格式: zremrangebyrank key start stop
格式: zremrangebyscore key min max
备注: min和max 查询条件范围,指向的是有序集合排序的数值;start 和 stop作用于索引
获取有序集合中的数量
格式: zcard key
格式: zcount key min max
有序集合的交集和并集
格式: zinterstore destination numkeys key [key ...]
格式: zunionstore destination numkeys key [key ...]
备注: 类似无序集合的操作, numkeys 含义是表示后面有几个集合进行操作
获取数据对应的索引
格式: zrank key member
格式: zrevrank key member
score值的获取与修改
格式: zscore key member
格式: zincrby key increment member
del key
exists key
type key
# 设置过期时间,以秒计 expire key seconds # 设置过期时间,以毫秒计 pexpire key milliseconds # 设置过期时间的时间戳,以秒计 expireat key timestamp # 设置过期时间的时间戳,以毫秒计 pexpireat key milli-timestamp # 移除 key 的过期时间,key 将持久保持 persist key
ttl key
: 以秒为单位,返回给定 key 的剩余生存时间
pttl key
: 以毫秒为单位,返回给定 key 的剩余生存时间
keys pattern
# 修改key的名称,新的名称存在,则值就会被覆盖 rename key newkey # 修改key的名称,仅当 newkey 不存在时,将 key 改名为 newkey renamenx key newkey
select index
# 将数据移动到其他库中 move key db
dbsize
flushdb
flushall