目录
启动并登录
启动redis
./redis-server
指定配置文件启动
./redis-server /home/ysfdev/upredis-2.2.0-centos7-x86_64/redis.conf
连接redis
./redis-cli -h 172.21.51.111 -p 3301
登录后输入密码
auth 密码
redis基础操作命令
#设置key值为value
127.0.0.1:6379> set csn aa
OK
#查看key的value值
127.0.0.1:6379> get csn
"aa"
#删除key
127.0.0.1:6379> del csn
(integer) 1
#设置key的有效期
127.0.0.1:6379> expire csn 200
(integer) 1
#查看key剩余有效期,key进行修改后,有效期不会重新开始
127.0.0.1:6379> ttl csn
(integer) 197
#查看key剩余有效期,若key不存在
127.0.0.1:6379> ttl csn2
(integer) -2
# 查看key有效期,若key永久有效
127.0.0.1:6379> ttl csn
(integer) -1
#判断key是否存在
127.0.0.1:6379> exists csn
(integer) 1
127.0.0.1:6379> exists csn3
(integer) 0
#查看所有key
127.0.0.1:6379> keys *
1) "PREPAY_FRONT_TOKEN_KEY"
2) "PREPAY_BACK_TOKEN_KEY"
3) "bitmap:issued:0:3"
#测试与服务端是否连通
127.0.0.1:6379> ping
PONG
#查看key数量
127.0.0.1:6379> dbsize
(integer) 21
#返回关于 Redis 服务器的各种信息和统计数值
127.0.0.1:6379> info
# Server
redis_version:3.2.12
#清空当前数据库中的所有 key
127.0.0.1:6379> flushdb
#清空整个 Redis 服务器的数据( 删除所有数据库的所有 key )
127.0.0.1:6379> flushall
#请求服务器关闭与当前客户端的连接( 断开连接 )
127.0.0.1:6379> quit
注:redis存储中文时有时候展示为
"\xe4\xbd\xa0\xe5\x9c\xa8\xe5\x93\xaa\xe9\x87\x8c\xe5\xb9\xb2\xe4\xbb\x80\xe4\xb9\x88"
这种形式,这只是redis的展示问题,只需要连接客户端时./reids-cli -- raw 即可正常展示
127.0.0.1:6379> set csn 你在哪里干什么
OK
127.0.0.1:6379> get csn
你在哪里干什么
redis的数据类型
redis的数据类型包含5种自有类型和一种自定义类型。
五种自有类型为:
String类型(string)、哈希类型(hash)、列表类型(List)、集合类型(set) 和顺序集合类型(zset)。
String类型
它是一个二进制安全的字符串,意味着它不仅能够存储字符串、还能存储图片、视频等多种类型, 最大长度支持512M。
string基础操作命令
#设置key1的值为hello
127.0.0.1:6379> set key1 hello
OK
#获取key1的值
127.0.0.1:6379> get key1
"hello"
#将key1赋予新值hello1,并返回原有的值
127.0.0.1:6379> getset key1 hello1
"hello"
127.0.0.1:6379> get key1
"hello1"
#删除key1
127.0.0.1:6379> del key1
(integer) 1
string自增自减操作命令
#设置key2的值为0
127.0.0.1:6379> set key2 0
OK
#将key2的值进行自增
127.0.0.1:6379> incr key2
(integer) 1
#将key2的值自增指定数值5
127.0.0.1:6379> incrby key2 5
(integer) 6
#将key2的值进行自减
127.0.0.1:6379> decr key2
(integer) 5
#将key2的值进行自减指定数据2
127.0.0.1:6379> decrby key2 2
(integer) 3
其他命令
#设置key1的值为hello
127.0.0.1:6379> set key1 hello
OK
#在key1值的末尾追加what,并返回key1的长度
127.0.0.1:6379> append key1 what
(integer) 9
#获取key1的值
127.0.0.1:6379> get key1
"hellowhat"
#获取key1的长度
127.0.0.1:6379> strlen key1
(integer) 9
#给多个key设置value
127.0.0.1:6379> mset key1 value1 key2 value2 key3 value3
OK
#返回多个key的value
127.0.0.1:6379> mget key1 key2 key3
1) "value1"
2) "value2"
3) "value3"
散列类型(Hash)
hash 叫散列类型。等价于Java 中的 HashMap。但是在 redis 中 hash 的 key 必须是 string 类型。不支持其他类型。这个特性非常适合存储对象。因为一个对象可以有很多属性,存储起来就是键值对形式的。在 Reids 中,每个 Hash 可以存储多达 4 亿个键值对。
hash操作命令
# 给good对象添加name属性值为apple
127.0.0.1:6379> hset good name apple
(integer) 1
# 给good对象添加colour 属性值为red
127.0.0.1:6379> hset good colour red
(integer) 1
#获取good对象name属性值
127.0.0.1:6379> hget good name
"apple"
#获取good对象所有属性和对应的值
127.0.0.1:6379> hgetall good
1) "name"
2) "apple"
3) "colour"
4) "red"
#批量给对象user添加属性
127.0.0.1:6379> hmset user name csn age 25
OK
#批量获取对象user的属性值
127.0.0.1:6379> hmget user name age
1) "csn"
2) "25"
#删除对象user指定属性name(删除一个属性)
127.0.0.1:6379> hdel user name
(integer) 1
#删除对象user指定属性name(删除多个属性)
127.0.0.1:6379> hdel user name age
(integer) 2
#判断对象user中name属性是否存在
127.0.0.1:6379> hexists user name
(integer) 0
127.0.0.1:6379> hexists user age
(integer) 1
#获取对象user所有的属性
127.0.0.1:6379> hkeys user
1) "age"
#获取对象user所有的属性对应的值
127.0.0.1:6379> hvals user
1) "25"
#获取对象user中的属性个数
127.0.0.1:6379> hlen user
(integer) 1
列表类型(List)
在 Redis 中的 List 类型,其内部使用的是双向链表
实现的,所以它具有双向链表具有的相关特性。其常用操作就是向列表两端添加或删除元素。这使得 List 既可以当做栈(先进后出)
来使用,也可以当做队列(先进先出)
来使用。
list操作命令
#将1 2 3 4 插入list左端
127.0.0.1:6379> lpush list 1 2 3 4
(integer) 4
#将5 6 7 8 插入list右端
127.0.0.1:6379> rpush list 5 6 7 8
(integer) 8
#获取list的全部数据,0到-1 代表全部数据
127.0.0.1:6379> lrange list 0 -1
1) "4"
2) "3"
3) "2"
4) "1"
5) "5"
6) "6"
7) "7"
8) "8"
#获取list的下标1到下标2的数据,下标从0开始
127.0.0.1:6379> lrange list 1 2
1) "3"
2) "2"
#弹出list左边的一个值(弹出后list中将无该值)
127.0.0.1:6379> lpop list
"4"
#弹出list右边的一个值(弹出后list中将无该值)
127.0.0.1:6379> rpop list
"8"
127.0.0.1:6379> lrange list 0 -1
1) "3"
2) "2"
3) "1"
4) "5"
5) "6"
6) "7"
#查看list中的数量
127.0.0.1:6379> llen list
(integer) 6
集合类型(Set)
redis 中的 set 类型和 java 中的 HashSet 类似,其底层都是用HashMap 实现的,只不过所有的 value 都指向同一个对象。在 set 中,没有重复的元素。并且没有顺序。其常用的操作就是向集合中加入或删除一个元素、判断某个元素是否在集合中。另外 redis 还提供了多个集合之间的 交集、并集、差集的运算。
基础命令
# 给seta 添加元素
127.0.0.1:6379> sadd seta a b c d e f g
(integer) 7
#给seta 添加重复元素
127.0.0.1:6379> sadd seta a
(integer) 0
#删除seta中的指定元素
127.0.0.1:6379> srem seta a b c
(integer) 3
#查看seta中的所有元素
127.0.0.1:6379> smembers seta
1) "d"
2) "g"
3) "f"
4) "e"
#判断元素是否在seta中
127.0.0.1:6379> sismember seta a
(integer) 0
127.0.0.1:6379> sismember seta d
(integer) 1
交集并集命令
求并集 a∪b
#给seta设置值
127.0.0.1:6379> sadd seta 1 2 3 4
(integer) 4
#给setb设置值
127.0.0.1:6379> sadd setb 3 4 5 6
(integer) 4
#求seta 和setb的并集
127.0.0.1:6379> sunion seta setb
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
求交集 a∩b
#给seta设置值
127.0.0.1:6379> sadd seta 1 2 3 4
(integer) 4
#给setb设置值
127.0.0.1:6379> sadd setb 3 4 5 6
(integer) 4
#求seta 和setb的交集
127.0.0.1:6379> sinter seta setb
1) "3"
2) "4"
求差集 a-b
#给seta设置值
127.0.0.1:6379> sadd seta 1 2 3 4
(integer) 4
#给setb设置值
127.0.0.1:6379> sadd setb 3 4 5 6
(integer) 4
#求seta和setb的差集,在seta中存在,在setb中不存在
127.0.0.1:6379> sdiff seta setb
1) "1"
2) "2"
#求seta和setb的差集,在setb中存在,在seta中不存在
127.0.0.1:6379> sdiff setb seta
1) "5"
2) "6"
有序集合类型 (sorted set)
SortedSet(zset)
是 redis 提供的一个非常特别的数据结构,它在集合的基础上为每一个元素都关联了一个分数,这相当于 java 中的 Map<String,Double>
,可以给每一个元素赋予一个score
权重。另一方面又像TreeSet
,内部的元素会按照权重score
进行排序。
#给zseta添加元素,分数放前面,元素放后面
127.0.0.1:6379> zadd zseta 10 guan 20 rui 100 csn
(integer) 3
#获取zseta中元素csn的分数
127.0.0.1:6379> zscore zseta csn
"100"
#使用 zrange 获取指定区间(0 -1 表示全部)上的降序排名,带上分数
127.0.0.1:6379> zrange zseta 0 -1 withscores
1) "guan"
2) "10"
3) "rui"
4) "20"
5) "csn"
6) "100"
#使用 zrange 获取指定区间(0 -1 表示全部)上的升序排名,带上分数
127.0.0.1:6379> zrevrange zseta 0 -1 withscores
1) "csn"
2) "100"
3) "rui"
4) "20"
5) "guan"
6) "10"
#使用 zrange 获取指定区间(0 -1 表示全部)上的降序排名
127.0.0.1:6379> zrange zseta 0 -1
1) "guan"
2) "rui"
3) "csn"
# 使用 zrangebyscore 获取 负无穷(-inf)到 正无穷(+inf)区间上所以元素的降序排名
127.0.0.1:6379> zrangebyscore zseta -inf +inf withscores
1) "guan"
2) "10"
3) "rui"
4) "20"
5) "csn"
6) "100"
# # 使用 zrevrangebyscore 获取正无穷(+inf)到 负无穷(-inf)区间上所以元素的升序排名
127.0.0.1:6379> zrevrangebyscore zseta +inf -inf withscores
1) "csn"
2) "100"
3) "rui"
4) "20"
5) "guan"
6) "10"
#使用 zcard 计算 board 集合的元素个数
127.0.0.1:6379> zcard zseta
(integer) 3
#使用 zrem 删除 board 集合中的一个或多个元素
127.0.0.1:6379> zrem zseta rui guan
(integer) 2