Redis的数据类型
redis存储的是:key、value格式的数据,其中key都是字符串,可以把Redis看成一个非常大的Map<String,Object>
键值对集合。value有5种不同的数据结构:
1、字符串类型string:类似于java中的Map<String,String>
。
2、哈希类型hash:map格式 。类似于java中的Map<String,Map<Object,Object>>
。
3、列表类型 list:linkedlist格式。支持重复元素,类似于java中的Map<String,List<Object>>
。
4、集合类型set:不允许重复元素,类似于java中的Map<String,Set<Object,Object>>
。
5、有序集合类型zset(sorted set:有序集合):不允许重复元素,且元素有顺序,类似于java中的Map<String,Set<Object,Object>>
,但Set集合有序。
Redis的基本命令
Redis的命令学习网站:
http://www.redis.net.cn/order/
常用命令
keys * 获取所有的key
select 0 选择第一个库
move myString 1 将当前的数据库key移动到某个数据库,目标库有,则不能移动
flushdb 清除指定库
randomkey 从当前数据库中随机返回一个key
type key 查看key的类型
del key1 删除key1
exists key 判断是否存在key
expire key 10 设置key 10秒过期
pexpire key 1000 设置key 1000毫秒过期
persist key 删除过期时间
ttl key 查看还有多少秒过期,-1表示永不过期,-2表示已过期
string
set key value #存储
get key # 通过key获取value
del key #删除key
getrange name 0 -1 # 字符串分段 0 -1是全部 0 -2 表示 n-1
getset name new_cxx #设置新值,返回旧值
mset key1 key2 #批量设置
mget key1 key2 #批量获取
setnx key value #不存在就插入(not exists)
setrange key index value #从index开始替换value
incr age #递增
incrby age 10 #递增,步长为10
decr age #递减
decrby age 10 #递减,步长为10
incrbyfloat #增减浮点数
append #追加
strlen #显示字符串的长度
object encoding key # 得到key 的类型 string里面有三种编码
int #用于64位有符号整数表示的字符串
embstr #用于长度小于或等于44字节 Redis3.x中是39字节,这种类型的编码在内存使用时性能更好
raw #用于长度大于44字节的
hash
#为哈希表中的字段赋值
# 如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作
# 如果字段已经存在于哈希表中,旧值将被覆盖。
hset key field value #hset myhash name zhangsan
hget myhash name #获取
# 添加多个值 key value形式
hmset myhash name zhangsan age 25 note "i am notes"
# 获取多个值,通过多个key
hmget myhash name age note
hgetall myhash #获取所有的
hexists myhash name #是否存在
hsetnx myhash score 100 #如果不存在就设置值
hincrby myhash id 1 #递增
hdel myhash name #删除
hkeys myhash #只取key
hvals myhash #只取value
hlen myhash #长度
list
# 添加:可以添加一个元素到列表的头部(左边)或者尾部(右边)
lpush key value: 将元素加入列表左边
rpush key value:将元素加入列表右边
#lpush mylist a b c 左插入
#rpush mylist x y z 右插入
lrange key start end # 范围获取 0 -1 取出数据集合,0 -1是取出所有,0 1取第第一个和第二个
lpop mylist #弹出集合最后一个元素,即删除列表最左边的元素,并将元素返回
rpop mylist #弹出第一个元素,即删除列表最右边的元素,并将元素返回
llen mylist #长度
lrem mylist count value #删除
COUNT 的值可以是以下几种:
count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。
count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。
count = 0 : 移除表中所有与 VALUE 相等的值。
lindex mylist 2 #指定索引的值
lset mylist 2 n #索引设值
#对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
#下标 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。
#也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
ltrim mylist 0 4
#在列表的元素前或者后插入元素
# 当指定元素不存在于列表中时,不执行任何操作。
# 当列表不存在时,被视为空列表,不执行任何操作。
# 如果 key 不是列表类型,返回一个错误。
linsert mylist before a #a之前插入
linsert mylist after a #a之后插入
#移除列表的最后一个元素,并将该元素添加到另一个列表并返回。
rpoplpush list list2 #转移列表的数据
set
sadd key value #存储
smembers myset #获取myset集合中所有元素
srem myset set1 #删除myset集合中的set1元素
sismember myset set1 #判断元素是否在集合中
scard key_name #个数
sdiff | sinter | sunion key1 key2 #集合间运算:差集 | 交集 | 并集
srandmember #随机获取集合中的元素
spop #从集合中弹出一个元素
zset
有序集合类型 sortedset:不允许重复元素,且元素有顺序,每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
#存储
zadd key score value
zadd zset 1 one
zadd zset 2 two
zadd zset 3 three
zincrby zset 1 one #将元素为one的分数增长1
#获取
zrange key start end [withscores] #zrange myzset 0 -1 withscores
zscore zset two 获取分数
zrange zset 0 -1 withscores #范围值
zrangebyscore zset 10 25 withscores #指定范围的值
zrangebyscore zset 10 25 withscores limit 1 2 #分页
Zrevrangebyscore zset 10 25 withscores #指定范围的值
zcard zset #元素数量
Zcount zset #获得指定分数范围内的元素个数
Zrem zset one two #删除一个或多个元素
Zremrangebyrank zset 0 1 #按照排名范围删除元素
Zremrangebyscore zset 0 1 #按照分数范围删除元素
Zrank zset 0 -1 #分数最小的元素排名为0
Zrevrank zset 0 -1 #分数最大的元素排名为0
Zinterstore #计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中
zunionstore #计算给定的一个或多个有序集的并集,并存储在新的 key 中