(十三) 学习笔记: Redis数据库总结

一. Redis数据库介绍

REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。
Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。

二. Redis的数据类型

redis有五种数据类型:
String(字符串),
hash(哈希),
list(列表),
set(集合)
zset(sorted set:有序集合)。
redis命令官网地址: www.redis.cn/commands.html

三. Redis的key键的操作

(1) 查找所有符合给定模式( pattern)的key
keys * # 匹配任意
keys *value* # 匹配含有value的任意
keys value?? # 匹配value后面必须跟两个字符
例如:

keys h?llo  可以匹配到hello/hallo/hxllo等(?代表必须有一个字符)
keys h*llo  可以匹配到hello/hllo/haaaallo等(*表示可以匹配一个或多个可有可无的字符)
keys h[ab]llo  可以匹配hallo/hbllo
keys h[^a]llo  可以匹配除了a以外的例如:hbllo,hbllo等
keys h[a-z]ello  可以匹配a到z 之间的所有字符

(2) 判断某个key是否存在, 存在返回1否则返回0
exists key
例如: exists name # name是已经添加到数据库的键
(3) 查看键对应的value值的类型
type key
例如: type name
(4) 删除键对应的值
del key1 [key2, ...]
例如: del name age sex
(5) 设置过期时间 以秒为单位
expire key seconds
例如: expire name 10 # 10秒后过期
(6) 以秒为单位返回过期时间
ttl key
如果key不存在或者已过期,返回 -2
如果key存在并且没有设置过期时间(永久有效),返回 -1 。
例如: ttl name
(7) 以毫秒为单位返回过期时间
pttl key
例如: pttl name
(8) 取消设置的过期时间
persist key
例如: persist name
(9) 切换数据库
select 0 # 默认0库,数据库为从0-15号库
(10) 清空数据库
flushdb # 清空当前数据库下所有的key
flushall # 清空从0-15号库所有的key
(11) 修改key的名称
rename key newKey
例如: rename name newName

注意:当修改后的key名已经存在,则会覆盖

(12) 将当前数据库中的key移动到其他库中
move key dbname # 其中dbname可以为(0-15)
例如:move name 1
(13) 随机返回当前数据库中的一个key
randomkey

四. String字符串类型

string类型是redis最基本的数据类型, 最大可以容纳的数据长度是512MB的数据。
(1) 设置键值
set key value
例如:set name zhangsan
(2) 设置键值和过期时间
set key seconds value
例如:set name 10 zhangsan
(3) 当key不存在时才设置键值对
setnx key value
例如: setnx name wangwu
(4) 设置多个键值
mset key value [key value ....]
例如: mset name zhangsan age 19 sex w
(5) 对key的部分字符串设置值
setrange key offset value
如果offset比当前key对应string还要长,那这个string后面就补0以达到offset。
例如: name=zhangsan , 执行setrange name 5 AA 则结果为zhangAAn
(6) 根据键获取值
get key
例如:get name
(7) 根据key获取多个值
mget key [key2 ...]
例如:mget name age sex
(8) 返回key中指定范围的字符串
getrange key start end
可以用负的位移来表示从string尾部开始数的下标。所以-1就是最后一个字符,-2就是倒数第二个,以此类推。
这个函数处理超出范围的请求时,都把结果限制在string内。
例如:getrange name 3 6
(9) 给指定的key设置值, 并将旧值返回
getset key value
例如:getset name lisi
(10) 运算操作
要求:值必须是字符串类型的数字

  • 将key对应的值加1
    incr key
    例如: incr age
  • 将key对应的值减1
    decr age
    例如: decr age
  • 将key对应的值 添加整数
    incrby key num
    例如: incrby age 10
  • 将key对应的值减少整数
    decrby key num
    例如: decrby age 10

(11) 追加值
append key value
例如: apeend name aaaa # 追加一个aaaa, 返回追加后字符串的长度
(12) 获取值的长度
strlen key
例如: strlen name

五. Hash哈希

Hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。
主体结构:

key{
  field:value,
  field:value,
  ...
}

(1) 设置单个值
hset key field value
例如: hset myHash name zhangsan
(2) 设置多个值
hmset key field value [field value ...]
例如: hmset myHash name shangsan age 10 sex w
(3) 为hash表中指定字段的值添加num
hincrby key field num
例如:hincrby myHash age 10
(4) 为hash表中指定字段的数据添加浮点数
hincrbyfloat key field num
例如:hincrbyfloat myHash score 10.2
(5) 只有当hash中的field不存在时候才创建
hsetnx key field value
例如: hsetnx myHash name lisi
(6) 获取单个值
hget key field
例如:hget myHash name
(7) 获取多个值
hmget key field [field ....]
例如:hmget myHash name age sex
(8) 获取所有的field和value
hgetall key
例如:hgetall myHash
(9) 获取所有的field
hkeys key
例如: hkeys myHash
(10) 获取所有的值
hvals key
例如: hvals myHash
(11) 获取键值对的个数
hlen key
例如:hlen myHash
(12) 判断field是否存在
hexists key field
例如: hexists myHash name
(13) 删除field
hdel key field [field ....]
例如:hdel myHash name age sex
(14) 返回某一个field的值的长度
hstrlen key field
例如:hstrlen myHash name

六. List列表

redis列表是简单的字符串列表,按照插入顺序排序 你可以在列表的头部或者尾部插入数据。
(1) 在头部插入值
lpush key value value2 ...
例如:lpush mylist name1 name2 name3
(2) 当列表存在时 则向列表头部插入值
lpushx key value
例如:lpushx mylist name4
(3) 在列表尾部插入值
rpush key value1 value2 ...
例如:rpush mylist name5 name6
(4) 当列表存在时,在列表尾部插入值
rpushx key value
例如:rpushx mylist name7
(5) 向指定位置前、后插入一个值
linsert key before/after value insertValue
例如:linsert mylist before/after name1 name100
(6) 设置指定索引的元素的值
lset key index value
索引从0开始依次递增 , -1代表最后一个
例如:lset mylist 0 age1 # 将索引为0的修改为age1
(7) 移除并返回列表的第一个元素
lpop key
例如:lpop mylist
(8) 移除并返回列表的最后一个元素
rpop key
例如:rpop mylist
(9) 返回列表中指定索引范围内的值
lrange key index endindex
例如:range mylist 0 -1 # 查看所有
(10) 裁剪列表
ltrim key start end
例如:ltrim mylist 0 2 # 只留下0-2(包含2)位置的元素
(11) 返回列表中值的个数
llen key
例如: llen mylist
(12) 返回列表中指定索引的值
lindex key index
例如:lindex mylist 0

七. Set集合

Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
(1) 添加元素
sadd key member [member ....]
例如:sadd myset zhangsan lisi wangwu
(2) 返回集合中所有元素
smembers key
例如:smembers myset
(3) 返回元素的个数
scard key
例如:scard myset
(4) 移除集合中的一个随机元素
spop key
例如:spop myset
(5) 返回集合中一个或多个随机元素(默认返回一个)
srandmember key count
例如:srandmember myset 2
(6) 移除集合中的一个或多个成员
srem key member [member ...]
例如:srem myset zhangsan lisi wangwu
(7) 多个集合的交集
sinter key1 key2
例如:sinter myset1 myset2
(8) 多个集合的差集(注意比较顺序)
sdiff key1 key2
例如:sdiff myset1 myset2 # myset1有而myset2不存在的
(9) 多个集合的并集
sunion key1 key2
例如:sunion myset1 myset2
(10) 判断某个元素是否在集合中
sismember key member
例如:sismember myset zhaoliu # 判断zhaoliu是否在myset中, 存在返回1, 不存在返回0

八. ZSet有序集合

Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的score权重(分数)。redis正是通过权重来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但权重(score)却可以重复。
(1) 添加值
zadd key score member [score member ...]
例如:zadd myzset 1 zhangsan 3 lisi 2 wangwu 4 zhaoliu
(2) 将对应的权重值添加increment
zincrby key score member
例如:zincrby myzset 20 lisi
(3) 查看集合的元素个数
zcard key
例如: zcard myzset
(4) 返回指定范围的元素
zrange key start end
例如:zrange myzset 0 -1
(5) 返回指定元素和权重值
zrange key start end withscores
例如: zrange myzset 0 -1 withscores
(6) 返回某个元素对应的权重值
zscore key member
例如:zscore myzset zhangsan
(7) 返回score在min和max之间的个数
zcount key min max
例如:zcount myzset 0 5

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容