3. 命令操作
操作 命令操作 Java代码操作
Redis 命令用于在 redis 服务上执行操作。
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
1.redis的数据结构:
-
redis存储的是:key,value格式的数据,其中key都是字符串,value有5种不同的数据结构
键值对 key字符串 value有5中不同的数据结构
-
value的数据结构:
- 字符串类型 string 最常用 字符串
- 哈希类型 hash : map格式 哈希
key value(key,value)
-
列表类型 list : linkedlist格式。支持重复元素 链表结构
-
集合类型 set : 不允许重复元素
-
有序集合类型 sortedset:不允许重复元素,且元素有顺序
2.字符串类型 string
String(字符串)
string是redis最基本的类型,一个key对应一个value。
string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。
string类型是Redis最基本的数据类型,一个键最大能存储512MB。
set key value 存储
get key 获取
del key 删除
- 存储: set key value
127.0.0.1:6379> set username zhangsan
OK
2. 获取: get key
127.0.0.1:6379> get username
“zhangsan”
3. 删除: del key
127.0.0.1:6379> del age
(integer) 1
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set username liuawen
OK
127.0.0.1:6379> get username
"liuawen"
127.0.0.1:6379> del key username
(integer) 1
127.0.0.1:6379> get username
(nil)
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379>
key键 value值
3.哈希类型 hash
Hash(哈希)
Redis hash 是一个键值对集合。
Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
hash 数据类型存储了包含用户脚本信息的用户对象。 实例中我们使用了 Redis HMSET, HEGTALL 命令,user:1 为键值。
每个 hash 可以存储 232 - 1 键值对(40多亿)。
存储 hset key field value
获取 hget key field
删除 hdel key field
- 存储: hset key field value
127.0.0.1:6379> hset myhash username lisi
(integer) 1
127.0.0.1:6379> hset myhash password 123
(integer) 1 - 获取:
- hget key field: 获取指定的field对应的值
127.0.0.1:6379> hget myhash username
“lisi” - hgetall key:获取所有的field和value
127.0.0.1:6379> hgetall myhash- “username”
- “lisi”
- “password”
- “123”
- hget key field: 获取指定的field对应的值
- 删除: hdel key field
127.0.0.1:6379> hdel myhash username
(integer) 1
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> hset myhash username liuawen
(integer) 1
127.0.0.1:6379> hset myhash password 123456
(integer) 1
127.0.0.1:6379> hget myhash username
"liuawen"
127.0.0.1:6379> hget myhash password
"123456"
127.0.0.1:6379> hget myhash
(error) ERR wrong number of arguments for 'hget' command
127.0.0.1:6379> hgetall myhash
1) "username"
2) "liuawen"
3) "password"
4) "123456"
127.0.0.1:6379> hdel myhash username
(integer) 1
127.0.0.1:6379> hgetall myhash
1) "password"
2) "123456"
127.0.0.1:6379> keys *
1) "myhash"
127.0.0.1:6379> hdel myhash
(error) ERR wrong number of arguments for 'hdel' command
127.0.0.1:6379> hdel myhash password
(integer) 1
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379>
4.列表类型 list
列表类型 list:可以添加一个元素到列表的头部(左边)或者尾部(右边)
List(列表)
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)。
push pop
1、添加 lpush rpush
2、获取 lrange key start end 范围获取
3、删除
lpop key
rpop key
-
添加:
lpush rpush-
lpush key value: 将元素加入列表左表
-
rpush key value:将元素加入列表右边
127.0.0.1:6379> lpush myList a
(integer) 1
127.0.0.1:6379> lpush myList b
(integer) 2
127.0.0.1:6379> rpush myList c
(integer) 3
2.获取
- lrange key start end :范围获取
127.0.0.1:6379> lrange myList 0 -1- “b”
- “a”
- “c”
myList
b a c 获取 b a c
- 删除:
- lpop key: 删除列表最左边的元素,并将元素返回
- rpop key: 删除列表最右边的元素,并将元素返回
127.0.0.1:6379> keys * (empty list or set) 127.0.0.1:6379> lpush myList a (integer) 1 127.0.0.1:6379> lpush myList b (integer) 2 127.0.0.1:6379> lpush myList c (integer) 3 127.0.0.1:6379> lrange myList 0 -1 1) "c" 2) "b" 3) "a" 127.0.0.1:6379> lrange myList -1 0 (empty list or set) 127.0.0.1:6379> lrange myList 0 2 1) "c" 2) "b" 3) "a" 127.0.0.1:6379> lrange myList 0 1\ (error) ERR value is not an integer or out of range 127.0.0.1:6379> lrange myList 0 1 1) "c" 2) "b" 127.0.0.1:6379> lrange myList 0 0 1) "c" 127.0.0.1:6379> lrange myList -1 -1 1) "a" 127.0.0.1:6379> lpop a (nil) 127.0.0.1:6379> lpop 1 (nil) 127.0.0.1:6379> lpop myList "c" 127.0.0.1:6379> lpop myList "b" 127.0.0.1:6379> lpop myList "a" 127.0.0.1:6379>
c b a
-
5. 集合类型 set
集合类型set:不允许重复元素
Redis的Set是string类型的无序集合。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
sadd 命令
添加一个string元素到,key对应的set集合中,成功返回1,如果元素以及在集合中返回0,key对应的set不存在返回错误。
以上实例中 rabitmq 添加了两次,但根据集合内元素的唯一性,第二次插入的元素将被忽略。
集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
1、存储 sadd key value
2、获取 smembers key
3、删除 srem key value
- 存储:sadd key value
127.0.0.1:6379> sadd myset a
(integer) 1
127.0.0.1:6379> sadd myset a
(integer) 0
2. 获取:smembers key:获取set集合中所有元素
127.0.0.1:6379> smembers myset
1) “a”
3. 删除:srem key value:删除set集合中的某个元素
127.0.0.1:6379> srem myset a
(integer) 1
127.0.0.1:6379> SET name liuawen
OK
127.0.0.1:6379> GET name
"liuawen"
127.0.0.1:6379> sadd myset a
(integer) 1
127.0.0.1:6379> sadd myset a
(integer) 0
127.0.0.1:6379> sadd myset b
(integer) 1
127.0.0.1:6379> sadd myset c
(integer) 1
127.0.0.1:6379> smembers myset
1) "c"
2) "b"
3) "a"
127.0.0.1:6379> srem key a
(integer) 0
127.0.0.1:6379> srem key b
(integer) 0
127.0.0.1:6379> smembers myset
1) "c"
2) "b"
3) "a"
127.0.0.1:6379> srem myset a
(integer) 1
127.0.0.1:6379> srem myset b
(integer) 1
127.0.0.1:6379> smembers myset
1) "c"
127.0.0.1:6379> keys *
1) "name"
2) "myset"
127.0.0.1:6379>
6. 有序集合类型 sortedset
有序集合类型 sortedset:不允许重复元素,且元素有顺序.每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
zset(sorted set:有序集合)
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
zset的成员是唯一的,但分数(score)却可以重复。
zadd 命令
添加元素到集合,元素在集合中存在则更新对应score
1、存储 zadd key score value
2、获取 zrange key start end [withscores]
3、 删除 zrem key value
-
存储:zadd key score value
127.0.0.1:6379> zadd mysort 60 zhangsan
(integer) 1
127.0.0.1:6379> zadd mysort 50 lisi
(integer) 1
127.0.0.1:6379> zadd mysort 80 wangwu
(integer) 1-
获取:zrange key start end [withscores]
127.0.0.1:6379> zrange mysort 0 -1- “lisi”
- “zhangsan”
- “wangwu”
127.0.0.1:6379> zrange mysort 0 -1 withscores
- “zhangsan”
- “60”
- “wangwu”
- “80”
- “lisi”
- “500”
-
删除:zrem key value
127.0.0.1:6379> zrem mysort lisi
(integer) 1]
-
127.0.0.1:6379> zadd mysort 80 yi
(integer) 1
127.0.0.1:6379> zadd mysort 80 er
(integer) 1
127.0.0.1:6379> zadd mysort 90 san
(integer) 1
127.0.0.1:6379> zadd mysort 100 si
(integer) 1
127.0.0.1:6379> zrang mysort 0 -1
(error) ERR unknown command 'zrang'
127.0.0.1:6379> zrange mysort 0 -1
1) "er"
2) "yi"
3) "san"
4) "si"
127.0.0.1:6379> zrange mysort 0 -1 withscores
1) "er"
2) "80"
3) "yi"
4) "80"
5) "san"
6) "90"
7) "si"
8) "100"
127.0.0.1:6379> zrem mysort er
(integer) 1
127.0.0.1:6379> zrange mysort 0 -1
1) "yi"
2) "san"
3) "si"
127.0.0.1:6379>
7.通用命令
- keys * : 查询所有的键
- type key : 获取键对应的value的类型
- del key:删除指定的key value
127.0.0.1:6379> keys *
1) "mysort"
2) "name"
3) "myset"
127.0.0.1:6379> type mysort
zset
127.0.0.1:6379> del mysort
(integer) 1
127.0.0.1:6379> keys *
1) "name"
2) "myset"
127.0.0.1:6379> del name
(integer) 1
127.0.0.1:6379> del myset
(integer) 1
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379>