Redis语法基础
图
Redis作为一个非关系型数据库,有着自己的数据库命令,完成各种读写操作,Redis是一个key-value存储系统,有着非常好的读写性能,本文记录的是Redis的基础语法、命令

数据库

Redis默认有16个数据库

图

默认使用的是第0个,可以使用select进行切换

图

命令

# 查看数据库大小
dbsize

# 存
set key value

# 取
get key

# 查看所有key
keys *

# 清空当前数据库
flushdb

# 清空所有数据库
flushall

# 设置key的过期时间,单位秒
expire key 10

# 查看当前key的剩余时间
ttl key

# 查看key的数据类型
type key

# 查询是否存在key
exists key

# 给key的value追加内容
append key value

# 查询key的value长度
strlen key

# 自增(加1)
incr key

# 自增(带步长,可负反向操作)
incrby key 10

# 自减(减1)
decr key

# 自减(带步长,可负反向操作)
decrby key 10

数据类型

String

注意一个键值最大存储为512M

# 获取字符串指定范围数据
getrange key start end
如:getrange key 2 -1 # 第3个字符到最后

# 替换
setrange key offset value

setex(set with expire)   # 设置过期时间
setnx(set if not exist)  # 不存在设置(分布式常用)

# 批量存
mset k1 v1 k2 v2 ...
# 批量取
mget k1 k2 ...

使用场景:

  • 普通缓存
  • 计数器
  • 统计等

List

可以把List做成栈、队列、阻塞队列

所有的List命令都是l开头

# 将一个或多个值插到列表头部
lpush key value
# 将一个或多个值插到列表尾部
rpush key value

# 通过区间获取值
lrange key 0 -1 # -1最后一个

# 移除头部
lpop key

# 移除尾部
rpop key

# 获取第某个值
lindex key index

# 查询列表长度
llen key

# 移除list集合中指定个数的value,注意list是可以重复的
lrem key length name

消息队列(lpush rpop 先进先出),栈(lpush lpop 先进后出)

Set

Set中的值是不能重复、无序的

# 存
sadd key value

# 查看指定set的所有值
smembers key

# 判断某一个值是否在Set中
sismember key value

# 获取元素个数
scard key

# 移除
srem key value

# 获取随机不重复
srandmember key 1 # 可指定个数

# 随机移除
spop key

# 差集(查询key1在key2中没有的值)
sdiff key1 key2

# 交集(查询key1在key2中有的值)
sinter key1 key2

# 并集(查询key1和key2中的所有值)
sunion key1 key2

Zset

有序不可重复集合

Hash

hash是一个键值对集合,是一个String类型的field和value的映射表,适用于存储对象

# 存
hset item name "tom"
# 取
hget item name

Geospatial

地理位置,在Redis3.2版本推出

# 添加
geoadd china:city 116.40 39.90 beijing
# 查询
geopos china:city beijing
# 查询两个位置距离
geodist china:city beijing shanghai
# 附近的人
georadius china:city 110 30 100 km

事务

Redis单条命令保存有原子性,但是事物不保证原子性

Redis的事务:

  • 开启事务(multi)
  • 命令入队(...)
  • 执行事务(exec)

注意:命令是顺序执行的

放弃事务

multi # 开启事务
set k1 v1
set k2 v2
discard # 取消事务

Redis事务没有隔离级别概念,如开启事务后执行,只要不是命令有误,那么入队的命令都会执行,即使中途出现错误,后面的命令依然会执行

实现乐观锁

Redis中有watch监视功能,监视一个字段后开启事务进行操作,如果提交事务发现监视字段发生了变化,那么事务就会提交失败