一、本地客户端连接
[root@localhost redis]# bin/redis-cli
127.0.0.1:6379> auth root
OK
显示"ok"
表示连接成功
常用命令操作
redis的数据结构:
redis存储的是:key,value格式的数据,其中key都是字符串,value有5种不同的数据结构
value的数据结构:
- 字符串类型 string
- 哈希类型 hash : map格式
- 列表类型 list : linkedlist格式。支持重复元素
- 集合类型 set : 不允许重复元素
- 有序集合类型 sortedset:不允许重复元素,且元素有顺序
- 流类型 stream:5.0 版本新增加的数据结构。主要用于消息队列(MQ,Message Queue)
字符串类型 string
string 是 redis 最基本的类型,一个 key 对应一个 value。
string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。
string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。
常用命令:set、get、decr、incr、mget等。
注意:一个键最大能存储512MB。
- 存储: set key value
127.0.0.1:6379> set username zhangsan
OK
- 获取: get key
127.0.0.1:6379> get username
"zhangsan"
- 删除: del key
127.0.0.1:6379> del age
(integer) 1
哈希类型 hash
Redis hash 是一个键值(key=>value)对集合;是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
每个 hash 可以存储 232 -1 键值对(40多亿)。
常用命令:hget、hset、hgetall等。
应用场景:存储一些结构化的数据,比如用户的昵称、年龄、性别、积分等,存储一个用户信息对象数据。
-
存储: 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 1) "username" 2) "lisi" 3) "password" 4) "123"
-
删除: hdel key field
127.0.0.1:6379> hdel myhash username (integer) 1
列表类型 list
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
list类型经常会被用于消息队列的服务,以完成多程序之间的消息交换。
常用命令:lpush、rpush、lpop、rpop、lrange等。
列表最多可存储 232 - 1 元素 (4294967295, 每个列表可存储40多亿)。
-
添加:lpush key value:将元素加入列表左边
127.0.0.1:6379> lpush myList a (integer) 1 127.0.0.1:6379> lpush myList b (integer) 2
-
添加:rpush key value:将元素加入列表右边
127.0.0.1:6379> rpush myList c (integer) 3
-
获取:lrange key start end :范围获取
127.0.0.1:6379> lrange myList 0 -1 1) "b" 2) "a" 3) "c"
-
删除:lpop key: 删除列表最左边的元素,并将元素返回
-
删除:rpop key: 删除列表最右边的元素,并将元素返回
集合类型 set
Redis的Set是string类型的无序集合。和列表一样,在执行插入和删除和判断是否存在某元素时,效率是很高的。集合最大的优势在于可以进行交集并集差集操作。Set可包含的最大元素数量是4294967295。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
-
存储:sadd key value
127.0.0.1:6379> sadd myset a (integer) 1 127.0.0.1:6379> sadd myset a (integer) 0
-
获取:smembers key:获取set集合中所有元素
127.0.0.1:6379> smembers myset 1) "a"
-
删除:srem key value:删除set集合中的某个元素
127.0.0.1:6379> srem myset a (integer) 1
有序集合类型sorted set(zset)
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
zset的成员是唯一的,但分数(score)却可以重复。
sorted set是插入有序的,即自动排序。(升序)
常用命令:zadd、zrange、zrem、zcard等。
当你需要一个有序的并且不重复的集合列表时,那么可以选择sorted set数据结构。
-
存储: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 1) "lisi" 2) "zhangsan" 3) "wangwu" # 查询所有的数据及其分数 127.0.0.1:6379> zrange mysort 0 -1 withscores 1) "zhangsan" 2) "60" 3) "wangwu" 4) "80" 5) "lisi" 6) "500"
-
删除:zrem key value
127.0.0.1:6379> zrem mysort lisi (integer) 1
流类型 stream
Redis的作者在Redis5.0中,放出一个新的数据结构,Stream。Redis Stream 的内部,其实也是一个队列,每一个不同的key,对应的是不同的队列,每个队列的元素,也就是消息,都有一个msgid,并且需要保证msgid是严格递增的。在Stream当中,消息是默认持久化的,即便是Redis重启,也能够读取到消息。那么,stream是如何做到多播的呢?其实非常的简单,与其他队列系统相似,Redis对不同的消费者,也有消费者Group这样的概念,不同的消费组,可以消费同一个消息,对于不同的消费组,都维护一个Idx下标,表示这一个消费群组消费到了哪里,每次进行消费,都会更新一下这个下标,往后面一位进行偏移。
-
存储:xadd name id key value
# name表示stream的名称 你也可以理解成消息队列的名称 # id:一般不需要手动指定 默认(`*`)是毫秒-微秒 在往name队列里面塞元素的时候 如果遇到毫秒重复的 则微秒会自动+1 所以也被称为自增ID # 插入单个字段 127.0.0.1:6379> xadd newstream * userid 110 "1621557810145-0" 127.0.0.1:6379> xadd newstream * userid 111 "1621557813562-0" 127.0.0.1:6379> xadd newstream * userid 112 "1621557817112-0" # 插入多个字段 127.0.0.1:6379> xadd newstream * userid 112 username zhangsan "1621557842159-0"
-
获取:xrange key start end [COUNT count]
# 获取全部数据 127.0.0.1:6379> xrange newstream - + 1) 1) "1621557810145-0" 2) 1) "userid" 2) "110" 2) 1) "1621557813562-0" 2) 1) "userid" 2) "111" 3) 1) "1621557817112-0" 2) 1) "userid" 2) "112" 4) 1) "1621557842159-0" 2) 1) "userid" 2) "112" 3) "username" 4) "zhangsan" # 获取前两个数据 127.0.0.1:6379> xrange newstream - + count 2 1) 1) "1621557810145-0" 2) 1) "userid" 2) "110" 2) 1) "1621557813562-0" 2) 1) "userid" 2) "111" # 获取id范围数据 127.0.0.1:6379> xrange newstream 1621557810145-0 1621557817112-0 1) 1) "1621557810145-0" 2) 1) "userid" 2) "110" 2) 1) "1621557813562-0" 2) 1) "userid" 2) "111" 3) 1) "1621557817112-0" 2) 1) "userid" 2) "112"
-
查询当前stream长度:xlen key
127.0.0.1:6379> xlen newstream (integer) 4
-
删除:xdel key id
127.0.0.1:6379> xdel newstream 1621557813562-0 (integer) 1
通用命令
keys * : 查询所有的键
type key : 获取键对应的value的类型
del key:删除指定的key value
select :切换数据库
flushdb :清除当前数据库
flushall : 清除全部数据库内容
二、连接远程的redis
远程客户端工具(RedisDesktopManager)使用
百度网盘下载链接:https://pan.baidu.com/s/1EC9GoYGzYysRVm-8IagfHA
提取码:cyfh
注意:需要开启防火墙端口号
[root@localhost /]# firewall-cmd --zone=public --add-port=6379/tcp --permanent
success
[root@localhost /]# systemctl restart firewalld
[root@localhost /]# firewall-cmd --zone=public --list-ports
6379/tcp
连接成功,redis默认有16个数据库
在配置文件(redis.conf)中,找到属性databases可以查看或修改默认值
测试使用
添加 key value
点击可直接查看