redis常见数据类型

文章目录

  • 1 redis简介
    • 1.1 redis和memcached对比
    • 1.2 安装redis
  • 2 Redis的数据类型
    • 2.1 字符串类型(Strings)
    • 2.2 散列类型(Hashes)
    • 2.3 列表(Lists)
    • 2.4 集合(Sets)
    • 2.5 有序集合(Sorted sets)

1 redis简介

redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库。

1.1 redis和memcached对比

对比项 Memcached Redis
类型 Key-value数据库 Key-value数据库
过期策略 支持 支持
数据类型 单一数据类型 多种数据类型
持久化 不支持 支持
主从复制 不支持 支持
虚拟内存 不支持 支持(不建议使用)

1.2 安装redis

配置repo,yum安装redis

[root@redis ~]# wget -O /etc/yum.repos.d/epel-6.repo http://mirrors.aliyun.com/repo/epel-6.repo
[root@redis ~]# yum install redis -y
[root@redis ~]# rpm -qa redis  # 这个版本的可以有命令用法提示,可TAB补全
redis-3.2.12-1.el6.x86_64
[root@redis ~]# rpm -ql redis

修改bind为本地ip地址

[root@redis ~]# vim /etc/redis.conf
bind 10.0.0.10

启动redis

[root@redis ~]# /etc/init.d/redis start
启动 :                                                    [确定]
[root@redis ~]# lsof -i :6379
COMMAND    PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
redis-ser 6844 redis    4u  IPv4  46720      0t0  TCP 10.0.0.10:6379 (LISTEN)

2 Redis的数据类型

  • 中文官方网站:http://redis.cn
  • 官方中文文档:http://redis.cn/topics/data-types-intro.html#lists
  • 命令搜索:http://redis.cn/commands.html
  • redis命令参考:http://redisdoc.com

2.1 字符串类型(Strings)

概念:http://redis.cn/topics/data-types.html#strings

命令 作用
SET key value [EX seconds] [PX milliseconds] [NX|XX] 设置Key
GET key 获取Key的值
EXISTS key [key ...] 判断Key是否存在
KEYS pattern 显示所有的Key
DEL key [key ...] 删除指定的Key
TYPE key 获取Key的类型
APPEND key value 追加内容到value
STRLEN key 获取字符串Key的长度
MGET key [key ...] 获取多个Key
MSET key value [key value ...] 设置多个Key
INCR key 自增
INCRBY key increment 指定步长的自增
DECR key 自减
DECABY key decrement 指定步长的自减
INCRBYFLOAT key increment 自增浮点类型
[root@redis ~]# redis-cli -h 10.0.0.10
10.0.0.10:6379> set key value [EX seconds] [PX milliseconds] [NX|XX]
10.0.0.10:6379> set mykey RSQ
OK
10.0.0.10:6379> get mykey  # 获取key
"RSQ"
10.0.0.10:6379> keys *	# 获取当前所有key,生产慎用,相当于遍历整个数据库,若数据过多会影响性能
1) "mykey"
10.0.0.10:6379> EXISTS mykey   # 判断某一key是否存在,存在为1,否则为0
(integer) 1
10.0.0.10:6379> EXISTS mykeykey
(integer) 0
10.0.0.10:6379> DEL mykey	# 删除key
(integer) 1
10.0.0.10:6379> EXISTS mykey
(integer) 0
10.0.0.10:6379> set mykey RSQ	
OK
10.0.0.10:6379> TYPE mykey	# 查看key数据类型
String
10.0.0.10:6379> set mykey RSQ
OK
10.0.0.10:6379> APPEND mykey RSQ	# 追加key
(integer) 6
10.0.0.10:6379> GET mykey
"RSQRSQ"
10.0.0.10:6379> STRLEN mykey		# 查看key长度
(integer) 6
10.0.0.10:6379> INCR num			# 自增,用于计数
(integer) 1
10.0.0.10:6379> GET mykey
"RSQRSQ"
10.0.0.10:6379> get num
"1"
10.0.0.10:6379> INCR num
(integer) 2
10.0.0.10:6379> get num
"2"
10.0.0.10:6379> INCR num
(integer) 3
10.0.0.10:6379> INCR num
(integer) 4
10.0.0.10:6379> INCR num
(integer) 5
10.0.0.10:6379> INCR num
(integer) 6
10.0.0.10:6379> get num
"6"
10.0.0.10:6379> INCRBY num 5		# 指定自增步长
(integer) 11
10.0.0.10:6379> get num
"11"
10.0.0.10:6379> DECR num			# 自减
(integer) 10
10.0.0.10:6379> DECR num
(integer) 9
10.0.0.10:6379> DECR num
(integer) 8
10.0.0.10:6379> DECR num
(integer) 7
10.0.0.10:6379> get num
"7"
10.0.0.10:6379> DECRBY num 5		# 指定自减步长,支持负数
(integer) 2
10.0.0.10:6379> DECRBY num 5
(integer) -3
10.0.0.10:6379> DECRBY num 5
(integer) -8
10.0.0.10:6379> MSET key1 R1 key2 R2 key3 R3   # 设置多个key
OK
10.0.0.10:6379> keys *
1) "key1"
2) "key3"
3) "mykey"
4) "num"
5) "key2"
10.0.0.10:6379> MGET key1 key2 key3			# 获取多个key
1) "R1"
2) "R2"
3) "R3"

2.2 散列类型(Hashes)

概念:http://redis.cn/topics/data-types.html#hashes
Hash类型的键最多为2^32-1

命令 作用
HSET key field value 设置hash里面一个字段的值
HGET key field 获取hash中field的值
HMSET key field value [field value ...] 设置多个hash字段值
HMGET key field [field ...] 获取多个hash中field的值
HGETALL key 从hash中读取全部的域和值
HDEL key field [field ...] 删除一个或多个hash中的field
10.0.0.10:6379> HSET car name BMW		# 设置hash值
(integer) 1
10.0.0.10:6379> HSET car price 500		
(integer) 1
10.0.0.10:6379> HGET car				# 获取键的field域值,不能直接跟键,会报错
(error) ERR wrong number of arguments for 'hget' command
10.0.0.10:6379> HGET car name
"BMW"
10.0.0.10:6379> HGET car price
"500"
10.0.0.10:6379> HMGET car name price
1) "BMW"
2) "500"
10.0.0.10:6379> HSET car price 10000
(integer) 0
10.0.0.10:6379> HGET car price
"10000"
10.0.0.10:6379> HMSET book name flower price 20	# 可以设置多个键的域
OK
10.0.0.10:6379> HMGET book name price			#获取多个键的域
1) "flower"
2) "20"
10.0.0.10:6379> HMGET book price name
1) "20"
2) "flower"
10.0.0.10:6379> HGETALL book		# 获取一个键的所有fields及values
1) "name"
2) "flower"
3) "price"
4) "20"
10.0.0.10:6379> HDEL car name		# 删除键的field
(integer) 1
10.0.0.10:6379> HGETALL car
1) "price"
2) "10000"
10.0.0.10:6379> HEXISTS car price	# 查看此hash 键的field是否存在
(integer) 1
10.0.0.10:6379> HEXISTS car name
(integer) 0

2.3 列表(Lists)

概念:http://redis.cn/topics/data-types.html#lists

redis常见数据类型_第1张图片

命令 作用
LPUSH key value [value ...] 从队列的左边入队一个或多个元素
RPUSH key value [value ...] 从队列的右边入队一个或多个元素
LPOP key 从队列的左边弹出一个元素
RPOP key 从队列的右边弹出一个元素
LRANGE key start stop 从列表中获取指定返回的元素
LREM key count value 从列表中删除元素
10.0.0.10:6379> LPUSH list R1
(integer) 1
10.0.0.10:6379> LPUSH list R2
(integer) 2
10.0.0.10:6379> LPUSH list R3
(integer) 3
10.0.0.10:6379> LPUSH list R4
(integer) 4
10.0.0.10:6379> LLEN list
(integer) 4

# 会显示右侧序列为1的到序列为3范围内的,右侧第一的数的序列为0
10.0.0.10:6379> LRANGE list 1 3
1) "R3"
2) "R2"
3) "R1"

# 左右弹出数据
10.0.0.10:6379> LPOP list
"R4"
10.0.0.10:6379> LPOP list
"R3"
10.0.0.10:6379> RPOP list
"R1"
10.0.0.10:6379> RPOP list
"R2"

# 左右push数据
10.0.0.10:6379> LPUSH list 1
(integer) 1
10.0.0.10:6379> LPUSH list 2
(integer) 2
10.0.0.10:6379> RPUSH list 3
(integer) 3
10.0.0.10:6379> RPUSH list 4
(integer) 4

# 此时在此列表中数据从左至右为2134
10.0.0.10:6379> LRANGE list 0 3
1) "2"
2) "1"
3) "3"
4) "4"
10.0.0.10:6379> LINDEX list 0
"2"
10.0.0.10:6379> LINDEX list 1
"1"
10.0.0.10:6379> LINDEX list 2
"3"
10.0.0.10:6379> LINDEX list 3
"4"
10.0.0.10:6379> LINDEX list -1
"4"
10.0.0.10:6379> LINDEX list -2
"3"
10.0.0.10:6379> LINDEX list -3
"1"
10.0.0.10:6379> LINDEX list -4
"2"

值与位置的一一对应关系

k1 k2 k3 k4
3 2 1 0
-1 -2 -3 -4

下标(index)参数 start 和 stop 都以 0 为底,也就是说,以 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

2.4 集合(Sets)

概念:http://redis.cn/topics/data-types.html#sets

命令 作用
SADD key member [member ...] 添加一个或多个元素到集合(set)里
SREM key member [member ...]
SMEMBERS key 获取集合里面的所有元素
SDIFF key [key ...] 获取队列不存在的元素,差集
SINTER key [key ...] 获取两个集合的交集
SUNION key [key ...] 获取两个集合的并集
SCARD key 获取集合里面的元素数量
SDIFFSTORE destination key [key ...] 获得两个集合的差集,并存储在一个关键的结果集
SINTERSTORE destination key [key ...] 获得两个集合的交集,并存储在一个关键的结果集
SUNIONSTORE destination key [key ...] 获得两个集合的并集,并存储在一个关键的结果集
10.0.0.10:6379> SADD word1 a		# 添加集合数据
(integer) 1
10.0.0.10:6379> SADD word1 a b c
(integer) 2
10.0.0.10:6379> SADD word1 a b c d e
(integer) 2
10.0.0.10:6379> SREM word1 e		# 删除集合数据
(integer) 1
10.0.0.10:6379> SMEMBERS word1    # 查看集合数据
1) "c"
2) "a"
3) "b"
4) "d"
10.0.0.10:6379> SISMEMBER word1 b  # 判断指定元素是否存在于集合中
(integer) 1
10.0.0.10:6379> SISMEMBER word1 e
(integer) 0
10.0.0.10:6379> SADD word2 1 2 3 
(integer) 3
10.0.0.10:6379> SADD word3 2 3 4
(integer) 3
10.0.0.10:6379> SDIFF word2 word3  # 差集
1) "1"
10.0.0.10:6379> SDIFF word3 word2  
1) "4"
10.0.0.10:6379> SINTER word2 word3  # 交集
1) "2"
2) "3"
10.0.0.10:6379> SUNION word2 word3  # 并集
1) "1"
2) "2"
3) "3"
4) "4"
10.0.0.10:6379> SCARD word1   # 统计集合中元素的个数
(integer) 4
10.0.0.10:6379> 
10.0.0.10:6379> SCARD word2
(integer) 3
10.0.0.10:6379> SCARD word3
(integer) 3
10.0.0.10:6379> SDIFFSTORE haha word2 word3    # 获取两个集合的交集并存储在一个关键集中
(integer) 1
10.0.0.10:6379> TYPE haha
set
10.0.0.10:6379> SCARD haha
(integer) 1
10.0.0.10:6379> SMEMBERS haha
1) "1"
10.0.0.10:6379>

2.5 有序集合(Sorted sets)

命令 作用
ZADD key [NX|XX] [CH] [INCR] score member [score member ...] 添加到有序set的一个或多个成员,如果它已经存在会更新分数
ZSCORE key member 获取成员在排序设置相关的比分
ZRANGE key start stop [WITHSCORES] 根据指定的index返回有序集合的成员列表
10.0.0.10:6379> ZADD test 1 zhang 2 wang 3 li
(integer) 3
10.0.0.10:6379> ZSCORE test zhang
"1"
10.0.0.10:6379> ZSCORE test wang
"2"
10.0.0.10:6379> ZSCORE test li
"3"
10.0.0.10:6379> ZRANGE test 0 -1  # 0代表第一个,-1代表最后一个,故0 -1能显示全部数据
1) "zhang"
2) "wang"
3) "li"
10.0.0.10:6379> ZRANGE test 2 3
1) "li"
10.0.0.10:6379> ZRANGE test -2 -1
1) "wang"
2) "li"

值与位置对应关系

zhang wang li
0 1 2
-1 -2 -3

你可能感兴趣的:(Linux,DataBase)