Redis支持五种数据类型
- string (字符串)
- hash (哈希)
- list (列表)
- set (集合)
- zset (sorted set:有序集合)
注意 key 不要太长,最好不要超过1024字节,可以也不要太短,最好统一命名规范;
1. String(字符串)
string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。
string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。
string类型是Redis最基本的数据类型,一个键最大能存储512MB。
常见命令
# 赋值
set key value
#范例
set usernmae 大乔
# 取值
get key
# 范例
get username
# 取值赋值(先取值,然后在修改对应key的值)
getset key value
#范例
getset username 小乔
# 删除值
del key
# 范例
del username
# 数值递增一(对应值不存在默认0在加一,如果存在一个字符串就报错)
incr key
# 范例
incr num
# 数值递减(递减一,值不存在默认0在减一)
decr key
#范例
decr num
# 将指定的value 增加指定的值(值不存在就默认是0,值是字符串就报错)
incrby key value
#范例
incrby num 5
# 将指定的value 减指定的值(值不存在就默认是0,值是字符串就报错)
decrby key value
#范例
decrby num 10
# 字符串拼接(存在就拼接,不存在就创建)
append key value
#范例
append name aaa
set key value 是在Redis 中存储一个值;get key 获取对应key 的值。多个相同key 最后一个key会将前面的覆盖掉。
注意:一个键最大能存储512MB。
2. Hash (哈希)
Redis hash 是一个键值对集合。Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。类似Java里面的Map<String,Object>
# 赋值
hset key field value
#范例
hset myhash username tom
hset myhash age 18
# 取值
hget key field
# 范例
hget myhash age
# 一次取多个值
hget myhash username age
#获取属性和属性值
hgetall myhash
# 删除
hdel key field
# 范例(返回0 表示值在hash中不存在)
hdel myhash age
# 删除整个集合
del key
# 范例
del myhash
# 给Hash中数字类型的值进行增加操作
hincrby key field value
# 范例
hincrby myhash age 10 # 给myhash集合中的age 值加10
# 判断指定中key中某个属性是否存在,存在返回1
hexists key field
# 范例
hexista myhash password
# 获取指定key中所有的属性和值
hgetall key
# 范例
hgetall myhash
# 获取指定key中所有的属性
hkeys key
# 范例
hkeys myhash
# 获取指定key中所哟的值
hvals key
# 范例
hvals myhash
# 获取指定key的长度
hlen key
# 范例
hlen myhash
注意:每个 hash 可以存储 2的32次方 - 1 个键值对(40多亿)。
3. List (列表)
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
语法
# 左侧添加[集合不存在就创建,存在就添加]
lpush key value [value...]
# 范例
lpush list a b c d e f g
# 右侧添加
rpush key value [value...]
# 范例
rpush list2 1 2 3 4 5
# 查看list列表
lrange key start stop
# 范例
lrange list 1 4
# 左边弹出[获取集合左边的第一个元素。弹出后集合中此数据不存在]
lpop key
# 范例
lpop list
# 右边弹出
rpop key
# 范例
rpop list
# 获取list集合长度[集合不存在就返回0]
llen key
# 范例
llen list
# 仅当关联的集合中存在的时候,在关联的集合中头部插入一个值
lpushx key value
# 范例
lpushx list 5
# 仅当关联key存在时候在对应的集合右边插入一个值
rpushx key value
# 范例
rpushx list 10
# 移除指定集合中指定的值[count 是负数从后面开始遍历]
lrem key count value
# 范例
lrem list
注意 列表最多可存储 2 的 23次方 - 1元素 (4294967295, 每个列表可存储40多亿)。
4. Set (字符串集合)
Redis的Set是string类型的无序集合。它是通过HashTable实现实现的。
# 添加元素
sadd key member [member ...]
# 范例
sadd myset a b c
# 删除元素
srem key member [member ...]
srem myset a b
# 查看 set 中所有的值
smembers key
# 范例
smembers myset
# 判断参数中是否有指定的值[0-不存在;1-存在]
sismember key member
# 范例
sismember myset 8
# 差集运算。和key的顺序有关
sdiff key [key ...]
# 范例
sadd myal a b c
sadd mybl a c 1 2
sdiff myal mybl
5. zset(sorted set:有序字符串集合)
zset(sorted set:有序集合)
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。
redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。
sorted-set 和set区别
- sorted-set 中添加,删除,跟新一个元素效率高。
- sorted-set 中的成员在集合中的位置是有序的
# 添加元素[元素存在就用新分数替代就分数]
zadd key 分数 元素 分数 元素 ......
# 范例
zadd mysort 70 zhangsan 80 wangwu
# 获得分数
zscore key 元素
# 范例
zscore mysort zhangsan
# 获取zset数量
zcard key
# 范例
zcard mysort
# 删除某个元素
zrem key member [member ...]
# 范例
zrem mysort wangwu
6. 通用命令
6.1 查看所有key
keys *
6.2 like 查询
keys my?
查看一my开头的所有key
6.3 删除指定的某个key
del key [key key ....]
删除指定的一个key或者多个key
6.4 判断某个key是否存在
exists key
查看指定的可以是否存在;1-存在;0-不存在。
6.5 对key设置过期时间(单位秒)
expire key 时间
6.6 查看指定key剩余时间
ttl key
6.7 获取指定key的类型
type key
6.8 不同数据切换
select index
6.9 移动指定key到不同的数据中(move)
move key index
6.9 清空数据
flushall