1.基本知识
Redis默认有16个数据库,查看redis.windows.conf文件可以找到
默认的使用的是第0个
可以使用select切换数据库
127.0.0.1:6379> select 5
OK
127.0.0.1:6379[5]> select 0
OK
127.0.0.1:6379>
数据库的大小和查询当前数据库的所有key值
127.0.0.1:6379> set name object >> 给name赋值
OK
127.0.0.1:6379> get name
"object"
127.0.0.1:6379> dbsize >>查询数据库的大小
(integer) 1
127.0.0.1:6379> set name1 object
OK
127.0.0.1:6379> dbsize
(integer) 2
127.0.0.1:6379> keys * >>或得当前数据库的所有key值
1) "name1"
2) "name"
清空当前数据库和清空所有数据库
127.0.0.1:6379> flushdb >>清空当前数据库
OK
127.0.0.1:6379> flushall >>清空所有数据库
OK
127.0.0.1:6379>
Redis-Key的常用命令
127.0.0.1:6379> keys * >>获取全部的key值
(empty list or set)
127.0.0.1:6379> set name object >>给name赋值
OK
127.0.0.1:6379> get name >>获取name对应的value值
"object"
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> exists name >>判断可以是否存在 1存在 0不存在
(integer) 1
127.0.0.1:6379> exists name1
(integer) 0
127.0.0.1:6379> move name 1 >>删除一个key值
(integer) 1
127.0.0.1:6379> clear >>清屏
127.0.0.1:6379> keys *
1) "age"
127.0.0.1:6379> set name object
OK
127.0.0.1:6379> expire name 10 >>设置可以的有效期 返回1成功
(integer) 1
127.0.0.1:6379> ttl name >>查询key值的有效期
(integer) 6
127.0.0.1:6379> ttl name
(integer) -2
127.0.0.1:6379> get name >>有效期已经过去,key消失
(nil)
127.0.0.1:6379> set name object
OK
127.0.0.1:6379> type name >>查询出key的类型
string
127.0.0.1:6379> type age
string
127.0.0.1:6379>
Redis 是单线程的!
2.五大基本类型
官方文档
Redis是一个开放源代码(BSD许可)的内存中数据结构存储,用作数据库,缓存和消息代理。它支持数据结构,例如字符串,哈希,列表,集合,带范围查询的排序集合,位图,超日志,带有半径查询和流的地理空间索引。Redis具有内置的复制,Lua脚本,LRU驱逐,事务和不同级别的磁盘持久性,并通过Redis Sentinel和Redis Cluster自动分区提供了高可用性。
String(字符串)
127.0.0.1:6379> set name object >>给key赋值
OK
127.0.0.1:6379> get name >>取key值
"object"
127.0.0.1:6379> keys * >>取所有key值
1) "name"
127.0.0.1:6379> exists name >>判断key是否存在(1) 如果不存在,则创建
(integer) 1
127.0.0.1:6379> append name "Hello" >>追加字符串
(integer) 11
127.0.0.1:6379> get name
"objectHello"
127.0.0.1:6379> strlen name >>获取字符串的长度
(integer) 11
设置自增 自减
127.0.0.1:6379> set hits 0 >>初始值为0
OK
127.0.0.1:6379> get hits
"0"
127.0.0.1:6379> incr hits >>累加1
(integer) 1
127.0.0.1:6379> incr hits
(integer) 2
127.0.0.1:6379> get hits
"2"
127.0.0.1:6379> decr hits >>累减1
(integer) 1
127.0.0.1:6379> decr hits
(integer) 0
127.0.0.1:6379> get hits
"0"
127.0.0.1:6379> incrby hits 10 >>自定义增长
(integer) 10
127.0.0.1:6379> get hits
"10"
127.0.0.1:6379> decrby hits 5 >>自定义减
(integer) 5
127.0.0.1:6379>
字符串范围 range
127.0.0.1:6379> set name helloObject
OK
127.0.0.1:6379> getrange name 0 4 >>获取字符串[0,4]区间的
"hello"
127.0.0.1:6379> getrange name 0 -1 >>获取全部字符串和getkey一样的
"helloObject"
127.0.0.1:6379>
>>>>替换
>
127.0.0.1:6379> set name abcdefg
OK
127.0.0.1:6379> get name
"abcdefg"
127.0.0.1:6379> setrange name 0 xxx >>替换指定位置开始的字符串!
(integer) 7
127.0.0.1:6379> get name
"xxxdefg"
setex (set with expire) # 设置过期时间
setnx (set if not exist) # 不存在在设置 (在分布式锁中会常常使用!)
127.0.0.1:6379> setex name 30 "Hello" >>设置key的值为hello 30s过期
OK
127.0.0.1:6379> ttl name
(integer) 25
127.0.0.1:6379> setnx name1 "redis" >>如果不存在name1 创建name1
(integer) 1
127.0.0.1:6379> keys *
1) "name1"
2) "name"
127.0.0.1:6379> keys *
1) "name1"
127.0.0.1:6379> set name "redis"
OK
127.0.0.1:6379> get name
"redis"
127.0.0.1:6379> setnx name "mongoDb" 如果name 存在,创建失败!
(integer) 0
127.0.0.1:6379> get name1
"redis"
同时设置多个值
127.0.0.1:6379> mset a 1 b 2 c 3 d 4 e 5 >>同时设置多个值
OK
127.0.0.1:6379> mget a b c d e >>同时获取多个值
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6379> msetnx e 6 x 22 >>msetnx 是一个原子性的操作,要么一起成功,要么一起 失败
(integer) 0
127.0.0.1:6379> get e
"5"
127.0.0.1:6379> get x
(nil)
存储对象
127.0.0.1:6379> set user:1 {name:object,age:16}>>设置一个user:1 对象 值为 json字符来保存一个对象!
OK
127.0.0.1:6379> get user:1
"{name:object,age:16}"
127.0.0.1:6379> mset user:1:name zhangsan user:1:age 2
OK
127.0.0.1:6379> mget user:1:name user:1:age
1) "zhangsan"
2) "2"
127.0.0.1:6379>
先get在set
127.0.0.1:6379> getset db redis >>如果key不存在返回nil并创建key
(nil)
127.0.0.1:6379> get db
"redis"
127.0.0.1:6379> getset db mongoDb >>如果key不存在返回当前key值,在创建新的key
"redis"
127.0.0.1:6379> get db
"mongoDb"
127.0.0.1:6379>
List(列表)
所有的list命令都是用l开头的,Redis不区分大小命令
左进右进
127.0.0.1:6379> lpush list one >>将一个值或者多个值,插入到列表头部 (左)
(integer) 1
127.0.0.1:6379> lpush list two
(integer) 2
127.0.0.1:6379> lpush list three
(integer) 3
127.0.0.1:6379> LRANGE list 0 -1 >>获取list中值!
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> LRANGE list 0 1 >>通过区间获取list中值!
1) "three"
2) "two"
127.0.0.1:6379> Rpush list right >> 将一个值或者多个值,插入到列表位部 (右)
(integer) 4
127.0.0.1:6379> LRANGE list 0 -1
1) "three"
2) "two"
3) "one"
4) "right"
左移右移
127.0.0.1:6379> lpop list >>移除list的第一个元素
"three"
127.0.0.1:6379> rpop list >>移除list的最后一个元素
"right"
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
通过index获取list中的某一个值
127.0.0.1:6379> lindex list 0 >>获取下标为0的元素
"two"
127.0.0.1:6379> lindex list 1
"one"
127.0.0.1:6379
获取list的长度
127.0.0.1:6379> llen list >>获取list集合的长度
(integer) 2
127.0.0.1:6379>
移除指定的值
127.0.0.1:6379> lpush list three
(integer)3
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> lpush list three
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "three"
3) "two"
4) "one"
127.0.0.1:6379> lrem list 1 three >>移除list集合中指定个数的value,精确匹配
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379>
获取list的长度
127.0.0.1:6379> rpush list 1
(integer) 1
127.0.0.1:6379> rpush list 2
(integer) 2
127.0.0.1:6379> rpush list 3
(integer) 3
127.0.0.1:6379> rpush list 4
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379> ltrim list 0 1 >>通过下标截取指定的位置
OK
127.0.0.1:6379> lrange list 0 -1
1) "1"
2) "2"
127.0.0.1:6379>
移除列表的最后一个元素,将他移动到新的列表中
127.0.0.1:6379> lrange list 0 -1
1) "1"
2) "2"
127.0.0.1:6379> rpoplpush list mylist 移除list的最后一个元素,将移除元素移动到mylist列表里面
"2"
127.0.0.1:6379> lrange mylist 0 -1
1) "2"
127.0.0.1:6379> lrange list 0 -1
1) "1"
127.0.0.1:6379>
将列表中指定下标的值替换为另外一个值,更新操作
127.0.0.1:6379> exists list >>判断这个列表是否存在 0
(integer) 0
127.0.0.1:6379> lset list 0 item >>如果不存在 我们更新就会报错
(error) ERR no such key
127.0.0.1:6379> lpush list one
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "one"
127.0.0.1:6379> lset list 0 two >如果存在 更新当前下标
OK
127.0.0.1:6379> lrange list 0 -1
1) "two"
127.0.0.1:6379>
将某个具体的value插入到列把你中某个元素的前面或者后面!
127.0.0.1:6379> lrange list 0 -1
1) "one"
2) "two"
127.0.0.1:6379> linsert list before two three >>把three插入到two之前
(integer) 3
127.0.0.1:6379> lrange list 0 -1
1) "one"
2) "three"
3) "two"
127.0.0.1:6379> linsert list after two aaaa >>把aaa插入到two之后
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "one"
2) "three"
3) "two"
4) "aaaa"
127.0.0.1:6379>
总结
如果key 不存在,创建新的链表
如果key存在,新增
Set(集合)
set中的值是不能重读的!
set添加和查询
127.0.0.1:6379> sadd set a >>往set集合添加元素
(integer) 1
127.0.0.1:6379> sadd set b
(integer) 1
127.0.0.1:6379> sadd set c
(integer) 1
127.0.0.1:6379> SMEMBERS set >>查询set集合的元素
1) "b"
2) "a"
3) "c"
127.0.0.1:6379> SISMEMBER set a >>判断某个元素是否在集合中 1在 0不在
(integer) 1
127.0.0.1:6379> SISMEMBER set aa
(integer) 0
获取set集合中的内容元素个数!
127.0.0.1:6379> scard set
(integer) 3
127.0.0.1:6379>
移除set集合中的指定元素
127.0.0.1:6379> SMEMBERS set
1) "b"
2) "a"
3) "c"
127.0.0.1:6379> srem set a
(integer) 1
127.0.0.1:6379> SMEMBERS set
1) "b"
2) "c"
无序不重复集合。抽随机!
127.0.0.1:6379> smembers set
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> SRANDMEMBER set >>随机抽取集合中的元素
"b"
127.0.0.1:6379> SRANDMEMBER set
"a"
127.0.0.1:6379> SRANDMEMBER set
"c"
127.0.0.1:6379> SRANDMEMBER set
"a"
127.0.0.1:6379> SRANDMEMBER set
"c"
127.0.0.1:6379> SRANDMEMBER set 2 >> 随机抽选出指定个数的元素
1) "b"
2) "c"
127.0.0.1:6379> SRANDMEMBER set 2
1) "b"
2) "a"
删除定的key,随机删除key!
127.0.0.1:6379> SMEMBERS set
1) "b"
2) "a"
3) "c"
127.0.0.1:6379> spop set
"a"
127.0.0.1:6379> spop set
"c"
127.0.0.1:6379> SMEMBERS set
1) "b"
127.0.0.1:6379>
将一个指定的值,移动到另外一个set集合!
127.0.0.1:6379> sadd set a
(integer) 1
127.0.0.1:6379> sadd set b
(integer) 1
127.0.0.1:6379> sadd set c
(integer) 1
127.0.0.1:6379> sadd myset d
(integer) 1
127.0.0.1:6379> smove set myset a >>将set中的指定值移动到myset里面
(integer) 1
127.0.0.1:6379> smembers set
1) "b"
2) "c"
127.0.0.1:6379> smembers myset
1) "a"
2) "d"
127.0.0.1:6379>
集合类
微博,B站,共同关注!(交集)
数字集合类:
- 差集
- 交集
- 并集
127.0.0.1:6379> SMEMBERS set
1) "b"
2) "a"
3) "c"
127.0.0.1:6379> SMEMBERS myset
1) "e"
2) "d"
3) "c"
127.0.0.1:6379> sdiff set myset >>差集集
1) "a"
2) "b"
127.0.0.1:6379> sinter set myset >>交集
1) "c"
127.0.0.1:6379> sunion set myset >>并集
1) "e"
2) "c"
3) "b"
4) "a"
5) "d"
**
Map集合,key-map! 时候这个值是一个map集合! 本质和String类型没有太大区别,还是一个简单的key-vlaue!**
Hash(哈希)
添加 获取 获取全部 删除
set myhash(key) field kuangshen(value)
127.0.0.1:6379> hset user name object >>set一个具体 key-vlaue
(integer) 1
127.0.0.1:6379> hget user name >>获取一个字段值
"object"
127.0.0.1:6379> hmset user age 16 height 180 >>设置多个字段
OK
127.0.0.1:6379> hmget user name age height >>取得多个字段
1) "object"
2) "16"
3) "180"
127.0.0.1:6379> hgetall user >>获取全部数据
1) "name"
2) "object"
3) "age"
4) "16"
5) "height"
6) "180"
127.0.0.1:6379> hdel user height >>删除hash指定key字段!对应的value值也就消失了!
(integer) 1
127.0.0.1:6379> hgetall user
1) "name"
2) "object"
3) "age"
4) "16"
获取hash表的字段数量!
127.0.0.1:6379> hmset user name object agae 18 height 180
OK
127.0.0.1:6379> hgetall user
1) "name"
2) "object"
3) "agae"
4) "18"
5) "height"
6) "180"
127.0.0.1:6379> hlen user >>获取hash表的字段数量!
(integer) 3
127.0.0.1:6379>
判断hash中指定字段是否存在!
127.0.0.1:6379> hexists user name //1存在 0不存在
(integer) 1
127.0.0.1:6379> hexists user a
(integer) 0
127.0.0.1:6379>
只获得所有field 只获得所有value
127.0.0.1:6379> hkeys user >>只获得所有field
1) "name"
2) "agae"
3) "height"
127.0.0.1:6379> hvals user >>只获得所有value
1) "object"
2) "18"
3) "180"
127.0.0.1:6379>
指定增量!
127.0.0.1:6379> hset user age 18
(integer) 1
127.0.0.1:6379> hincrby user age 1 >>指定增量!
(integer) 19
127.0.0.1:6379> hincrby user age -1 >>指定建量
(integer) 18
127.0.0.1:6379> hsetnx user name object >>如果不存在则可以设置
(integer) 1
127.0.0.1:6379> hsetnx user name object >>如果存在则不可以设置
(integer) 0
hash变更的数据 user name age,尤其是是用户信息之类的,经常变动的信息! hash 更适合于对象的
存储,String更加适合字符串存储!
Zset(有序集合)
添加一个和多个值
127.0.0.1:6379> zadd zset 1 one >>添加一个
(integer) 1
127.0.0.1:6379> zadd zset 2 two 3 three >>添加多个
(integer) 2
127.0.0.1:6379> zrange zset 0 -1 >>查看值
1) "one"
2) "two"
3) "three"
127.0.0.1:6379>
排序如何实现
127.0.0.1:6379> zadd zset 5 diwuming 500 diwubaiming 300 disanbaiming
(integer) 3
127.0.0.1:6379> ZRANGEBYSCORE zset -inf +inf >>显示全部的用户 从小到大!
1) "diwuming"
2) "disanbaiming"
3) "diwubaiming"
127.0.0.1:6379> ZREVRANGE zset 0 -1 >>显示全部的用户 从大到小!
1) "diwubaiming"
2) "disanbaiming"
3) "diwuming"
127.0.0.1:6379> ZRANGEBYSCORE zset -inf +inf withscores >>显示全部的用户并出来名次
1) "diwuming"
2) "5"
3) "disanbaiming"
4) "300"
5) "diwubaiming"
6) "500"
127.0.0.1:6379> ZRANGEBYSCORE zset -inf 300 显示名字小于300的用户升 序排序
1) "diwuming"
2) "disanbaiming"
移除元素+获取元素及个数
127.0.0.1:6379> zrange zset 0 -1
1) "diwuming"
2) "disanbaiming"
3) "diwubaiming"
127.0.0.1:6379> zrem zset diwuming >>移除有序集合中的指定元素
(integer) 1
127.0.0.1:6379> zrange zset 0 -1
1) "disanbaiming"
2) "diwubaiming"
127.0.0.1:6379> zcard zset >>获取有序集合中的个数
(integer) 2
127.0.0.1:6379> zadd zset 1 hello 2 world 3 object
(integer) 3
127.0.0.1:6379> zrange zset 0 -1
1) "hello"
2) "world"
3) "object"
127.0.0.1:6379> zcount zset 1 3 >>获取指定区间的成员数量!
(integer) 3
127.0.0.1:6379> zcount zset 1 2
(integer) 2
127.0.0.1:6379>