一 简介

redis的数据类型主要包括5种基本数据类型和三种特殊数据类型

二 redis key的常用命令

  • 1、判断一个key是否存在
# 判断key=name的这个key是否存在 如果存在返回1 否则返回0
exists name
  • 2、将key从当前db迁移到另外一个db中去
#表示将key为name的这个可以 迁移到db=1的db中去
move name 1
  • 3、为key设置过期时间
#设置key为name的key的过期时间为30秒 单位是秒
expire name 30
  • 4、查看某个key剩余的过期时间
#查看key=name的剩余的过期时间 如果返回-1则证明该key是永不过期的 如果是-2 则证明这个key不存在
ttl name
  • 5、查看当前key的类型
#可以使用type命令来查看当前key的类型
type name

三 String类型

  • 基本的设值命令
#为String类型赋值 格式形如 set key value
set name zhangsan
#为指定的key末尾添加数据 形如 append key value 这样 name的值会变		成zhangsan123 如果当前key不存在 就相当于set key value
append name 123
#获取指定key的值的长度 形如strlen key 此时返回的是11
strlen name
  • 自增、递减的命令
#redis 自增 形如 incr key 如果key不存在 会自己新建
incr view
#redis 递减 decr key 如果key不存在 会自己新建
decr view 
#redis 自增 指定步长 incrby key step 如果key不存在 会自己新建
incrby view 32
#redis 递减 指定步长
decrby view 32
  • 字符串范围相关
#先赋值一个key name
set name "zhangsan123 wangwu456"
#获取name的第0到第3个字符的值 返回的是zhan 如果key不存在 返回空字符串
getrange name 0 3
#索引为-1 代表第一个字符的前一个位置 返回 angsan123 wangwu456 如果是0到-1则返回全部字符串
getrange name 2 -1
#替换指定key的某些值 相当于java replace 形如 setrange key offset value 下面的示例会从第一个位置开始替换 最终get name 会返回 zabcgsan123 wangwu456
setrange name 1 abc
  • setex、setnx
#setex 是 set with expire的缩写 表示在设置key的时候 同时设置过期时间 形如 setex key seconds value
setex name1 30 zhangsan
#setnx key value 表示如果key不存在则设值 如果存在则不处理 下面的示例name的值最终还是123 这个命令可以用作乐观锁
set name 123
setnx name 456
  • 批量设值
#mset key1 value1 [key2 value2 ..] 下面的命令一次性设置了三个key
mset n1 v1 n2 v2 n3 v3
# mget key [key ..]
mget n1 n2 n3
#msetnx key value [key value ..] 这个表示如果key不存在就新建 存在不做处理 如果这些批量key中有一个key是已经存在了的 那么整个key的集合中的key都不做处理
msetnx n1 v2 n3 v2 n4 v4 #最终执行后也不会报错 但是n4没有 n1、n3的值还是原来的
msetnx n4 v4 n5 v5 #成功赋值 有n4 n5
#一个小案例 原来向redis中存对象都是值都是直接丢的一个json字符串 {"name":"zhangsan", "age":1} 可以通过对redis key的设计避免这种操作,使得key可以复用 这种设计可以省却json序列化的操作
mset user:1:name "zhangsan" user:1:age 1
  • getset
#getset key value 表示先获取指定key的值 然后再赋值新值 会返回旧的值 如果key不存在 那么会返回空 但是会将新值设置到这个key中
getset name 456

四 List类型

所有的list命令都是以l开头的 list数据类型在redis中的实现实际上是一个链表,所以在它的前后都可以进行数据的插入、读取

#lpush key value1 value2 .. 下面的示例表示将alist这个key push进3个值 abc
lpush alist a b c 
#lrange key start stop 下面的示例表示查询alist中的所有数据
lrange alist 0 -1
#rpush key value1 value2 rpush表示在列表的右方push(列表头)下面的示例会将d push到a的前面
rpush alist d
#lpop key 表示从左边(列表的尾部)移除第一个元素
lpop alist
#rpop key 表示从右边(列表的头部)移除第一个元素
rpop alist
#lindex key index 获取指定index的list的值 index从0开始
lindex alist 0
#llen key 表示获取某个list类型的key的长度(数据的个数)
llen alist
#lrem key count value 表示删除指定的key的指定的值 count表示要删除的个数
lrem alist 2 a # 表示会删除alist这个key中值为a的两个数据 value是精确匹配的
#ltrim key start stop 让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除
ltrim alist 1 3
#rpoplpush source destination 组合命令 从源列表中删除一个元素 并将钙元素添加到指定list中 如果destination不存在则创建
rpoplpush alist blist
#lset key index value 表示向一个list类型的key中添加元素到指定位置 如果key不存在 则报错 如果索引位置超过了 key的长度 也会报错 如 alist一共两个元素 那么 lset alist 2 dd 是会报索引超界的错误的
lset alist 1 dd
#linsert key before|after pivot value 表示在指定key的指定元素的前面或者后面添加值
linsert alist before dd cc #表示在alist的dd元素的前面添加一个值cc

五 Set类型

redis中的set类型,一个key中可以存储多条数据,但是数据之间不能重复,而List类型是可以重复的 set集合的相关命令都是s开头

#添加元素 sadd key member [member ..]
sadd myset a b c d
#smembers key 查看某个set类的key的所有元素
smembers myset
#sismember key member 判断某个set类型的key是否包含指定元素 如果包含返回1 如果不包含返回0
sismember myset a
#scard key 获取某个set类型key的元素的个数
scard myset
#srem key member [member ..] 移除某个set类型key的指定元素 如果有元素被删除 则返回1 如果该元素不存在 没有被删除则返回0
srem myset a
#srandmember key [count] 表示从某个set类型的集合中随机筛选出几个值 count是几就筛选几个值
srandmember myset 2
#spop key [count] 随机移除某个set类型key的元素 count写几个就移除几个 默认移除一个
spop myset 2
#smove source destination member 从源set集合这种移除一个数据到目标set集合中
smove myset myset2 d #将d从myset移动到myset2 如果myset2不存在则会自动创建
#sdiff key [key ..] 取多个set集合key的差集 以第一个key为准 返回第一个key中的元素在其余几个set集合中不存在的元素
sdiff myset myset2
sdiff myset2 myset #他们两个返回的结果是不一样的
#sinter key [key..] 取交集 所以这个与key的顺序无关
sinter myset myset2
#sunion key [key..] 取并集 这个与key的顺序也无关
sunion myset myset2

六 hash类型

hash结构类似于java的map

#hset key field value 设置一个hash类型的key filed指map结构中的key
hset myhash a 01
#hget key field 获取某个hash结构中的指定的key的value
hget myhash a
#hmset key field value [field value ...] 批量设置
hmset myhash b 02 c 03
#hmget key field [field ...]
hmget myhash a b c
#hgetall key 获取hash结构的所有的key-value
hgetall myhash 
#hdel key field [field ...] 删除hash结构中的某一个(某几个)key
hdel myhash b c
#hlen key 用于判断指定的key(hash结构)中有多少个key-value
hlen myhash
#hexists key filed 用于判断某个hash结构的key的field是否存在
hexists myhash b #返回1表示该field存在 返回0表示不存在
#hkeys key 获取hash结构中所有的key
hkeys myhash
#hvals key 获取hash结构中所有的value
hvals myhash
#hincrby key field increment 用于指定某个hash结构的key的自增 increment表示自增的步长
hincrby myhash a 1 #返回的是当前field 自增后的值

七 zset类型

zset是有序集合,区别于set类型,其实就是相当于在set类型的基础上增加了一个值。案例 排行榜、成绩表

zadd myzset 1 01 #zadd key 序号 value 手动的指定顺序
#zrange key start stop  zrevrange key start stop 同zrange
zrange myzset 0 -1 #获取zset的所有的值 正序
zrevrange myzset 0 -1 #获取zset的所有的值 倒序
#zrem key member [member ...] 移除某个zset指定的成员
zrem myzset a
#zcard key 查看某个zset的长度(有多少个元素)
zcard myzset
#zcount key min max 获取指定区间的成员数量
zcount myzset 1 2