=

Redis数据类型与常用命令

  • 五大数据类型介绍
  • String(字符串)
  • Hash(哈希,类似Java中的Map)
  • List(列表)
  • Set(集合)
  • Zset(有序集合)
  • 常用命令
  • Key
  • String
  • Hash
  • List
  • Set
  • Zset
  • 扩展
  • 字符格式
  • 文件行号显示


五大数据类型介绍

String(字符串)

String(字符串)

string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。

string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如 jpg 图片或者序列化的对象 。

string 类型是 Redis 最基本的数据类型,一个 redis 中字符串 value 最多可以是 512M !

Hash(哈希,类似Java中的Map)

Redis hash 是一个键值对集合。

Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。

类似 Java 里面的 Map<String,Object>

List(列表)

Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)。

它的底层实际是个链表

Set(集合)

Redis 的 Set 是 string 类型的无序集合。它是通过HashTable实现实现的!

Zset(有序集合)

Redis zset 和 set 一样也是 string 类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个 double 类型的分数。

redis 正是通过分数来为集合中的成员进行从小到大的排序。

zset的成员是唯一的,但分数(score)却可以重复。

常用命令

获取地址:http://redisdoc.com/

Key

-- 查看对应key是否存在
exists key名

-- 将对应key移到指定数据库中
move key名 数据库下标

-- 查看过期时间(-1表示永不过期)
ttl key名

-- 设置过期时间
expire key名 过期时间

-- 查看指定key的类型
type key名

-- 查看所有键
keys *

....

String

1. 设置键值对
set key value

2. 查看key
get key

3. 批量设置键值对
mset key1 value1 key2 value2...

4. 批量查看key的值
mget key1 key2...

5. 如果key的值为数字,则自增1,如果这个key不为数字,则新建一个值,默认为0,自增后变为1
incr key

6. 如果key的值为数字,则自减1,如果这个key不为数字,则新建一个值,默认为0,自增后变为-1
decr key

7. 将value追加到key的值中,如果这个key不存在,则会创建当前key,值为value
append key value

8. 查看指定key的值长度
strlen key

9. 从index(下标,从0开始)开始替换value的值
setrange key index value

10. 从start(0)开始截取字符串到end结束,如果是正数,表示从左到右截取。如果是负数,表示从右到左截取,右边第一位是-1。如果要截取整个字符串就是从0到-1!
getrange key start end

11. 如果key的值为数字,则自增指定大小,如果这个key不为数字,则新建一个值,默认为0,自增后变为指定大小
incrby key increment

12. 如果key的值为数字,则自减指定大小,如果这个key不为数字,则新建一个值,默认为0,自减后变为负指定大小
decrby key decrment

13. 如果key值为小数,则自增指定大小(当小数为0时自动转为整数),如果没有该key,则创建一个值,值为自增后的值
incrbyfloat key increment

14. 删除指定的key
del key

15. 在key不存在时设置一个值,如果当前有key值,则无法设置
setnx key value

16. 创建一个临时的值,为它设置过期的时间(milliseconds)
setex key milliseconds value

17. 同时设置一个或多个key-value对,并且仅所有key都不存在(也就是在写入的时候不能写入已有的key)
msetnx key1 value1 key2 value2...

...

PS: 我们之前使用的 set 创建 key 的时候需要注意一下,比如我们第一次 set k1 hello,这个时候 get 出来的就是 hello,但是我们再次 set k1 haha,这个时候再次 get,那么获取到的就是 haha

Hash

1. 修改hash表key中的字段field为value
hset key field value

2. 获取存储在哈希表中指定字段的值
hget key field

3. 创建hash表,然后同时创建多个 field-value 对到hash表中
hmset key field1 value1 field2 value2...

4. 查看hash表中多个字段的值
hmget ket field1 field2...

5. 查看所有hash表中的字段和值
hmgetall key

6. 删除一个或多个hash表字段
hdel key field1 field2...

7. 查看hash表中指定的字段是否存在
hexists key field

8. 为hash表中指定字段为整数的值自增指定大小,如果不是整数类型,则会报错
hincrby key field increment

9. 为hash表中指定字段为小数的值自增指定大小,如果不是小数类型,则会报错
hincrbyfloat key field increment

10. 查看hash表中所有的字段
hkeys key

11. 查看hash表中所有的值
hvals key

12. 查看hash表中字段的数量
hlen key

13. 在指定hash表中创建新的 field-value 对,只有当字段不存在才可创建
hsernx ket field value

...

Redis Hash是一个键值对集合;是一个 String 类型的 field 和 value 的映射表,Hash 特别适合用于存储对象(类似 Java 里面的 Map<String,String>)

List

1. 创建列表与插入数据至指定列表的最左边
lpush key value1 value2...

2. 查看指定列表行数的数据,从哪开始(start),到哪结束(stop)
lrange ket start stop

3. 将value插入到列表的最左边,但是如果列表不存在的话就会失败
lpushx key value value2...

4. 创建列表与插入数据至指定列表的最右边
rpush key value1 value2...

5. 将value插入到列表的最右边,但是如果列表不存在的话就会失败
rpush key value1 value2...

6. 移除从头到尾最先发现的count(数量)个value,删除全部的话可以把数量设置为0
lrem key count value

7. 获取列表的长度
llen key

8. 根据指定index(下标)获取对应的value,下标从0开始
lindex key index

9. 在指定的pivot(列表中的某个值)左边添加一个值,如果找不到pivot则返回-1,如果是空列表则返回0
linsert key before pivot value

10. 修改指定index下标的值,下标从0开始
lset key index value

11. 获取指定区域的值,从start开始,srop结束
lrange key start srop

12. 截取指定区域的值,其他的值以删除处理,也是从start开始,srop结束
ltrim key start stop

13. 删除头元素
lpop key
...

Redis 列表是简单的字符串列表,按照插入顺序排序,你可以添加一个元素导列表的头部(左边)或尾部(右边)

它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。

Set

1. 添加数据
sadd key v1 v2 ...

2. 获取对应key中的所有数据
smembers key

3. 获取元素个数
scard key

4. 移除集合中一个或多个成员,不存在的成员元素会被忽略
srem key value1 values2...

5. 随机获取对应集合中的几个值(默认为一个值)
srandmember key 随机个数

6. 随机出栈
spop key

7. 将一个集合中的指定的值移至另一个集合中
smove key1 key2 元素值

8. 差集(简单理解就是比较两个里面有哪些值不同)
sdiff key1 key2

9. 交集(简单理解就是比较两个里面有哪些值相同)
sinter key1 key2

10. 并集(简单理解就是把两个集合中的值合并起来)
sunion key1 key2

...

Redis Set 对外提供的功能与 list 类似,是一个列表的功能,特殊之处在于 Set 是可以自动排重的(不能重复),放你需要存储一个列表数据,又不希望出现重复数据时,Set 是一个很好的选择,并且 Set 提供了判断某个成员是否在一个 Set 集合内的重要接口,这个也是 list 所不能提供的!

Redis 的 Set 是 String 类型的无序集合。它底层其实是一个 value 为 null 的 hash 表,所以添加,删除,查找的复杂度都是 O(1)。

Zset

1. 添加数据
zadd key score1 member1 score2 member2 ...

2. 查看对应 key 下面所有的 score 值(开始start,结束stop)
zrange key start stop

3. 查看对应 key 下面所有的 score 和 member
zrange key start stop withscores

4. 范围获取
zrangebyscore key start stop

5. 分页
zrangebyscore key start stop limit start stop

6. 查看对应元素下标
zrank key score

7. 查看对应范围的元素个数
zcount key start stop

8. 查看 score 值对应的值
zscore key score

9. 逆序获取下标值
zrevrank key score

10. 倒序查看数据
zrevrange key start stop

11. 倒序访问获取
zrevrangebyscore key start stop

...

Redis 有序集合 zset 与普通集合 set 非常相似,是一个没有重复元素的字符串集合。不同之处是有序集合的每个成员都关联了一个评分(score),这个评分(score)被用来按照从最低分到最高分的方式排序集合中的成员(这也就是为什么它是有序的)。集合的成员是唯一的,但是评分可以是重复了。

因为元素是有序的,所以你也可以很快的根据评分(score)或者次序(position)来获取一个范围的元素。访问有序集合的中间元素也是非常快的,因此你能够使用有序集合作为一个没有重复成员的智能列表。

扩展

字符格式

-- 启动路径不统一,根据自己的来即可
redis-server /myredis/redis.conf
redis-cli -p 6379 --raw

lua redis 数据类型 redis数据类型及命令_Redis

我们在redis中写入中文后,不管是使用什么数据类型,默认在redis中读出来的都是类似乱码的样子(仅redis中这样,在java读取的时候该是什么就是什么),如果我们想要在redis中也看到原本的样子,那么可以在启动的时候加上 raw!

文件行号显示

-- 在文件中按住 Shift 和 Q 然后输入以下命令
set nu

lua redis 数据类型 redis数据类型及命令_lua redis 数据类型_02

我们在默认打开各种文件的时候都不会带有行数,如果我们想要实现那样的效果,就需要输入上面的命令!效果如下

lua redis 数据类型 redis数据类型及命令_数据库_03